in geo/src/main/java/org/netbeans/html/geo/impl/GeoProcessor.java [219:265]
private boolean findOnError(ExecutableElement errElem, TypeElement te, String name, boolean onlyStatic) {
String err = null;
METHODS: for (Element e : te.getEnclosedElements()) {
if (e.getKind() != ElementKind.METHOD) {
continue;
}
if (!e.getSimpleName().contentEquals(name)) {
continue;
}
if (onlyStatic && !e.getModifiers().contains(Modifier.STATIC)) {
errElem = (ExecutableElement) e;
err = "Would have to be static";
continue;
}
ExecutableElement ee = (ExecutableElement) e;
TypeMirror excType = processingEnv.getElementUtils().getTypeElement(Exception.class.getName()).asType();
final List<? extends VariableElement> params = ee.getParameters();
if (params.size() < 1 ||
!processingEnv.getTypeUtils().isAssignable(excType, ee.getParameters().get(0).asType())
) {
errElem = (ExecutableElement) e;
err = "Error method first argument needs to be Exception";
continue;
}
final List<? extends Element> origParams = errElem.getParameters();
if (params.size() != origParams.size()) {
errElem = (ExecutableElement) e;
err = "Error method must have the same parameters as @OnLocation one";
continue;
}
for (int i = 1; i < origParams.size(); i++) {
final TypeMirror t1 = params.get(i).asType();
final TypeMirror t2 = origParams.get(i).asType();
if (!processingEnv.getTypeUtils().isSameType(t1, t2)) {
errElem = (ExecutableElement) e;
err = "Error method must have the same parameters as @OnLocation one";
continue METHODS;
}
}
return true;
}
if (err == null) {
err = "Cannot find " + name + "(Exception) method in this class";
}
error(err, errElem);
return false;
}