diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/data/ResolverNamespaceData.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/data/ResolverNamespaceData.java index b2e48c6fc9d..336663ab16c 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/data/ResolverNamespaceData.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/data/ResolverNamespaceData.java @@ -21,18 +21,12 @@ import com.intellij.psi.PsiPackage; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; -import org.jetbrains.jet.lang.resolve.java.scope.JavaPackageScope; import org.jetbrains.jet.lang.resolve.name.FqName; /** * Either package or class with static members */ public class ResolverNamespaceData extends ResolverScopeData { - public static final ResolverNamespaceData NEGATIVE = new ResolverNamespaceData(true); - - private final NamespaceDescriptor namespaceDescriptor; - - private JavaPackageScope memberScope; public ResolverNamespaceData( @Nullable PsiClass psiClass, @@ -41,23 +35,5 @@ public class ResolverNamespaceData extends ResolverScopeData { @NotNull NamespaceDescriptor namespaceDescriptor ) { super(psiClass, psiPackage, fqName, true, namespaceDescriptor); - this.namespaceDescriptor = namespaceDescriptor; - } - - public ResolverNamespaceData(boolean negative) { - super(negative); - this.namespaceDescriptor = null; - } - - public JavaPackageScope getMemberScope() { - return memberScope; - } - - public NamespaceDescriptor getNamespaceDescriptor() { - return namespaceDescriptor; - } - - public void setMemberScope(JavaPackageScope memberScope) { - this.memberScope = memberScope; } } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaNamespaceResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaNamespaceResolver.java index 0e7d63d8bd6..b62eefb53ec 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaNamespaceResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaNamespaceResolver.java @@ -93,22 +93,22 @@ public final class JavaNamespaceResolver { return null; } - JavaNamespaceDescriptor ns = new JavaNamespaceDescriptor( + JavaNamespaceDescriptor javaNamespaceDescriptor = new JavaNamespaceDescriptor( parentNs, Collections.emptyList(), // TODO qualifiedName ); - ResolverNamespaceData scopeData = createNamespaceResolverScopeData(qualifiedName, ns); - if (scopeData == null) { + JavaPackageScope newScope = createNamespaceScope(qualifiedName, javaNamespaceDescriptor); + if (newScope == null) { return null; } - trace.record(BindingContext.NAMESPACE, scopeData.getPsiPackageOrPsiClass(), ns); + trace.record(BindingContext.NAMESPACE, newScope.getResolverScopeData().getPsiPackageOrPsiClass(), javaNamespaceDescriptor); - ns.setMemberScope(scopeData.getMemberScope()); + javaNamespaceDescriptor.setMemberScope(newScope); - return scopeData.getNamespaceDescriptor(); + return javaNamespaceDescriptor; } @Nullable @@ -127,9 +127,28 @@ public final class JavaNamespaceResolver { } @Nullable - private ResolverNamespaceData createNamespaceResolverScopeData( + private JavaPackageScope createNamespaceScope( @NotNull FqName fqName, - @NotNull NamespaceDescriptor ns + @NotNull NamespaceDescriptor namespaceDescriptor + ) { + ResolverNamespaceData namespaceData = createNamespaceData(fqName, namespaceDescriptor); + JavaPackageScope javaPackageScope; + if (namespaceData == null) { + javaPackageScope = null; + } + else { + javaPackageScope = new JavaPackageScope(fqName, javaSemanticServices, namespaceData); + } + + cache(fqName, javaPackageScope); + + return javaPackageScope; + } + + @Nullable + private ResolverNamespaceData createNamespaceData( + @NotNull FqName fqName, + @NotNull NamespaceDescriptor namespaceDescriptor ) { PsiPackage psiPackage; PsiClass psiClass; @@ -139,28 +158,19 @@ public final class JavaNamespaceResolver { psiClass = getPsiClassForJavaPackageScope(fqName); psiPackage = psiClassFinder.findPsiPackage(fqName); if (psiClass != null || psiPackage != null) { - trace.record(JavaBindingContext.JAVA_NAMESPACE_KIND, ns, JavaNamespaceKind.PROPER); + trace.record(JavaBindingContext.JAVA_NAMESPACE_KIND, namespaceDescriptor, JavaNamespaceKind.PROPER); break lookingForPsi; } psiClass = psiClassFinder.findPsiClass(fqName, PsiClassFinder.RuntimeClassesHandleMode.IGNORE); if (psiClass != null && !psiClass.isEnum()) { - trace.record(JavaBindingContext.JAVA_NAMESPACE_KIND, ns, JavaNamespaceKind.CLASS_STATICS); + trace.record(JavaBindingContext.JAVA_NAMESPACE_KIND, namespaceDescriptor, JavaNamespaceKind.CLASS_STATICS); break lookingForPsi; } - - cache(fqName, null); return null; } - ResolverNamespaceData namespaceData = new ResolverNamespaceData(psiClass, psiPackage, fqName, ns); - - JavaPackageScope memberScope = new JavaPackageScope(fqName, javaSemanticServices, namespaceData); - namespaceData.setMemberScope(memberScope); - - cache(fqName, memberScope); - - return namespaceData; + return new ResolverNamespaceData(psiClass, psiPackage, fqName, namespaceDescriptor); } private void cache(@NotNull FqName fqName, @Nullable JavaPackageScope packageScope) { @@ -186,16 +196,7 @@ public final class JavaNamespaceResolver { if (alreadyResolvedScope != null) { return alreadyResolvedScope; } - ResolverNamespaceData data; - data = createNamespaceResolverScopeData(fqName, namespaceDescriptor); - if (data == null) { - return null; - } - JavaPackageScope scope = data.getMemberScope(); - if (scope == null) { - throw new IllegalStateException("fqn: " + fqName); - } - return scope; + return createNamespaceScope(fqName, namespaceDescriptor); } @Nullable diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaBaseScope.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaBaseScope.java index 6a50bbf1527..edd82ab16ee 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaBaseScope.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaBaseScope.java @@ -44,18 +44,19 @@ public abstract class JavaBaseScope extends JetScopeImpl { @NotNull protected final JavaSemanticServices semanticServices; + @NotNull protected final ResolverScopeData resolverScopeData; @NotNull private final Map> functionDescriptors = Maps.newHashMap(); + @NotNull private final Map> propertyDescriptors = Maps.newHashMap(); - - @Nullable private Collection allDescriptors = null; + protected JavaBaseScope( @NotNull JavaSemanticServices semanticServices, @NotNull ResolverScopeData resolverScopeData @@ -164,4 +165,9 @@ public abstract class JavaBaseScope extends JetScopeImpl { resolverScopeData.isStaticMembers())); } } + + @NotNull + public ResolverScopeData getResolverScopeData() { + return resolverScopeData; + } }