private ExecutableElement findWrite()

in json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java [2291:2346]


    private ExecutableElement findWrite(ExecutableElement computedPropElem, TypeElement te, String name, String className) {
        String err = null;
        boolean instance = te.getAnnotation(Model.class).instance();
        METHODS:
        for (Element e : te.getEnclosedElements()) {
            if (e.getKind() != ElementKind.METHOD) {
                continue;
            }
            if (!e.getSimpleName().contentEquals(name)) {
                continue;
            }
            if (e.equals(computedPropElem)) {
                continue;
            }
            if (!instance && !e.getModifiers().contains(Modifier.STATIC)) {
                computedPropElem = (ExecutableElement) e;
                err = "Would have to be static";
                continue;
            }
            ExecutableElement ee = (ExecutableElement) e;
            if (ee.getReturnType().getKind() != TypeKind.VOID) {
                computedPropElem = (ExecutableElement) e;
                err = "Write method has to return void";
                continue;
            }
            TypeMirror retType = computedPropElem.getReturnType();
            final List<? extends VariableElement> params = ee.getParameters();
            boolean error = false;
            if (params.size() != 2) {
                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(retType, params.get(1).asType())) {
                    error = true;
                }
            }
            if (error) {
                computedPropElem = (ExecutableElement) e;
                err = "Write method first argument needs to be " + className + " and second " + retType + " or Object";
                continue;
            }
            return ee;
        }
        if (err == null) {
            err = "Cannot find " + name + "(" + className + ", value) method in this class";
        }
        error(err, computedPropElem);
        return null;
    }