diff -r 72d5f7163f12 -r c79e191854e4 src/jdk.compiler/share/classes/com/sun/tools/javac/api/TreeBuilderImpl.java --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/api/TreeBuilderImpl.java Mon Apr 01 14:46:17 2019 +0200 +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/api/TreeBuilderImpl.java Tue Apr 02 16:51:25 2019 +0200 @@ -27,11 +27,13 @@ import java.util.function.Consumer; import java.util.function.Function; +import javax.lang.model.element.Modifier; import javax.tools.JavaFileObject; import com.sun.source.doctree.DocTree; import com.sun.source.tree.CompilationUnitTree; import com.sun.source.util.TreeBuilder; +import com.sun.tools.javac.code.Flags; import com.sun.tools.javac.code.TypeTag; import com.sun.tools.javac.tree.JCTree; import com.sun.tools.javac.tree.JCTree.JCClassDecl; @@ -47,6 +49,7 @@ import com.sun.tools.javac.parser.Parser; import com.sun.tools.javac.parser.ParserFactory; import com.sun.tools.javac.tree.JCTree.JCBlock; +import com.sun.tools.javac.tree.JCTree.JCModifiers; import com.sun.tools.javac.tree.JCTree.JCStatement; import com.sun.tools.javac.util.JCDiagnostic; import com.sun.tools.javac.util.Log.DiagnosticHandler; @@ -159,7 +162,8 @@ @Override public Class modifiers(Consumer modifiers) { - throw new UnsupportedOperationException("Not supported yet."); + modifiers.accept(new ModifiersImpl(result.mods)); + return this; } @Override @@ -240,7 +244,8 @@ @Override public Variable modifiers(Consumer modifiers) { - throw new UnsupportedOperationException("Not supported yet."); + modifiers.accept(new ModifiersImpl(result.mods)); + return this; } @Override @@ -291,7 +296,8 @@ @Override public Method modifiers(Consumer modifiers) { - throw new UnsupportedOperationException("Not supported yet."); + modifiers.accept(new ModifiersImpl(result.mods)); + return this; } @Override @@ -481,6 +487,44 @@ } + private final class ModifiersImpl implements Modifiers { + + private final JCModifiers mods; + + public ModifiersImpl(JCModifiers mods) { + this.mods = mods; + } + + @Override + public Modifiers modifier(Modifier modifier) { + long flag; + switch (modifier) { + case PUBLIC: flag = Flags.PUBLIC; break; + case PROTECTED: flag = Flags.PROTECTED; break; + case PRIVATE: flag = Flags.PRIVATE; break; + case ABSTRACT: flag = Flags.ABSTRACT; break; + case STATIC: flag = Flags.STATIC; break; + case FINAL: flag = Flags.FINAL; break; + case TRANSIENT: flag = Flags.TRANSIENT; break; + case VOLATILE: flag = Flags.VOLATILE; break; + case SYNCHRONIZED: flag = Flags.SYNCHRONIZED; break; + case NATIVE: flag = Flags.NATIVE; break; + case STRICTFP: flag = Flags.STRICTFP; break; + case DEFAULT: flag = Flags.DEFAULT; break; + default: + throw new IllegalArgumentException("Unknown modifier: " + modifier); + } + mods.flags |= flag; + return this; + } + + @Override + public Modifiers annotation(Consumer annotation) { + throw new UnsupportedOperationException("Not supported yet."); + } + + } + private JCExpression visitExpression(Consumer c) { ExpressionImpl expr = new ExpressionImpl();