< prev index next >

src/jdk.compiler/share/classes/com/sun/tools/javac/processing/PrintingProcessor.java

Print this page

        

@@ -321,63 +321,67 @@
             return this;
         }
 
         private void printDirective(ModuleElement.Directive directive) {
             indent();
-            switch (directive.getKind()) {
-            case EXPORTS: // "exports package-name [to module-name-list]"
-                {
-                    ExportsDirective exportsDirective = (ExportsDirective) directive;
+            (new PrintDirective(writer)).visit(directive);
+            writer.println(";");
+        }
+
+        private static class PrintDirective implements ModuleElement.DirectiveVisitor<Void, Void> {
+            private final PrintWriter writer;
+
+            PrintDirective(PrintWriter writer) {
+                this.writer = writer;
+            }
+
+            @Override
+            public Void visitExports(ExportsDirective d, Void p) {
+                // "exports package-name [to module-name-list]"
                     writer.print("exports ");
-                    writer.print(exportsDirective.getPackage().getQualifiedName());
-                    printModuleList(exportsDirective.getTargetModules());
+                writer.print(d.getPackage().getQualifiedName());
+                printModuleList(d.getTargetModules());
+                return null;
                 }
-                break;
 
-            case OPENS: // opens package-name [to module-name-list]
-                {
-                    OpensDirective opensDirective = (OpensDirective) directive;
+            @Override
+            public Void visitOpens(OpensDirective d, Void p) {
+                // opens package-name [to module-name-list]
                     writer.print("opens ");
-                    writer.print(opensDirective.getPackage().getQualifiedName());
-                    printModuleList(opensDirective.getTargetModules());
+                writer.print(d.getPackage().getQualifiedName());
+                printModuleList(d.getTargetModules());
+                return null;
                 }
-                break;
 
-            case PROVIDES: // provides service-name with implementation-name
-                {
-                    ProvidesDirective providesDirective = (ProvidesDirective) directive;
+            @Override
+            public Void visitProvides(ProvidesDirective d, Void p) {
+                // provides service-name with implementation-name
                     writer.print("provides ");
-                    writer.print(providesDirective.getService().getQualifiedName());
+                writer.print(d.getService().getQualifiedName());
                     writer.print(" with ");
-                    printNameableList(providesDirective.getImplementations());
+                printNameableList(d.getImplementations());
+                return null;
                 }
-                break;
 
-            case REQUIRES: // requires (static|transitive)* module-name
-                {
-                    RequiresDirective requiresDirective = (RequiresDirective) directive;
+            @Override
+            public Void visitRequires(RequiresDirective d, Void p) {
+                // requires (static|transitive)* module-name
                     writer.print("requires ");
-                    if (requiresDirective.isStatic())
+                if (d.isStatic())
                         writer.print("static ");
-                    if (requiresDirective.isTransitive())
+                if (d.isTransitive())
                         writer.print("transitive ");
-                    writer.print(requiresDirective.getDependency().getQualifiedName());
+                writer.print(d.getDependency().getQualifiedName());
+                return null;
                 }
-                break;
 
-            case USES: // uses service-name
-                {
-                    UsesDirective usesDirective = (UsesDirective) directive;
+            @Override
+            public Void visitUses(UsesDirective d, Void p) {
+                // uses service-name
                     writer.print("uses ");
-                    writer.print(usesDirective.getService().getQualifiedName());
-                }
-                break;
-
-            default:
-                throw new UnsupportedOperationException("unknown directive " + directive);
-            }
-            writer.println(";");
+                writer.print(d.getService().getQualifiedName());
+                return null;
         }
 
         private void printModuleList(List<? extends ModuleElement> modules) {
             if (modules != null) {
                 writer.print(" to ");

@@ -388,10 +392,11 @@
         private void printNameableList(List<? extends QualifiedNameable> nameables) {
                 writer.print(nameables.stream().
                              map(QualifiedNameable::getQualifiedName).
                              collect(Collectors.joining(", ")));
         }
+        }
 
         public void flush() {
             writer.flush();
         }
 
< prev index next >