create JavaPackageScope for class statics
... and compute "kotlin" flag in ResolverScopeData
This commit is contained in:
+3
@@ -49,6 +49,9 @@ public class JavaClassMembersScope extends JavaClassOrPackageScope {
|
|||||||
if (resolverScopeData.psiClass == null) {
|
if (resolverScopeData.psiClass == null) {
|
||||||
throw new IllegalArgumentException("must pass PsiClass here");
|
throw new IllegalArgumentException("must pass PsiClass here");
|
||||||
}
|
}
|
||||||
|
if (resolverScopeData.staticMembers) {
|
||||||
|
throw new IllegalArgumentException("static members should be resolved using " + JavaPackageScope.class);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
|
|||||||
+29
-17
@@ -200,8 +200,6 @@ public class JavaDescriptorResolver {
|
|||||||
|
|
||||||
|
|
||||||
static abstract class ResolverScopeData {
|
static abstract class ResolverScopeData {
|
||||||
protected boolean kotlin;
|
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
final PsiClass psiClass;
|
final PsiClass psiClass;
|
||||||
@Nullable
|
@Nullable
|
||||||
@@ -209,6 +207,7 @@ public class JavaDescriptorResolver {
|
|||||||
@NotNull
|
@NotNull
|
||||||
final FqName fqName;
|
final FqName fqName;
|
||||||
final boolean staticMembers;
|
final boolean staticMembers;
|
||||||
|
final boolean kotlin;
|
||||||
@NotNull
|
@NotNull
|
||||||
final ClassOrNamespaceDescriptor classOrNamespaceDescriptor;
|
final ClassOrNamespaceDescriptor classOrNamespaceDescriptor;
|
||||||
|
|
||||||
@@ -228,6 +227,8 @@ public class JavaDescriptorResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.staticMembers = staticMembers;
|
this.staticMembers = staticMembers;
|
||||||
|
this.kotlin = psiClass != null &&
|
||||||
|
(new PsiClassWrapper(psiClass).getJetClass().isDefined() || psiClass.getName().equals(JvmAbi.PACKAGE_CLASS));
|
||||||
classOrNamespaceDescriptor = descriptor;
|
classOrNamespaceDescriptor = descriptor;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -539,7 +540,6 @@ public class JavaDescriptorResolver {
|
|||||||
|
|
||||||
classDescriptorCache.put(fqName, classData);
|
classDescriptorCache.put(fqName, classData);
|
||||||
|
|
||||||
classData.kotlin = true;
|
|
||||||
classData.classDescriptor.setSupertypes(getSupertypes(new PsiClassWrapper(classObjectPsiClass), classData.classDescriptor, new ArrayList<TypeParameterDescriptor>(0)));
|
classData.classDescriptor.setSupertypes(getSupertypes(new PsiClassWrapper(classObjectPsiClass), classData.classDescriptor, new ArrayList<TypeParameterDescriptor>(0)));
|
||||||
classData.classDescriptor.setName(JetPsiUtil.NO_NAME_PROVIDED); // TODO
|
classData.classDescriptor.setName(JetPsiUtil.NO_NAME_PROVIDED); // TODO
|
||||||
classData.classDescriptor.setModality(Modality.FINAL);
|
classData.classDescriptor.setModality(Modality.FINAL);
|
||||||
@@ -559,7 +559,6 @@ public class JavaDescriptorResolver {
|
|||||||
|
|
||||||
private List<TypeParameterDescriptorInitialization> createUninitializedClassTypeParameters(PsiClass psiClass, ResolverBinaryClassData classData, TypeVariableResolver typeVariableResolver) {
|
private List<TypeParameterDescriptorInitialization> createUninitializedClassTypeParameters(PsiClass psiClass, ResolverBinaryClassData classData, TypeVariableResolver typeVariableResolver) {
|
||||||
JetClassAnnotation jetClassAnnotation = JetClassAnnotation.get(psiClass);
|
JetClassAnnotation jetClassAnnotation = JetClassAnnotation.get(psiClass);
|
||||||
classData.kotlin = jetClassAnnotation.isDefined();
|
|
||||||
|
|
||||||
if (jetClassAnnotation.signature().length() > 0) {
|
if (jetClassAnnotation.signature().length() > 0) {
|
||||||
return resolveClassTypeParametersFromJetSignature(
|
return resolveClassTypeParametersFromJetSignature(
|
||||||
@@ -920,10 +919,21 @@ public class JavaDescriptorResolver {
|
|||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private ResolverNamespaceData createNamespaceResolverScopeData(@NotNull FqName fqName, @NotNull NamespaceDescriptor ns) {
|
private ResolverNamespaceData createNamespaceResolverScopeData(@NotNull FqName fqName, @NotNull NamespaceDescriptor ns) {
|
||||||
PsiPackage psiPackage = semanticServices.getPsiClassFinder().findPsiPackage(fqName);
|
PsiPackage psiPackage;
|
||||||
PsiClass psiClass = getPsiClassForJavaPackageScope(fqName);
|
psiPackage = semanticServices.getPsiClassFinder().findPsiPackage(fqName);
|
||||||
if (psiClass == null && psiPackage == null) {
|
PsiClass psiClass;
|
||||||
return null;
|
|
||||||
|
lookingForPsi:
|
||||||
|
{
|
||||||
|
psiClass = getPsiClassForJavaPackageScope(fqName);
|
||||||
|
if (psiClass != null || psiPackage != null) {
|
||||||
|
break lookingForPsi;
|
||||||
|
}
|
||||||
|
|
||||||
|
psiClass = psiClassFinder.findPsiClass(fqName);
|
||||||
|
if (psiClass == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (psiPackage != null) {
|
if (psiPackage != null) {
|
||||||
@@ -934,9 +944,6 @@ public class JavaDescriptorResolver {
|
|||||||
|
|
||||||
JavaPackageScope scope = new JavaPackageScope(fqName, semanticServices, namespaceData);
|
JavaPackageScope scope = new JavaPackageScope(fqName, semanticServices, namespaceData);
|
||||||
|
|
||||||
// TODO: hack
|
|
||||||
namespaceData.kotlin = true;
|
|
||||||
|
|
||||||
namespaceData.memberScope = scope;
|
namespaceData.memberScope = scope;
|
||||||
|
|
||||||
ResolverNamespaceData oldValue = namespaceDescriptorCacheByFqn.put(fqName, namespaceData);
|
ResolverNamespaceData oldValue = namespaceDescriptorCacheByFqn.put(fqName, namespaceData);
|
||||||
@@ -987,18 +994,23 @@ public class JavaDescriptorResolver {
|
|||||||
|
|
||||||
FqName fqName = new FqName(psiClass.getQualifiedName());
|
FqName fqName = new FqName(psiClass.getQualifiedName());
|
||||||
JavaNamespaceDescriptor ns = new JavaNamespaceDescriptor(
|
JavaNamespaceDescriptor ns = new JavaNamespaceDescriptor(
|
||||||
(NamespaceDescriptorParent) resolveParentDescriptor(psiClass),
|
resolveNamespace(fqName.parent(), DescriptorSearchRule.INCLUDE_KOTLIN),
|
||||||
Collections.<AnnotationDescriptor>emptyList(), // TODO
|
Collections.<AnnotationDescriptor>emptyList(), // TODO
|
||||||
psiClass.getName(),
|
psiClass.getName(),
|
||||||
fqName,
|
fqName,
|
||||||
false
|
false
|
||||||
);
|
);
|
||||||
ResolverNamespaceData namespaceData = new ResolverNamespaceData(psiClass, null, fqName, ns);
|
|
||||||
trace.record(JavaBindingContext.NAMESPACE_IS_CLASS_STATICS, namespaceData.namespaceDescriptor, true);
|
|
||||||
|
|
||||||
ns.setMemberScope(new JavaClassMembersScope(semanticServices, namespaceData));
|
ResolverNamespaceData scopeData = createNamespaceResolverScopeData(fqName, ns);
|
||||||
trace.record(BindingContext.NAMESPACE, psiClass, namespaceData.namespaceDescriptor);
|
if (scopeData == null) {
|
||||||
return namespaceData;
|
throw new IllegalStateException("we have class: " + fqName);
|
||||||
|
}
|
||||||
|
|
||||||
|
ns.setMemberScope(scopeData.memberScope);
|
||||||
|
trace.record(BindingContext.NAMESPACE, psiClass, ns);
|
||||||
|
trace.record(JavaBindingContext.NAMESPACE_IS_CLASS_STATICS, ns, true);
|
||||||
|
|
||||||
|
return scopeData;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class ValueParameterDescriptors {
|
private static class ValueParameterDescriptors {
|
||||||
|
|||||||
-4
@@ -16,18 +16,14 @@
|
|||||||
|
|
||||||
package org.jetbrains.jet.lang.resolve.java;
|
package org.jetbrains.jet.lang.resolve.java;
|
||||||
|
|
||||||
import com.intellij.openapi.util.text.StringUtil;
|
|
||||||
import com.intellij.psi.PsiField;
|
import com.intellij.psi.PsiField;
|
||||||
import com.intellij.psi.PsiMember;
|
|
||||||
import com.intellij.psi.PsiMethod;
|
import com.intellij.psi.PsiMethod;
|
||||||
import com.intellij.psi.PsiParameter;
|
import com.intellij.psi.PsiParameter;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.lang.resolve.java.prop.PropertyNameUtils;
|
import org.jetbrains.jet.lang.resolve.java.prop.PropertyNameUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.java.prop.PropertyParseResult;
|
import org.jetbrains.jet.lang.resolve.java.prop.PropertyParseResult;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -45,6 +45,10 @@ public class JavaPackageScope extends JavaClassOrPackageScope {
|
|||||||
@NotNull JavaDescriptorResolver.ResolverScopeData resolverNamespaceData) {
|
@NotNull JavaDescriptorResolver.ResolverScopeData resolverNamespaceData) {
|
||||||
super(semanticServices, resolverNamespaceData);
|
super(semanticServices, resolverNamespaceData);
|
||||||
this.packageFQN = packageFQN;
|
this.packageFQN = packageFQN;
|
||||||
|
|
||||||
|
if (!resolverNamespaceData.staticMembers) {
|
||||||
|
throw new IllegalArgumentException("instance members should be resolved using " + JavaClassMembersScope.class);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user