< prev index next >

src/jdk.vm.ci/share/classes/jdk.vm.ci.options.processor/src/jdk/vm/ci/options/processor/OptionProcessor.java

Print this page

        

*** 20,42 **** * or visit www.oracle.com if you need additional information or have any * questions. */ package jdk.vm.ci.options.processor; ! import java.io.*; ! import java.util.*; ! ! import javax.annotation.processing.*; ! import javax.lang.model.*; ! import javax.lang.model.element.*; ! import javax.lang.model.type.*; ! import javax.lang.model.util.*; import javax.tools.Diagnostic.Kind; ! import jdk.vm.ci.options.*; ! ! import javax.tools.*; /** * Processes static fields annotated with {@link Option}. An {@link OptionDescriptors} * implementation is generated for each top level class containing at least one such field. The name * of the generated class for top level class {@code com.foo.Bar} is --- 20,63 ---- * or visit www.oracle.com if you need additional information or have any * questions. */ package jdk.vm.ci.options.processor; ! import java.io.IOException; ! import java.io.PrintWriter; ! import java.util.ArrayList; ! import java.util.Collections; ! import java.util.HashMap; ! import java.util.HashSet; ! import java.util.List; ! import java.util.Map; ! import java.util.Set; ! ! import javax.annotation.processing.AbstractProcessor; ! import javax.annotation.processing.Filer; ! import javax.annotation.processing.RoundEnvironment; ! import javax.annotation.processing.SupportedAnnotationTypes; ! import javax.lang.model.SourceVersion; ! import javax.lang.model.element.Element; ! import javax.lang.model.element.ElementKind; ! import javax.lang.model.element.Modifier; ! import javax.lang.model.element.Name; ! import javax.lang.model.element.PackageElement; ! import javax.lang.model.element.TypeElement; ! import javax.lang.model.element.VariableElement; ! import javax.lang.model.type.DeclaredType; ! import javax.lang.model.type.TypeKind; ! import javax.lang.model.type.TypeMirror; ! import javax.lang.model.util.Elements; ! import javax.lang.model.util.Types; import javax.tools.Diagnostic.Kind; + import javax.tools.JavaFileObject; ! import jdk.vm.ci.options.Option; ! import jdk.vm.ci.options.OptionDescriptor; ! import jdk.vm.ci.options.OptionDescriptors; ! import jdk.vm.ci.options.OptionValue; /** * Processes static fields annotated with {@link Option}. An {@link OptionDescriptors} * implementation is generated for each top level class containing at least one such field. The name * of the generated class for top level class {@code com.foo.Bar} is
*** 103,117 **** } DeclaredType declaredOptionValueType = declaredFieldType; while (!types.isSameType(types.erasure(declaredOptionValueType), types.erasure(optionValueType))) { List<? extends TypeMirror> directSupertypes = types.directSupertypes(declaredFieldType); ! assert!directSupertypes.isEmpty(); declaredOptionValueType = (DeclaredType) directSupertypes.get(0); } ! assert!declaredOptionValueType.getTypeArguments().isEmpty(); String optionType = declaredOptionValueType.getTypeArguments().get(0).toString(); if (optionType.startsWith("java.lang.")) { optionType = optionType.substring("java.lang.".length()); } --- 124,138 ---- } DeclaredType declaredOptionValueType = declaredFieldType; while (!types.isSameType(types.erasure(declaredOptionValueType), types.erasure(optionValueType))) { List<? extends TypeMirror> directSupertypes = types.directSupertypes(declaredFieldType); ! assert !directSupertypes.isEmpty(); declaredOptionValueType = (DeclaredType) directSupertypes.get(0); } ! assert !declaredOptionValueType.getTypeArguments().isEmpty(); String optionType = declaredOptionValueType.getTypeArguments().get(0).toString(); if (optionType.startsWith("java.lang.")) { optionType = optionType.substring("java.lang.".length()); }
*** 192,203 **** String declaringClass = option.declaringClass; Name fieldName = option.field.getSimpleName(); if (info.options.size() == 1) { out.printf(" return %s.create(\"%s\", %s.class, \"%s\", %s.class, \"%s\", %s);\n", desc, name, type, help, declaringClass, fieldName, optionValue); } else { ! out.printf(" case \"" + name + "\": return %s.create(\"%s\", %s.class, \"%s\", %s.class, \"%s\", %s);\n", desc, name, type, help, declaringClass, fieldName, ! optionValue); } } out.println(" }"); out.println(" // CheckStyle: resume line length check"); out.println(" return null;"); --- 213,223 ---- String declaringClass = option.declaringClass; Name fieldName = option.field.getSimpleName(); if (info.options.size() == 1) { out.printf(" return %s.create(\"%s\", %s.class, \"%s\", %s.class, \"%s\", %s);\n", desc, name, type, help, declaringClass, fieldName, optionValue); } else { ! out.printf(" case \"" + name + "\": return %s.create(\"%s\", %s.class, \"%s\", %s.class, \"%s\", %s);\n", desc, name, type, help, declaringClass, fieldName, optionValue); } } out.println(" }"); out.println(" // CheckStyle: resume line length check"); out.println(" return null;");
*** 239,261 **** out.println(" }"); out.println(" }"); } out.println("}"); } - - try { - createOptionsFile(pkg, topDeclaringClass.toString(), originatingElements); - } catch (IOException e) { - processingEnv.getMessager().printMessage(Kind.ERROR, e.getMessage(), info.topDeclaringType); - } - } - - private void createOptionsFile(String pkg, String relativeName, Element... originatingElements) throws IOException { - String filename = "META-INF/jvmci.options/" + pkg + "." + relativeName; - FileObject file = processingEnv.getFiler().createResource(StandardLocation.CLASS_OUTPUT, "", filename, originatingElements); - PrintWriter writer = new PrintWriter(new OutputStreamWriter(file.openOutputStream(), "UTF-8")); - writer.close(); } protected PrintWriter createSourceFile(String pkg, String relativeName, Filer filer, Element... originatingElements) { try { // Ensure Unix line endings to comply with code style guide checked by Checkstyle --- 259,268 ----
< prev index next >