src/jdk.compiler/share/classes/com/sun/tools/javac/api/TreeBuilderImpl.java
branchjlahoda-tree-builder
changeset 57300 c79e191854e4
parent 57298 72d5f7163f12
--- 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> 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> 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> 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> annotation) {
+            throw new UnsupportedOperationException("Not supported yet.");
+        }
+
+    }
+
     private JCExpression visitExpression(Consumer<Expression> c) {
         ExpressionImpl expr = new ExpressionImpl();