The overridesView doesn't appear to be accessed in some cases, so we can
save time by creating it lazily.

Review by: bobv@google.com



git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@5481 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/core/ext/soyc/impl/StandardClassMember.java b/dev/core/src/com/google/gwt/core/ext/soyc/impl/StandardClassMember.java
index 7d940d0..fc3d051 100644
--- a/dev/core/src/com/google/gwt/core/ext/soyc/impl/StandardClassMember.java
+++ b/dev/core/src/com/google/gwt/core/ext/soyc/impl/StandardClassMember.java
@@ -34,22 +34,26 @@
  */
 public class StandardClassMember extends AbstractMemberWithDependencies
     implements ClassMember {
+  private final MemberFactory factory;
   private final SortedSet<FieldMember> fields = new TreeSet<FieldMember>(
       Member.SOURCE_NAME_COMPARATOR);
   private final SortedSet<FieldMember> fieldsView = Collections.unmodifiableSortedSet(fields);
   private final SortedSet<MethodMember> methods = new TreeSet<MethodMember>(
       Member.SOURCE_NAME_COMPARATOR);
   private final SortedSet<MethodMember> methodsView = Collections.unmodifiableSortedSet(methods);
-  private final SortedSet<ClassMember> overridesView;
+  private SortedSet<ClassMember> overridesView; // Initialized lazily
   private final String packageName;
   private final String sourceName;
-
+  private final JDeclaredType type;
+  
   /**
    * Constructed by {@link MemberFactory#get(JReferenceType)}.
    */
   public StandardClassMember(MemberFactory factory, JDeclaredType type) {
     super(type.getSourceInfo());
-
+    this.factory = factory;
+    this.type = type;
+    
     int index = type.getName().lastIndexOf('.');
     if (index < 0) {
       packageName = "";
@@ -57,7 +61,52 @@
       packageName = type.getName().substring(0, index).intern();
     }
     sourceName = type.getName().intern();
+  }
 
+  public void addField(FieldMember field) {
+    fields.add(field);
+  }
+
+  public void addMethod(MethodMember method) {
+    methods.add(method);
+  }
+
+  public SortedSet<FieldMember> getFields() {
+    return fieldsView;
+  }
+
+  public SortedSet<MethodMember> getMethods() {
+    return methodsView;
+  }
+
+  public SortedSet<ClassMember> getOverrides() {
+    synchronized (StandardClassMember.class) {
+      if (overridesView == null) {
+        computeOverrides();
+      }
+      return overridesView;
+    }
+  }
+
+  public String getPackage() {
+    return packageName;
+  }
+
+  @Override
+  public String getSourceName() {
+    return sourceName;
+  }
+
+  /**
+   * For debugging use only.
+   */
+  @Override
+  public String toString() {
+    return "ClassMember " + getSourceName();
+  }
+
+  /** Compute overrides on demand. */
+  private void computeOverrides() {
     Set<JDeclaredType> seen = new HashSet<JDeclaredType>();
     Set<JDeclaredType> toTraverse = new HashSet<JDeclaredType>();
     toTraverse.add(type);
@@ -83,41 +132,4 @@
     }
     overridesView = Collections.unmodifiableSortedSet(overrides);
   }
-
-  public void addField(FieldMember field) {
-    fields.add(field);
-  }
-
-  public void addMethod(MethodMember method) {
-    methods.add(method);
-  }
-
-  public SortedSet<FieldMember> getFields() {
-    return fieldsView;
-  }
-
-  public SortedSet<MethodMember> getMethods() {
-    return methodsView;
-  }
-
-  public SortedSet<ClassMember> getOverrides() {
-    return overridesView;
-  }
-
-  public String getPackage() {
-    return packageName;
-  }
-
-  @Override
-  public String getSourceName() {
-    return sourceName;
-  }
-
-  /**
-   * For debugging use only.
-   */
-  @Override
-  public String toString() {
-    return "ClassMember " + getSourceName();
-  }
-}
\ No newline at end of file
+}