private int findOnError()

in json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java [2234:2289]


    private int findOnError(ExecutableElement errElem, TypeElement te, String name, String className) {
        String err = null;
        METHODS:
        for (Element e : te.getEnclosedElements()) {
            if (e.getKind() != ElementKind.METHOD) {
                continue;
            }
            if (!e.getSimpleName().contentEquals(name)) {
                continue;
            }
            if (!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();
            boolean error = false;
            if (params.size() < 2 || params.size() > errElem.getParameters().size()) {
                error = true;
            } else {
                String firstType = params.get(0).asType().toString();
                int lastDot = firstType.lastIndexOf('.');
                if (lastDot != -1) {
                    firstType = firstType.substring(lastDot + 1);
                }
                if (!firstType.equals(className)) {
                    error = true;
                }
                if (!processingEnv.getTypeUtils().isAssignable(excType, params.get(1).asType())) {
                    error = true;
                }
                for (int i = 2; i < params.size(); i++) {
                    final VariableElement expectedParam = errElem.getParameters().get(i);
                    if (!processingEnv.getTypeUtils().isSameType(params.get(i).asType(), errElem.getParameters().get(i).asType())) {
                        error = true;
                        err = "Parameter #" + (i + 1) + " should be of type " + expectedParam;
                    }
                }
            }
            if (error) {
                errElem = (ExecutableElement) e;
                if (err == null) {
                    err = "Error method first argument needs to be " + className + " and second Exception";
                }
                continue;
            }
            return params.size();
        }
        if (err == null) {
            err = "Cannot find " + name + "(" + className + ", Exception) method in this class";
        }
        error(err, errElem);
        return -1;
    }