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