107 disambiguateWith(plugins, plugin -> plugin.getPluginName() + "__" + nextId[0]++);
108 }
109
110 private static void createPluginFactory(AbstractProcessor processor, Element topLevelClass, List<GeneratedPlugin> plugins) {
111 PackageElement pkg = (PackageElement) topLevelClass.getEnclosingElement();
112
113 String genClassName = "PluginFactory_" + topLevelClass.getSimpleName();
114
115 String qualifiedGenClassName = pkg.getQualifiedName() + "." + genClassName;
116 try {
117 JavaFileObject factory = processor.env().getFiler().createSourceFile(qualifiedGenClassName, topLevelClass);
118 try (PrintWriter out = new PrintWriter(factory.openWriter())) {
119 out.printf("// CheckStyle: stop header check\n");
120 out.printf("// CheckStyle: stop line length check\n");
121 out.printf("// GENERATED CONTENT - DO NOT EDIT\n");
122 out.printf("// GENERATORS: %s, %s\n", ReplacementsAnnotationProcessor.class.getName(), PluginGenerator.class.getName());
123 out.printf("package %s;\n", pkg.getQualifiedName());
124 out.printf("\n");
125 createImports(out, plugins);
126 out.printf("\n");
127 out.printf("public class %s implements NodeIntrinsicPluginFactory {\n", genClassName);
128 for (GeneratedPlugin plugin : plugins) {
129 out.printf("\n");
130 plugin.generate(processor, out);
131 }
132 out.printf("\n");
133 createPluginFactoryMethod(out, plugins);
134 out.printf("}\n");
135 }
136 } catch (IOException e) {
137 processor.env().getMessager().printMessage(Diagnostic.Kind.ERROR, e.getMessage());
138 }
139 processor.createProviderFile(qualifiedGenClassName, "org.graalvm.compiler.nodes.graphbuilderconf.NodeIntrinsicPluginFactory", topLevelClass);
140 }
141
142 protected static void createImports(PrintWriter out, List<GeneratedPlugin> plugins) {
143 out.printf("import jdk.vm.ci.meta.ResolvedJavaMethod;\n");
144 out.printf("\n");
145 out.printf("import java.lang.annotation.Annotation;\n");
146 out.printf("import org.graalvm.compiler.nodes.ValueNode;\n");
147 out.printf("import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderContext;\n");
148 out.printf("import org.graalvm.compiler.nodes.graphbuilderconf.GeneratedInvocationPlugin;\n");
149 out.printf("import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugin;\n");
150 out.printf("import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugins;\n");
151 out.printf("import org.graalvm.compiler.nodes.graphbuilderconf.NodeIntrinsicPluginFactory;\n");
152
153 HashSet<String> extra = new HashSet<>();
154 for (GeneratedPlugin plugin : plugins) {
155 plugin.extraImports(extra);
156 }
157 if (!extra.isEmpty()) {
158 out.printf("\n");
159 for (String i : extra) {
160 out.printf("import %s;\n", i);
161 }
162 }
163 }
164
165 private static void createPluginFactoryMethod(PrintWriter out, List<GeneratedPlugin> plugins) {
166 out.printf(" @Override\n");
167 out.printf(" public void registerPlugins(InvocationPlugins plugins, InjectionProvider injection) {\n");
168 for (GeneratedPlugin plugin : plugins) {
169 plugin.register(out);
170 }
171 out.printf(" }\n");
172 }
173 }
|
107 disambiguateWith(plugins, plugin -> plugin.getPluginName() + "__" + nextId[0]++);
108 }
109
110 private static void createPluginFactory(AbstractProcessor processor, Element topLevelClass, List<GeneratedPlugin> plugins) {
111 PackageElement pkg = (PackageElement) topLevelClass.getEnclosingElement();
112
113 String genClassName = "PluginFactory_" + topLevelClass.getSimpleName();
114
115 String qualifiedGenClassName = pkg.getQualifiedName() + "." + genClassName;
116 try {
117 JavaFileObject factory = processor.env().getFiler().createSourceFile(qualifiedGenClassName, topLevelClass);
118 try (PrintWriter out = new PrintWriter(factory.openWriter())) {
119 out.printf("// CheckStyle: stop header check\n");
120 out.printf("// CheckStyle: stop line length check\n");
121 out.printf("// GENERATED CONTENT - DO NOT EDIT\n");
122 out.printf("// GENERATORS: %s, %s\n", ReplacementsAnnotationProcessor.class.getName(), PluginGenerator.class.getName());
123 out.printf("package %s;\n", pkg.getQualifiedName());
124 out.printf("\n");
125 createImports(out, plugins);
126 out.printf("\n");
127 for (GeneratedPlugin plugin : plugins) {
128 plugin.generate(processor, out);
129 out.printf("\n");
130 }
131 out.printf("public class %s implements NodeIntrinsicPluginFactory {\n", genClassName);
132 createPluginFactoryMethod(out, plugins);
133 out.printf("}\n");
134 }
135 } catch (IOException e) {
136 processor.env().getMessager().printMessage(Diagnostic.Kind.ERROR, e.getMessage());
137 }
138 processor.createProviderFile(qualifiedGenClassName, "org.graalvm.compiler.nodes.graphbuilderconf.NodeIntrinsicPluginFactory", topLevelClass);
139 }
140
141 protected static void createImports(PrintWriter out, List<GeneratedPlugin> plugins) {
142 out.printf("import jdk.vm.ci.meta.ResolvedJavaMethod;\n");
143 out.printf("\n");
144 out.printf("import java.lang.annotation.Annotation;\n");
145 out.printf("import org.graalvm.compiler.nodes.ValueNode;\n");
146 out.printf("import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderContext;\n");
147 out.printf("import org.graalvm.compiler.nodes.graphbuilderconf.GeneratedInvocationPlugin;\n");
148 out.printf("import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugin;\n");
149 out.printf("import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugins;\n");
150 out.printf("import org.graalvm.compiler.nodes.graphbuilderconf.NodeIntrinsicPluginFactory;\n");
151
152 HashSet<String> extra = new HashSet<>();
153 for (GeneratedPlugin plugin : plugins) {
154 plugin.extraImports(extra);
155 }
156 if (!extra.isEmpty()) {
157 out.printf("\n");
158 for (String i : extra) {
159 out.printf("import %s;\n", i);
160 }
161 }
162 }
163
164 private static void createPluginFactoryMethod(PrintWriter out, List<GeneratedPlugin> plugins) {
165 out.printf(" @Override\n");
166 out.printf(" public void registerPlugins(InvocationPlugins plugins, NodeIntrinsicPluginFactory.InjectionProvider injection) {\n");
167 for (GeneratedPlugin plugin : plugins) {
168 plugin.register(out);
169 }
170 out.printf(" }\n");
171 }
172 }
|