diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java index af318d4b0e5..da71bfa3b4c 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java @@ -39,6 +39,7 @@ import org.jetbrains.jet.lang.resolve.java.kt.PsiAnnotationWithFlags; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.name.NamePredicate; +import org.jetbrains.jet.lang.resolve.name.NamePredicateUtils; import org.jetbrains.jet.lang.types.*; import org.jetbrains.jet.lang.types.lang.JetStandardClasses; import org.jetbrains.jet.lang.types.lang.JetStandardLibrary; @@ -898,7 +899,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes Set descriptors = Sets.newHashSet(); - for (Map.Entry entry : getNamedMemberss(scopeData, predicate)) { + for (Map.Entry entry : getNamedMemberss(scopeData, predicate).entrySet()) { NamedMembers namedMembers = entry.getValue(); Name propertyName = entry.getKey(); @@ -1463,35 +1464,9 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes } - private Collection> getNamedMemberss(@NotNull ResolverScopeData scopeData, @NotNull NamePredicate predicate) { + private Map getNamedMemberss(@NotNull ResolverScopeData scopeData, @NotNull NamePredicate predicate) { getResolverScopeData(scopeData); - - Name exact = predicate.getExact(); - - if (predicate.isAll()) { - return scopeData.namedMembersMap.entrySet(); - } - else if (exact != null) { - NamedMembers namedMembers = scopeData.namedMembersMap.get(exact); - if (namedMembers != null) { - return Collections.>singletonList( - new AbstractMap.SimpleEntry(exact, namedMembers)); - } - else { - return Collections.emptyList(); - } - } - else { - Collection> r = Lists.newArrayList(); - for (Map.Entry e : scopeData.namedMembersMap.entrySet()) { - Name methodName = e.getKey(); - NamedMembers namedMembers = e.getValue(); - if (predicate.matches(methodName)) { - r.add(new AbstractMap.SimpleEntry(methodName, namedMembers)); - } - } - return r; - } + return NamePredicateUtils.filterKeys(scopeData.namedMembersMap, predicate); } @@ -1502,7 +1477,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes List functions = new ArrayList(); - for (Map.Entry entry : getNamedMemberss(scopeData, predicate)) { + for (Map.Entry entry : getNamedMemberss(scopeData, predicate).entrySet()) { Name methodName = entry.getKey(); NamedMembers namedMembers = entry.getValue(); resolveNamedGroupFunctions( diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/name/NamePredicateUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/name/NamePredicateUtils.java index 8e9fea0a516..a23497144ef 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/name/NamePredicateUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/name/NamePredicateUtils.java @@ -17,10 +17,13 @@ package org.jetbrains.jet.lang.resolve.name; import com.google.common.collect.Collections2; +import com.google.common.collect.Maps; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import java.util.Collection; +import java.util.Collections; +import java.util.Map; /** * @author Stepan Koltsov @@ -37,4 +40,32 @@ public class NamePredicateUtils { return Collections2.filter(descriptors, predicate.asGuavaDescriptorPredicate()); } } + + public static Map filterKeys( + @NotNull Map map, + @NotNull NamePredicate predicate) { + Name exact = predicate.getExact(); + + if (predicate.isAll()) { + return map; + } + else if (exact != null) { + B value = map.get(exact); + if (value != null) { + return Collections.singletonMap(exact, value); + } + else { + return Collections.emptyMap(); + } + } + else { + Map r = Maps.newHashMap(); + for (Map.Entry entry : map.entrySet()) { + if (predicate.matches(entry.getKey())) { + r.put(entry.getKey(), entry.getValue()); + } + } + return r; + } + } }