package lombok.eclipse.agent;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import lombok.Lombok;
public class PatchDelegatePortal {
static final String CLASS_SCOPE = "org.eclipse.jdt.internal.compiler.lookup.ClassScope";
static final String I_JAVA_ELEMENT_ARRAY = "[Lorg.eclipse.jdt.core.IJavaElement;";
static final String SOURCE_TYPE_ELEMENT_INFO = "org.eclipse.jdt.internal.core.SourceTypeElementInfo";
public static boolean handleDelegateForType(Object classScope) {
try {
return (Boolean) Reflection.handleDelegateForType.invoke(null, classScope);
} catch (NoClassDefFoundError e) {
return false;
} catch (IllegalAccessException e) {
throw Lombok.sneakyThrow(e);
} catch (InvocationTargetException e) {
throw Lombok.sneakyThrow(e.getCause());
} catch (NullPointerException e) {
if (!"false".equals(System.getProperty("lombok.debug.reflection", "false"))) {
e.initCause(Reflection.problem);
throw e;
}
return false;
}
}
public static Object[] getChildren(Object returnValue, Object javaElement) {
try {
return (Object[]) Reflection.getChildren.invoke(null, returnValue, javaElement);
} catch (NoClassDefFoundError e) {
return (Object[]) returnValue;
} catch (IllegalAccessException e) {
throw Lombok.sneakyThrow(e);
} catch (InvocationTargetException e) {
throw Lombok.sneakyThrow(e.getCause());
} catch (NullPointerException e) {
if (!"false".equals(System.getProperty("lombok.debug.reflection", "false"))) {
e.initCause(Reflection.problem);
throw e;
}
return (Object[]) returnValue;
}
}
private static final class Reflection {
public static final Method handleDelegateForType;
public static final Method getChildren;
public static final Throwable problem;
static {
Method m = null, n = null;
Throwable problem_ = null;
try {
m = PatchDelegate.class.getMethod("handleDelegateForType", Class.forName(CLASS_SCOPE));
n = PatchDelegate.class.getMethod("getChildren", Class.forName(I_JAVA_ELEMENT_ARRAY), Class.forName(SOURCE_TYPE_ELEMENT_INFO));
} catch (Throwable t) {
problem_ = t;
}
handleDelegateForType = m;
getChildren = n;
problem = problem_;
}
}
}