changeset 16810:f3a1020472cf

Truffle-DSL: added caching for autoimports.
author Christian Humer <christian.humer@gmail.com>
date Wed, 13 Aug 2014 18:06:18 +0200
parents 7eeae4545685
children e8d9b3827d4b
files graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/transform/OrganizedImports.java
diffstat 1 files changed, 11 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/transform/OrganizedImports.java	Wed Aug 13 18:06:18 2014 +0200
+++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/transform/OrganizedImports.java	Wed Aug 13 18:06:18 2014 +0200
@@ -43,6 +43,7 @@
     private final Set<String> declaredStaticFields = new HashSet<>();
     private final Set<String> ambiguousStaticMethods = new HashSet<>();
     private final Set<String> ambiguousStaticFields = new HashSet<>();
+    private final Map<Element, Set<String>> autoImportCache = new HashMap<>();
 
     private final CodeTypeElement topLevelClass;
 
@@ -233,14 +234,18 @@
             return false; // same package name -> no import
         }
 
-        List<Element> elements = ElementUtils.getElementHierarchy(enclosedElement);
+        Set<String> autoImportedTypes = autoImportCache.get(enclosedElement);
 
-        Set<String> autoImportedTypes = new HashSet<>();
-        for (Element element : elements) {
-            if (element.getKind().isClass()) {
-                collectSuperTypeImports((TypeElement) element, autoImportedTypes);
-                collectInnerTypeImports((TypeElement) element, autoImportedTypes);
+        if (autoImportedTypes == null) {
+            List<Element> elements = ElementUtils.getElementHierarchy(enclosedElement);
+            autoImportedTypes = new HashSet<>();
+            for (Element element : elements) {
+                if (element.getKind().isClass()) {
+                    collectSuperTypeImports((TypeElement) element, autoImportedTypes);
+                    collectInnerTypeImports((TypeElement) element, autoImportedTypes);
+                }
             }
+            autoImportCache.put(enclosedElement, autoImportedTypes);
         }
 
         String qualifiedName = getQualifiedName(importType);