diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/MembersCache.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/MembersCache.java index baf7252a76d..c4937abb10a 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/MembersCache.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/MembersCache.java @@ -50,7 +50,8 @@ import java.util.Map; } @NotNull - private NamedMembers getOrCreateEmpty(@NotNull Name name) { + private NamedMembers getOrCreateEmpty(@NotNull JavaNamedElement element) { + Name name = element.getName(); NamedMembers r = namedMembersMap.get(name); if (r == null) { r = new NamedMembers(name); @@ -60,14 +61,7 @@ import java.util.Map; } private void addTask(@NotNull JavaNamedElement member, @NotNull RunOnce task) { - addTask(member.getName().asString(), task); - } - - private void addTask(@Nullable String name, @NotNull RunOnce task) { - if (name == null) { - return; - } - memberProcessingTasks.put(Name.identifier(name), task); + memberProcessingTasks.put(member.getName(), task); } private void runTasksByName(Name name) { @@ -87,22 +81,21 @@ import java.util.Map; } @NotNull - public static MembersCache buildMembersByNameCache( - @Nullable JavaClass javaClass, - @Nullable JavaPackage javaPackage, - boolean staticMembers - ) { + public static MembersCache buildForClass(@NotNull JavaClass javaClass, boolean staticMembers) { MembersCache membersCache = new MembersCache(); - if (javaClass != null) { - membersCache.new ClassMemberProcessor(javaClass, staticMembers).process(); - Collection innerClasses = javaClass.getInnerClasses(); - membersCache.new ExtraPackageMembersProcessor(innerClasses).process(); - } - else if (javaPackage != null) { - Collection classes = DescriptorResolverUtils.filterDuplicateClasses(javaPackage.getClasses()); - membersCache.new ExtraPackageMembersProcessor(classes).process(); - } + membersCache.new ClassMemberProcessor(javaClass, staticMembers).process(); + membersCache.new ExtraPackageMembersProcessor(javaClass.getInnerClasses()).process(); + + return membersCache; + } + + @NotNull + public static MembersCache buildForPackage(@NotNull JavaPackage javaPackage) { + MembersCache membersCache = new MembersCache(); + + Collection classes = DescriptorResolverUtils.filterDuplicateClasses(javaPackage.getClasses()); + membersCache.new ExtraPackageMembersProcessor(classes).process(); return membersCache; } @@ -126,8 +119,7 @@ import java.util.Map; } private void processSamInterface(@NotNull JavaClass javaClass) { - NamedMembers namedMembers = getOrCreateEmpty(javaClass.getName()); - namedMembers.setSamInterface(javaClass); + getOrCreateEmpty(javaClass).setSamInterface(javaClass); } } @@ -165,7 +157,7 @@ import java.util.Map; private void createEntriesForAllMethods() { for (JavaMethod method : javaClass.getAllMethods()) { - getOrCreateEmpty(method.getName()); + getOrCreateEmpty(method); } } @@ -225,7 +217,7 @@ import java.util.Map; private void processField(@NotNull JavaField field) { // group must be created even for excluded field - NamedMembers namedMembers = getOrCreateEmpty(field.getName()); + NamedMembers namedMembers = getOrCreateEmpty(field); if (includeMember(field)) { namedMembers.addField(field); @@ -234,15 +226,13 @@ import java.util.Map; private void processOwnMethod(@NotNull JavaMethod ownMethod) { if (includeMember(ownMethod)) { - NamedMembers namedMembers = getOrCreateEmpty(ownMethod.getName()); - namedMembers.addMethod(ownMethod); + getOrCreateEmpty(ownMethod).addMethod(ownMethod); } } private void processNestedClass(@NotNull JavaClass nested) { if (SingleAbstractMethodUtils.isSamInterface(nested)) { - NamedMembers namedMembers = getOrCreateEmpty(nested.getName()); - namedMembers.setSamInterface(nested); + getOrCreateEmpty(nested).setSamInterface(nested); } } } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/MembersProvider.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/MembersProvider.java index b4375207bcf..69e140f06c7 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/MembersProvider.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/MembersProvider.java @@ -31,6 +31,8 @@ import java.util.Collection; private final JavaPackage javaPackage; private final boolean staticMembers; + private MembersCache membersCache; + private MembersProvider(@Nullable JavaClass javaClass, @Nullable JavaPackage javaPackage, boolean staticMembers) { this.javaClass = javaClass; this.javaPackage = javaPackage; @@ -57,11 +59,18 @@ import java.util.Collection; return getMembersCache().allMembers(); } - private MembersCache membersCache; @NotNull private MembersCache getMembersCache() { if (membersCache == null) { - membersCache = MembersCache.buildMembersByNameCache(javaClass, javaPackage, staticMembers); + if (javaClass != null) { + membersCache = MembersCache.buildForClass(javaClass, staticMembers); + } + else if (javaPackage != null) { + membersCache = MembersCache.buildForPackage(javaPackage); + } + else { + throw new IllegalStateException("MembersProvider should be created either for a class or for a package"); + } } return membersCache; }