001/* 002 * Copyright (C) Photon Vision. 003 * 004 * This program is free software: you can redistribute it and/or modify 005 * it under the terms of the GNU General Public License as published by 006 * the Free Software Foundation, either version 3 of the License, or 007 * (at your option) any later version. 008 * 009 * This program is distributed in the hope that it will be useful, 010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 012 * GNU General Public License for more details. 013 * 014 * You should have received a copy of the GNU General Public License 015 * along with this program. If not, see <https://www.gnu.org/licenses/>. 016 */ 017 018package org.photonvision.common.util; 019 020public class ReflectionUtils { 021 public static StackTraceElement[] getFullStackTrace() { 022 return Thread.currentThread().getStackTrace(); 023 } 024 025 public static StackTraceElement getNthCaller(int n) { 026 if (n < 0) n = 0; 027 return Thread.currentThread().getStackTrace()[n]; 028 } 029 030 public static String getCallerClassName() { 031 StackTraceElement[] stElements = Thread.currentThread().getStackTrace(); 032 for (int i = 1; i < stElements.length; i++) { 033 StackTraceElement ste = stElements[i]; 034 if (!ste.getClassName().equals(ReflectionUtils.class.getName()) 035 && ste.getClassName().indexOf("java.lang.Thread") != 0) { 036 return ste.getClassName(); 037 } 038 } 039 return null; 040 } 041 042 public static String getCallerCallerClassName() { 043 StackTraceElement[] stElements = Thread.currentThread().getStackTrace(); 044 String callerClassName = null; 045 for (int i = 1; i < stElements.length; i++) { 046 StackTraceElement ste = stElements[i]; 047 if (!ste.getClassName().equals(ReflectionUtils.class.getName()) 048 && ste.getClassName().indexOf("java.lang.Thread") != 0) { 049 if (callerClassName == null) { 050 callerClassName = ste.getClassName(); 051 } else if (!callerClassName.equals(ste.getClassName())) { 052 return ste.getClassName(); 053 } 054 } 055 } 056 return null; 057 } 058}