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(
        // 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?


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


How do I get Elements from a class file?


How do I traverse over an ancestors or referenced classes?


[{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