private boolean findOnError()

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;
    }