changeset 23079:a6b3ae072073

Correctly record element dependencies in PluginGenerator annotation processor.
author Roland Schatz <roland.schatz@oracle.com>
date Wed, 25 Nov 2015 14:49:09 +0100
parents b00ef2b9cd00
children e8655ca07d90
files graal/com.oracle.graal.replacements.verifier/src/com/oracle/graal/replacements/verifier/PluginGenerator.java
diffstat 1 files changed, 8 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.replacements.verifier/src/com/oracle/graal/replacements/verifier/PluginGenerator.java	Tue Nov 24 19:31:56 2015 +0100
+++ b/graal/com.oracle.graal.replacements.verifier/src/com/oracle/graal/replacements/verifier/PluginGenerator.java	Wed Nov 25 14:49:09 2015 +0100
@@ -57,12 +57,14 @@
         return env.getElementUtils().getTypeElement("jdk.vm.ci.meta.ResolvedJavaType").asType();
     }
 
-    private static PackageElement getPackage(Element element) {
-        Element enclosing = element;
+    private static Element getTopLevelClass(Element element) {
+        Element prev = element;
+        Element enclosing = element.getEnclosingElement();
         while (enclosing != null && enclosing.getKind() != ElementKind.PACKAGE) {
+            prev = enclosing;
             enclosing = enclosing.getEnclosingElement();
         }
-        return (PackageElement) enclosing;
+        return prev;
     }
 
     private static void mkClassName(StringBuilder ret, Element cls) {
@@ -109,12 +111,13 @@
 
     void createPluginFactory(ExecutableElement intrinsicMethod, ExecutableElement targetMethod, TypeMirror[] constructorSignature) {
         Element declaringClass = intrinsicMethod.getEnclosingElement();
-        PackageElement pkg = getPackage(declaringClass);
+        Element topLevelClass = getTopLevelClass(declaringClass);
+        PackageElement pkg = (PackageElement) topLevelClass.getEnclosingElement();
 
         String genClassName = mkFactoryClassName(intrinsicMethod);
 
         try {
-            JavaFileObject factory = env.getFiler().createSourceFile(pkg.getQualifiedName() + "." + genClassName, intrinsicMethod);
+            JavaFileObject factory = env.getFiler().createSourceFile(pkg.getQualifiedName() + "." + genClassName, topLevelClass, declaringClass, intrinsicMethod);
             try (PrintWriter out = new PrintWriter(factory.openWriter())) {
                 out.printf("// CheckStyle: stop header check\n");
                 out.printf("// CheckStyle: stop line length check\n");