RetoucheDeveloperFAQ

Retouche Developer FAQ

This is the Developer FAQ for NetBeans. It provides answers to frequently asked questions relating to the use of the Retouche API.

Should I prefer Trees or Elements in cases when Elements would be enough, such as retrieving information about a method's parameters?

A: It does not matter, but elements could be a little faster, since the sigfiles can be reused instead of parsing the Java file.

How do I add an annotation to a declaration of a type or type member?

Here is a code sample how to do that:

    ...
    if (Tree.Kind.CLASS == typeDecl.getKind()) {
        ClassTree clazz = (ClassTree) typeDecl;
                        
        // create the new annotation
        AnnotationTree newAnnotation = make.Annotation(
            make.Identifier("Override"), 
            Collections.<ExpressionTree>emptyList()
        );
                       
        // create new class modifiers, flags aren't changed,
        // annotation is added to the end of annotation list.
        ModifiersTree classModifiers = make.addModifiersAnnotation(clazz.getModifiers(), newAnnotation);

        // rewrite the original modifiers with the new one:
        workingCopy.rewrite(clazz.getModifiers(), classModifiers);
    }
    ...

How do I add a Javadoc to type a or a type member? There is TreeMaker.addComment(), what then?

A:

Calling WorkingCOpy.toPhase() seems to remove any previous changes made using WorkingCopy.rewrite(), even though that phase has already been entered before making the changes. Is that a bug or a feature?

A: Issue 88909

Will it be true in the final version of the API that WorkingCopy extends CompilationController extends COmpilationInfo? That is CC and CI will not be final classes?

A: It will stay like that in the final version.

Why does JavaSource.getFileObjects() return Iterable instead of e.g. Set? The latter would allow e.g. calling contents() on the returned instance.

A: Easy to change, not sure if this is needed right now.

It seems possible to find an ExecutableElement for the default constructor for the following file:

class Foo {
}

Bug or feature?

A: Feature. The returned constructor is synthetic (ElementUtilities.isSyntetic().

Is it safe to type cast after getKind()? For example is the following safe?

if (element.getKind() == ElementKind.CONSTRUCTOR) {
    ExecutableElement constructor = (ExecutableElement)element;
}

A: Yes, this is safe

What's the best way to get the type of a VariableElement?

A: Use

element.asType()

How do I get Elements from a class file?

A:

How do I traverse over an ancestors or referenced classes?

A:

[{InsertPage page='JavaHT_TreeMakerQA'

            style='margin: 10px; padding: 5px;' 
            }]
Not logged in. Log in, Register

By use of this website, you agree to the NetBeans Policies and Terms of Use. © 2012, Oracle Corporation and/or its affiliates. Sponsored by Oracle logo