Made scope in JavaPackageFragmentDescriptor final.
This commit is contained in:
+16
-7
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.jet.lang.resolve.java.descriptor;
|
package org.jetbrains.jet.lang.resolve.java.descriptor;
|
||||||
|
|
||||||
|
import com.intellij.util.NullableFunction;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||||
@@ -34,15 +35,27 @@ import java.util.Collections;
|
|||||||
public class JavaPackageFragmentDescriptor extends DeclarationDescriptorImpl implements PackageFragmentDescriptor {
|
public class JavaPackageFragmentDescriptor extends DeclarationDescriptorImpl implements PackageFragmentDescriptor {
|
||||||
private final JavaPackageFragmentProvider provider;
|
private final JavaPackageFragmentProvider provider;
|
||||||
private final FqName fqName;
|
private final FqName fqName;
|
||||||
private JetScope memberScope;
|
private final JetScope memberScope;
|
||||||
|
|
||||||
public JavaPackageFragmentDescriptor(
|
private JavaPackageFragmentDescriptor(
|
||||||
@NotNull JavaPackageFragmentProvider provider,
|
@NotNull JavaPackageFragmentProvider provider,
|
||||||
@NotNull FqName fqName
|
@NotNull FqName fqName,
|
||||||
|
@NotNull NullableFunction<JavaPackageFragmentDescriptor, JetScope> scopeFactory
|
||||||
) {
|
) {
|
||||||
super(Collections.<AnnotationDescriptor>emptyList(), fqName.shortNameOrSpecial());
|
super(Collections.<AnnotationDescriptor>emptyList(), fqName.shortNameOrSpecial());
|
||||||
this.provider = provider;
|
this.provider = provider;
|
||||||
this.fqName = fqName;
|
this.fqName = fqName;
|
||||||
|
this.memberScope = scopeFactory.fun(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public static JavaPackageFragmentDescriptor create(
|
||||||
|
@NotNull JavaPackageFragmentProvider provider,
|
||||||
|
@NotNull FqName fqName,
|
||||||
|
@NotNull NullableFunction<JavaPackageFragmentDescriptor, JetScope> scopeFactory
|
||||||
|
) {
|
||||||
|
JavaPackageFragmentDescriptor descriptor = new JavaPackageFragmentDescriptor(provider, fqName, scopeFactory);
|
||||||
|
return descriptor.memberScope == null ? null : descriptor;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -62,10 +75,6 @@ public class JavaPackageFragmentDescriptor extends DeclarationDescriptorImpl imp
|
|||||||
return visitor.visitPackageFragmentDescriptor(this, data);
|
return visitor.visitPackageFragmentDescriptor(this, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setMemberScope(@NotNull JetScope memberScope) {
|
|
||||||
this.memberScope = memberScope;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public JetScope getMemberScope() {
|
public JetScope getMemberScope() {
|
||||||
|
|||||||
+20
-20
@@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.jet.lang.resolve.java.resolver;
|
package org.jetbrains.jet.lang.resolve.java.resolver;
|
||||||
|
|
||||||
|
import com.google.common.collect.Maps;
|
||||||
|
import com.intellij.util.NullableFunction;
|
||||||
import com.intellij.util.containers.ContainerUtil;
|
import com.intellij.util.containers.ContainerUtil;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
@@ -45,7 +47,7 @@ import java.util.*;
|
|||||||
|
|
||||||
public final class JavaPackageFragmentProvider implements PackageFragmentProvider {
|
public final class JavaPackageFragmentProvider implements PackageFragmentProvider {
|
||||||
@NotNull
|
@NotNull
|
||||||
private final Map<FqName, JetScope> packageFragments = new HashMap<FqName, JetScope>();
|
private final Map<FqName, JavaPackageFragmentDescriptor> packageFragments = Maps.newHashMap();
|
||||||
@NotNull
|
@NotNull
|
||||||
private final Set<FqName> unresolvedCache = new HashSet<FqName>();
|
private final Set<FqName> unresolvedCache = new HashSet<FqName>();
|
||||||
|
|
||||||
@@ -116,34 +118,32 @@ public final class JavaPackageFragmentProvider implements PackageFragmentProvide
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public JavaPackageFragmentDescriptor getOrCreatePackage(@NotNull FqName qualifiedName) {
|
public JavaPackageFragmentDescriptor getOrCreatePackage(@NotNull final FqName fqName) {
|
||||||
// TODO 1 use one cache
|
// TODO 1 use one cache
|
||||||
if (unresolvedCache.contains(qualifiedName)) {
|
if (unresolvedCache.contains(fqName)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
JetScope scope = packageFragments.get(qualifiedName);
|
JavaPackageFragmentDescriptor packageFragment = packageFragments.get(fqName);
|
||||||
if (scope != null) {
|
if (packageFragment != null) {
|
||||||
return (JavaPackageFragmentDescriptor) scope.getContainingDeclaration();
|
return packageFragment;
|
||||||
}
|
}
|
||||||
|
|
||||||
JavaPackageFragmentDescriptor packageFragment = new JavaPackageFragmentDescriptor(this, qualifiedName);
|
packageFragment = JavaPackageFragmentDescriptor.create(this, fqName, new NullableFunction<JavaPackageFragmentDescriptor, JetScope>() {
|
||||||
|
@Override
|
||||||
JetScope namespaceScope = createPackageScope(qualifiedName, packageFragment, true);
|
@Nullable
|
||||||
cache(qualifiedName, namespaceScope);
|
public JetScope fun(JavaPackageFragmentDescriptor packageFragment) {
|
||||||
if (namespaceScope == null) {
|
return createPackageScope(fqName, packageFragment);
|
||||||
return null;
|
}
|
||||||
}
|
});
|
||||||
|
|
||||||
packageFragment.setMemberScope(namespaceScope);
|
|
||||||
|
|
||||||
|
cache(fqName, packageFragment);
|
||||||
return packageFragment;
|
return packageFragment;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private JetScope createPackageScope(
|
private JetScope createPackageScope(
|
||||||
@NotNull FqName fqName,
|
@NotNull FqName fqName,
|
||||||
@NotNull PackageFragmentDescriptor packageFragment,
|
@NotNull PackageFragmentDescriptor packageFragment
|
||||||
boolean record
|
|
||||||
) {
|
) {
|
||||||
JavaPackage javaPackage = javaClassFinder.findPackage(fqName);
|
JavaPackage javaPackage = javaClassFinder.findPackage(fqName);
|
||||||
if (javaPackage != null) {
|
if (javaPackage != null) {
|
||||||
@@ -175,12 +175,12 @@ public final class JavaPackageFragmentProvider implements PackageFragmentProvide
|
|||||||
return !DescriptorResolverUtils.isCompiledKotlinClassOrPackageClass(javaClass) && hasStaticMembers(javaClass);
|
return !DescriptorResolverUtils.isCompiledKotlinClassOrPackageClass(javaClass) && hasStaticMembers(javaClass);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void cache(@NotNull FqName fqName, @Nullable JetScope packageScope) {
|
private void cache(@NotNull FqName fqName, @Nullable JavaPackageFragmentDescriptor packageFragment) {
|
||||||
if (packageScope == null) {
|
if (packageFragment == null) {
|
||||||
unresolvedCache.add(fqName);
|
unresolvedCache.add(fqName);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
JetScope oldValue = packageFragments.put(fqName, packageScope);
|
JavaPackageFragmentDescriptor oldValue = packageFragments.put(fqName, packageFragment);
|
||||||
if (oldValue != null) {
|
if (oldValue != null) {
|
||||||
throw new IllegalStateException("rewrite at " + fqName);
|
throw new IllegalStateException("rewrite at " + fqName);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user