Refactor JavaNamespaceResolver and ResolverNamespaceData
Remove reference to JavaBaseScope from ResolverNamespaceData
This commit is contained in:
-24
@@ -21,18 +21,12 @@ import com.intellij.psi.PsiPackage;
|
|||||||
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.NamespaceDescriptor;
|
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
|
||||||
import org.jetbrains.jet.lang.resolve.java.scope.JavaPackageScope;
|
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Either package or class with static members
|
* Either package or class with static members
|
||||||
*/
|
*/
|
||||||
public class ResolverNamespaceData extends ResolverScopeData {
|
public class ResolverNamespaceData extends ResolverScopeData {
|
||||||
public static final ResolverNamespaceData NEGATIVE = new ResolverNamespaceData(true);
|
|
||||||
|
|
||||||
private final NamespaceDescriptor namespaceDescriptor;
|
|
||||||
|
|
||||||
private JavaPackageScope memberScope;
|
|
||||||
|
|
||||||
public ResolverNamespaceData(
|
public ResolverNamespaceData(
|
||||||
@Nullable PsiClass psiClass,
|
@Nullable PsiClass psiClass,
|
||||||
@@ -41,23 +35,5 @@ public class ResolverNamespaceData extends ResolverScopeData {
|
|||||||
@NotNull NamespaceDescriptor namespaceDescriptor
|
@NotNull NamespaceDescriptor namespaceDescriptor
|
||||||
) {
|
) {
|
||||||
super(psiClass, psiPackage, fqName, true, 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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+31
-30
@@ -93,22 +93,22 @@ public final class JavaNamespaceResolver {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
JavaNamespaceDescriptor ns = new JavaNamespaceDescriptor(
|
JavaNamespaceDescriptor javaNamespaceDescriptor = new JavaNamespaceDescriptor(
|
||||||
parentNs,
|
parentNs,
|
||||||
Collections.<AnnotationDescriptor>emptyList(), // TODO
|
Collections.<AnnotationDescriptor>emptyList(), // TODO
|
||||||
qualifiedName
|
qualifiedName
|
||||||
);
|
);
|
||||||
|
|
||||||
ResolverNamespaceData scopeData = createNamespaceResolverScopeData(qualifiedName, ns);
|
JavaPackageScope newScope = createNamespaceScope(qualifiedName, javaNamespaceDescriptor);
|
||||||
if (scopeData == null) {
|
if (newScope == null) {
|
||||||
return 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
|
@Nullable
|
||||||
@@ -127,9 +127,28 @@ public final class JavaNamespaceResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private ResolverNamespaceData createNamespaceResolverScopeData(
|
private JavaPackageScope createNamespaceScope(
|
||||||
@NotNull FqName fqName,
|
@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;
|
PsiPackage psiPackage;
|
||||||
PsiClass psiClass;
|
PsiClass psiClass;
|
||||||
@@ -139,28 +158,19 @@ public final class JavaNamespaceResolver {
|
|||||||
psiClass = getPsiClassForJavaPackageScope(fqName);
|
psiClass = getPsiClassForJavaPackageScope(fqName);
|
||||||
psiPackage = psiClassFinder.findPsiPackage(fqName);
|
psiPackage = psiClassFinder.findPsiPackage(fqName);
|
||||||
if (psiClass != null || psiPackage != null) {
|
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;
|
break lookingForPsi;
|
||||||
}
|
}
|
||||||
|
|
||||||
psiClass = psiClassFinder.findPsiClass(fqName, PsiClassFinder.RuntimeClassesHandleMode.IGNORE);
|
psiClass = psiClassFinder.findPsiClass(fqName, PsiClassFinder.RuntimeClassesHandleMode.IGNORE);
|
||||||
if (psiClass != null && !psiClass.isEnum()) {
|
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;
|
break lookingForPsi;
|
||||||
}
|
}
|
||||||
|
|
||||||
cache(fqName, null);
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
ResolverNamespaceData namespaceData = new ResolverNamespaceData(psiClass, psiPackage, fqName, ns);
|
return new ResolverNamespaceData(psiClass, psiPackage, fqName, namespaceDescriptor);
|
||||||
|
|
||||||
JavaPackageScope memberScope = new JavaPackageScope(fqName, javaSemanticServices, namespaceData);
|
|
||||||
namespaceData.setMemberScope(memberScope);
|
|
||||||
|
|
||||||
cache(fqName, memberScope);
|
|
||||||
|
|
||||||
return namespaceData;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void cache(@NotNull FqName fqName, @Nullable JavaPackageScope packageScope) {
|
private void cache(@NotNull FqName fqName, @Nullable JavaPackageScope packageScope) {
|
||||||
@@ -186,16 +196,7 @@ public final class JavaNamespaceResolver {
|
|||||||
if (alreadyResolvedScope != null) {
|
if (alreadyResolvedScope != null) {
|
||||||
return alreadyResolvedScope;
|
return alreadyResolvedScope;
|
||||||
}
|
}
|
||||||
ResolverNamespaceData data;
|
return createNamespaceScope(fqName, namespaceDescriptor);
|
||||||
data = createNamespaceResolverScopeData(fqName, namespaceDescriptor);
|
|
||||||
if (data == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
JavaPackageScope scope = data.getMemberScope();
|
|
||||||
if (scope == null) {
|
|
||||||
throw new IllegalStateException("fqn: " + fqName);
|
|
||||||
}
|
|
||||||
return scope;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
|||||||
+8
-2
@@ -44,18 +44,19 @@ public abstract class JavaBaseScope extends JetScopeImpl {
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
protected final JavaSemanticServices semanticServices;
|
protected final JavaSemanticServices semanticServices;
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
protected final ResolverScopeData resolverScopeData;
|
protected final ResolverScopeData resolverScopeData;
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private final Map<Name, Set<FunctionDescriptor>> functionDescriptors = Maps.newHashMap();
|
private final Map<Name, Set<FunctionDescriptor>> functionDescriptors = Maps.newHashMap();
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private final Map<Name, Set<VariableDescriptor>> propertyDescriptors = Maps.newHashMap();
|
private final Map<Name, Set<VariableDescriptor>> propertyDescriptors = Maps.newHashMap();
|
||||||
|
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private Collection<DeclarationDescriptor> allDescriptors = null;
|
private Collection<DeclarationDescriptor> allDescriptors = null;
|
||||||
|
|
||||||
|
|
||||||
protected JavaBaseScope(
|
protected JavaBaseScope(
|
||||||
@NotNull JavaSemanticServices semanticServices,
|
@NotNull JavaSemanticServices semanticServices,
|
||||||
@NotNull ResolverScopeData resolverScopeData
|
@NotNull ResolverScopeData resolverScopeData
|
||||||
@@ -164,4 +165,9 @@ public abstract class JavaBaseScope extends JetScopeImpl {
|
|||||||
resolverScopeData.isStaticMembers()));
|
resolverScopeData.isStaticMembers()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public ResolverScopeData getResolverScopeData() {
|
||||||
|
return resolverScopeData;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user