JDR: better loop check

(using JetJavaMirrorMaker)

... and fix test
... and remove junk code
This commit is contained in:
Stepan Koltsov
2012-04-07 23:40:38 +04:00
parent 2bc305bddf
commit 20f98d554c
@@ -946,16 +946,13 @@ public class JavaDescriptorResolver {
return scope; return scope;
} }
@Nullable
private PsiClass getPsiClassForJavaPackageScope(@NotNull FqName packageFQN) { private PsiClass getPsiClassForJavaPackageScope(@NotNull FqName packageFQN) {
// TODO: move this check outside PsiClass psiClass = psiClassFinder.findPsiClass(packageFQN.child(JvmAbi.PACKAGE_CLASS));
// If this package is actually a Kotlin namespace, then we access it through a namespace descriptor, and if (psiClass instanceof JetJavaMirrorMarker) {
// Kotlin functions are already there
NamespaceDescriptor kotlinNamespaceDescriptor = semanticServices.getKotlinNamespaceDescriptor(packageFQN);
if (kotlinNamespaceDescriptor != null) {
return null; return null;
} else { } else {
// TODO: what is GlobalSearchScope return psiClass;
return semanticServices.getPsiClassFinder().findPsiClass(packageFQN.child(JvmAbi.PACKAGE_CLASS));
} }
} }
@@ -1387,7 +1384,8 @@ public class JavaDescriptorResolver {
namedMembers.propertyDescriptors = properties; namedMembers.propertyDescriptors = properties;
} }
private void resolveNamedGroupFunctions(ClassOrNamespaceDescriptor owner, PsiClass psiClass, TypeSubstitutor typeSubstitutorForGenericSuperclasses, NamedMembers namedMembers, String methodName, ResolverScopeData scopeData) { private void resolveNamedGroupFunctions(@NotNull ClassOrNamespaceDescriptor owner, PsiClass psiClass,
TypeSubstitutor typeSubstitutorForGenericSuperclasses, NamedMembers namedMembers, String methodName, ResolverScopeData scopeData) {
if (namedMembers.functionDescriptors != null) { if (namedMembers.functionDescriptors != null) {
return; return;
} }
@@ -1396,7 +1394,7 @@ public class JavaDescriptorResolver {
Set<SimpleFunctionDescriptor> functionsFromCurrent = Sets.newHashSet(); Set<SimpleFunctionDescriptor> functionsFromCurrent = Sets.newHashSet();
for (PsiMethodWrapper method : namedMembers.methods) { for (PsiMethodWrapper method : namedMembers.methods) {
FunctionDescriptorImpl function = resolveMethodToFunctionDescriptor(owner, psiClass, method, scopeData); FunctionDescriptorImpl function = resolveMethodToFunctionDescriptor(psiClass, method, scopeData);
if (function != null) { if (function != null) {
functionsFromCurrent.add((SimpleFunctionDescriptor) function); functionsFromCurrent.add((SimpleFunctionDescriptor) function);
} }
@@ -1512,7 +1510,7 @@ public class JavaDescriptorResolver {
@Nullable @Nullable
private FunctionDescriptorImpl resolveMethodToFunctionDescriptor( private FunctionDescriptorImpl resolveMethodToFunctionDescriptor(
ClassOrNamespaceDescriptor owner, final PsiClass psiClass, final PsiMethodWrapper method, @NotNull final PsiClass psiClass, final PsiMethodWrapper method,
@NotNull ResolverScopeData scopeData) { @NotNull ResolverScopeData scopeData) {
getResolverScopeData(scopeData); getResolverScopeData(scopeData);
@@ -1522,28 +1520,12 @@ public class JavaDescriptorResolver {
return null; return null;
} }
boolean kotlin;
if (owner instanceof JavaNamespaceDescriptor) {
JavaNamespaceDescriptor javaNamespaceDescriptor = (JavaNamespaceDescriptor) owner;
ResolverNamespaceData namespaceData = namespaceDescriptorCacheByFqn.get(javaNamespaceDescriptor.getQualifiedName());
if (namespaceData == null) {
throw new IllegalStateException("namespaceData not found by name " + javaNamespaceDescriptor.getQualifiedName());
}
kotlin = namespaceData.kotlin;
} else {
ResolverBinaryClassData classData = classDescriptorCache.get(new FqName(psiClass.getQualifiedName()));
if (classData == null) {
throw new IllegalStateException("classData not found by name " + psiClass.getQualifiedName());
}
kotlin = classData.kotlin;
}
// TODO: ugly // TODO: ugly
if (method.getJetMethod().kind() == JvmStdlibNames.JET_METHOD_KIND_PROPERTY) { if (method.getJetMethod().kind() == JvmStdlibNames.JET_METHOD_KIND_PROPERTY) {
return null; return null;
} }
if (kotlin) { if (scopeData.kotlin) {
// TODO: unless maybe class explicitly extends Object // TODO: unless maybe class explicitly extends Object
String ownerClassName = method.getPsiMethod().getContainingClass().getQualifiedName(); String ownerClassName = method.getPsiMethod().getContainingClass().getQualifiedName();
if (ownerClassName.equals("java.lang.Object")) { if (ownerClassName.equals("java.lang.Object")) {
@@ -1551,21 +1533,8 @@ public class JavaDescriptorResolver {
} }
} }
ClassOrNamespaceDescriptor classDescriptor;
if (scopeData instanceof ResolverBinaryClassData) {
ClassDescriptor classClassDescriptor = resolveClass(new FqName(method.getPsiMethod().getContainingClass().getQualifiedName()),
DescriptorSearchRule.INCLUDE_KOTLIN);
classDescriptor = classClassDescriptor;
}
else {
classDescriptor = resolveNamespace(method.getPsiMethod().getContainingClass());
}
if (classDescriptor == null) {
return null;
}
SimpleFunctionDescriptorImpl functionDescriptorImpl = new SimpleFunctionDescriptorImpl( SimpleFunctionDescriptorImpl functionDescriptorImpl = new SimpleFunctionDescriptorImpl(
owner, scopeData.classOrNamespaceDescriptor,
resolveAnnotations(method.getPsiMethod()), resolveAnnotations(method.getPsiMethod()),
method.getName(), method.getName(),
CallableMemberDescriptor.Kind.DECLARATION CallableMemberDescriptor.Kind.DECLARATION
@@ -1573,7 +1542,7 @@ public class JavaDescriptorResolver {
String context = "method " + method.getName() + " in class " + psiClass.getQualifiedName(); String context = "method " + method.getName() + " in class " + psiClass.getQualifiedName();
final TypeVariableResolver typeVariableResolverForParameters = TypeVariableResolvers.classTypeVariableResolver(classDescriptor, context); final TypeVariableResolver typeVariableResolverForParameters = TypeVariableResolvers.classTypeVariableResolver(scopeData.classOrNamespaceDescriptor, context);
final List<TypeParameterDescriptor> methodTypeParameters = resolveMethodTypeParameters(method, functionDescriptorImpl, typeVariableResolverForParameters); final List<TypeParameterDescriptor> methodTypeParameters = resolveMethodTypeParameters(method, functionDescriptorImpl, typeVariableResolverForParameters);
@@ -1583,7 +1552,7 @@ public class JavaDescriptorResolver {
ValueParameterDescriptors valueParameterDescriptors = resolveParameterDescriptors(functionDescriptorImpl, method.getParameters(), methodTypeVariableResolver); ValueParameterDescriptors valueParameterDescriptors = resolveParameterDescriptors(functionDescriptorImpl, method.getParameters(), methodTypeVariableResolver);
functionDescriptorImpl.initialize( functionDescriptorImpl.initialize(
valueParameterDescriptors.receiverType, valueParameterDescriptors.receiverType,
DescriptorUtils.getExpectedThisObjectIfNeeded(classDescriptor), DescriptorUtils.getExpectedThisObjectIfNeeded(scopeData.classOrNamespaceDescriptor),
methodTypeParameters, methodTypeParameters,
valueParameterDescriptors.descriptors, valueParameterDescriptors.descriptors,
makeReturnType(returnType, method, methodTypeVariableResolver), makeReturnType(returnType, method, methodTypeVariableResolver),