< 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 >