提交 886cfbdb 编写于 作者: S Stepan Koltsov

create JavaPackageScope for class statics

... and compute "kotlin" flag in ResolverScopeData
上级 ce0565b4
......@@ -49,6 +49,9 @@ public class JavaClassMembersScope extends JavaClassOrPackageScope {
if (resolverScopeData.psiClass == null) {
throw new IllegalArgumentException("must pass PsiClass here");
}
if (resolverScopeData.staticMembers) {
throw new IllegalArgumentException("static members should be resolved using " + JavaPackageScope.class);
}
}
@NotNull
......
......@@ -200,8 +200,6 @@ public class JavaDescriptorResolver {
static abstract class ResolverScopeData {
protected boolean kotlin;
@Nullable
final PsiClass psiClass;
@Nullable
......@@ -209,6 +207,7 @@ public class JavaDescriptorResolver {
@NotNull
final FqName fqName;
final boolean staticMembers;
final boolean kotlin;
@NotNull
final ClassOrNamespaceDescriptor classOrNamespaceDescriptor;
......@@ -228,6 +227,8 @@ public class JavaDescriptorResolver {
}
this.staticMembers = staticMembers;
this.kotlin = psiClass != null &&
(new PsiClassWrapper(psiClass).getJetClass().isDefined() || psiClass.getName().equals(JvmAbi.PACKAGE_CLASS));
classOrNamespaceDescriptor = descriptor;
}
......@@ -539,7 +540,6 @@ public class JavaDescriptorResolver {
classDescriptorCache.put(fqName, classData);
classData.kotlin = true;
classData.classDescriptor.setSupertypes(getSupertypes(new PsiClassWrapper(classObjectPsiClass), classData.classDescriptor, new ArrayList<TypeParameterDescriptor>(0)));
classData.classDescriptor.setName(JetPsiUtil.NO_NAME_PROVIDED); // TODO
classData.classDescriptor.setModality(Modality.FINAL);
......@@ -559,8 +559,7 @@ public class JavaDescriptorResolver {
private List<TypeParameterDescriptorInitialization> createUninitializedClassTypeParameters(PsiClass psiClass, ResolverBinaryClassData classData, TypeVariableResolver typeVariableResolver) {
JetClassAnnotation jetClassAnnotation = JetClassAnnotation.get(psiClass);
classData.kotlin = jetClassAnnotation.isDefined();
if (jetClassAnnotation.signature().length() > 0) {
return resolveClassTypeParametersFromJetSignature(
jetClassAnnotation.signature(), psiClass, classData.classDescriptor);
......@@ -920,10 +919,21 @@ public class JavaDescriptorResolver {
@Nullable
private ResolverNamespaceData createNamespaceResolverScopeData(@NotNull FqName fqName, @NotNull NamespaceDescriptor ns) {
PsiPackage psiPackage = semanticServices.getPsiClassFinder().findPsiPackage(fqName);
PsiClass psiClass = getPsiClassForJavaPackageScope(fqName);
if (psiClass == null && psiPackage == null) {
return null;
PsiPackage psiPackage;
psiPackage = semanticServices.getPsiClassFinder().findPsiPackage(fqName);
PsiClass psiClass;
lookingForPsi:
{
psiClass = getPsiClassForJavaPackageScope(fqName);
if (psiClass != null || psiPackage != null) {
break lookingForPsi;
}
psiClass = psiClassFinder.findPsiClass(fqName);
if (psiClass == null) {
return null;
}
}
if (psiPackage != null) {
......@@ -934,9 +944,6 @@ public class JavaDescriptorResolver {
JavaPackageScope scope = new JavaPackageScope(fqName, semanticServices, namespaceData);
// TODO: hack
namespaceData.kotlin = true;
namespaceData.memberScope = scope;
ResolverNamespaceData oldValue = namespaceDescriptorCacheByFqn.put(fqName, namespaceData);
......@@ -987,18 +994,23 @@ public class JavaDescriptorResolver {
FqName fqName = new FqName(psiClass.getQualifiedName());
JavaNamespaceDescriptor ns = new JavaNamespaceDescriptor(
(NamespaceDescriptorParent) resolveParentDescriptor(psiClass),
resolveNamespace(fqName.parent(), DescriptorSearchRule.INCLUDE_KOTLIN),
Collections.<AnnotationDescriptor>emptyList(), // TODO
psiClass.getName(),
fqName,
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));
trace.record(BindingContext.NAMESPACE, psiClass, namespaceData.namespaceDescriptor);
return namespaceData;
ResolverNamespaceData scopeData = createNamespaceResolverScopeData(fqName, ns);
if (scopeData == null) {
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 {
......
......@@ -16,18 +16,14 @@
package org.jetbrains.jet.lang.resolve.java;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.PsiField;
import com.intellij.psi.PsiMember;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.PsiParameter;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.resolve.java.prop.PropertyNameUtils;
import org.jetbrains.jet.lang.resolve.java.prop.PropertyParseResult;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
......
......@@ -45,6 +45,10 @@ public class JavaPackageScope extends JavaClassOrPackageScope {
@NotNull JavaDescriptorResolver.ResolverScopeData resolverNamespaceData) {
super(semanticServices, resolverNamespaceData);
this.packageFQN = packageFQN;
if (!resolverNamespaceData.staticMembers) {
throw new IllegalArgumentException("instance members should be resolved using " + JavaClassMembersScope.class);
}
}
@Override
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册