Get rid of DescriptorSearchRule.ERROR_IF_FOUND_IN_KOTLIN

Rename other constants in DescriptorSearchRule
Inline methods with default values for DescriptorSearchRule
This commit is contained in:
Pavel V. Talanov
2013-08-26 22:07:36 +04:00
parent e70d6bbf71
commit 881a633ba0
23 changed files with 92 additions and 83 deletions
@@ -17,26 +17,19 @@
package org.jetbrains.jet.lang.resolve.java; package org.jetbrains.jet.lang.resolve.java;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
public enum DescriptorSearchRule { public enum DescriptorSearchRule {
INCLUDE_KOTLIN { INCLUDE_KOTLIN_SOURCES {
@Override @Override
public <T extends DeclarationDescriptor> T processFoundInKotlin(T foundDescriptor) { public <T extends DeclarationDescriptor> T processFoundInKotlin(T foundDescriptor) {
return foundDescriptor; return foundDescriptor;
} }
}, },
IGNORE_IF_FOUND_IN_KOTLIN { IGNORE_KOTLIN_SOURCES {
@Override @Override
public <T extends DeclarationDescriptor> T processFoundInKotlin(T foundDescriptor) { public <T extends DeclarationDescriptor> T processFoundInKotlin(T foundDescriptor) {
return null; return null;
} }
},
ERROR_IF_FOUND_IN_KOTLIN {
@Override
public <T extends DeclarationDescriptor> T processFoundInKotlin(T foundDescriptor) {
throw new IllegalStateException(DescriptorUtils.getFQName(foundDescriptor) + " should not be found in Kotlin.");
}
}; };
public abstract <T extends DeclarationDescriptor> T processFoundInKotlin(T foundDescriptor); public abstract <T extends DeclarationDescriptor> T processFoundInKotlin(T foundDescriptor);
@@ -33,6 +33,8 @@ import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.IGNORE_KOTLIN_SOURCES;
public class JavaDescriptorResolver implements DependencyClassByQualifiedNameResolver { public class JavaDescriptorResolver implements DependencyClassByQualifiedNameResolver {
public static final Name JAVA_ROOT = Name.special("<java_root>"); public static final Name JAVA_ROOT = Name.special("<java_root>");
@@ -75,7 +77,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
@Override @Override
public ClassDescriptor resolveClass(@NotNull FqName qualifiedName) { public ClassDescriptor resolveClass(@NotNull FqName qualifiedName) {
return classResolver.resolveClass(qualifiedName); return classResolver.resolveClass(qualifiedName, IGNORE_KOTLIN_SOURCES);
} }
@NotNull @NotNull
@@ -90,7 +92,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
@Override @Override
public NamespaceDescriptor resolveNamespace(@NotNull FqName qualifiedName) { public NamespaceDescriptor resolveNamespace(@NotNull FqName qualifiedName) {
return namespaceResolver.resolveNamespace(qualifiedName); return resolveNamespace(qualifiedName, IGNORE_KOTLIN_SOURCES);
} }
@Nullable @Nullable
@@ -37,6 +37,7 @@ import java.util.EnumSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.INCLUDE_KOTLIN_SOURCES;
import static org.jetbrains.jet.lang.resolve.java.TypeUsage.*; import static org.jetbrains.jet.lang.resolve.java.TypeUsage.*;
import static org.jetbrains.jet.lang.types.Variance.*; import static org.jetbrains.jet.lang.types.Variance.*;
@@ -138,7 +139,7 @@ public class JavaTypeTransformer {
howThisTypeIsUsed); howThisTypeIsUsed);
if (classData == null) { if (classData == null) {
classData = resolver.resolveClass(new FqName(psiClass.getQualifiedName()), DescriptorSearchRule.INCLUDE_KOTLIN); classData = resolver.resolveClass(new FqName(psiClass.getQualifiedName()), INCLUDE_KOTLIN_SOURCES);
} }
if (classData == null) { if (classData == null) {
return ErrorUtils.createErrorType("Unresolved java class: " + classType.getPresentableText()); return ErrorUtils.createErrorType("Unresolved java class: " + classType.getPresentableText());
@@ -45,7 +45,7 @@ import java.io.IOException;
import java.util.*; import java.util.*;
import static org.jetbrains.asm4.ClassReader.*; import static org.jetbrains.asm4.ClassReader.*;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.ERROR_IF_FOUND_IN_KOTLIN; import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.IGNORE_KOTLIN_SOURCES;
import static org.jetbrains.jet.lang.resolve.java.resolver.DeserializedResolverUtils.*; import static org.jetbrains.jet.lang.resolve.java.resolver.DeserializedResolverUtils.*;
public class AnnotationDescriptorDeserializer implements AnnotationDeserializer { public class AnnotationDescriptorDeserializer implements AnnotationDeserializer {
@@ -180,7 +180,7 @@ public class AnnotationDescriptorDeserializer implements AnnotationDeserializer
if (ignoreAnnotation(desc)) return null; if (ignoreAnnotation(desc)) return null;
FqName annotationFqName = convertJvmDescriptorToFqName(desc); FqName annotationFqName = convertJvmDescriptorToFqName(desc);
final ClassDescriptor annotationClass = javaClassResolver.resolveClass(annotationFqName, ERROR_IF_FOUND_IN_KOTLIN); final ClassDescriptor annotationClass = javaClassResolver.resolveClass(annotationFqName, IGNORE_KOTLIN_SOURCES);
assert annotationClass != null : "Annotation class is not found: " + desc; assert annotationClass != null : "Annotation class is not found: " + desc;
final AnnotationDescriptor annotation = new AnnotationDescriptor(); final AnnotationDescriptor annotation = new AnnotationDescriptor();
annotation.setAnnotationType(annotationClass.getDefaultType()); annotation.setAnnotationType(annotationClass.getDefaultType());
@@ -34,7 +34,8 @@ import javax.inject.Inject;
import java.util.Collection; import java.util.Collection;
import static org.jetbrains.jet.lang.resolve.java.AbiVersionUtil.isAbiVersionCompatible; import static org.jetbrains.jet.lang.resolve.java.AbiVersionUtil.isAbiVersionCompatible;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.INCLUDE_KOTLIN; import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.IGNORE_KOTLIN_SOURCES;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.INCLUDE_KOTLIN_SOURCES;
import static org.jetbrains.jet.lang.resolve.java.resolver.DeserializedResolverUtils.kotlinFqNameToJavaFqName; import static org.jetbrains.jet.lang.resolve.java.resolver.DeserializedResolverUtils.kotlinFqNameToJavaFqName;
public final class DeserializedDescriptorResolver { public final class DeserializedDescriptorResolver {
@@ -52,13 +53,13 @@ public final class DeserializedDescriptorResolver {
@Nullable @Nullable
@Override @Override
public ClassDescriptor findClass(@NotNull ClassId classId) { public ClassDescriptor findClass(@NotNull ClassId classId) {
return javaClassResolver.resolveClass(kotlinFqNameToJavaFqName(classId.asSingleFqName())); return javaClassResolver.resolveClass(kotlinFqNameToJavaFqName(classId.asSingleFqName()), IGNORE_KOTLIN_SOURCES);
} }
@Nullable @Nullable
@Override @Override
public NamespaceDescriptor findPackage(@NotNull FqName name) { public NamespaceDescriptor findPackage(@NotNull FqName name) {
return javaNamespaceResolver.resolveNamespace(name); return javaNamespaceResolver.resolveNamespace(name, IGNORE_KOTLIN_SOURCES);
} }
@NotNull @NotNull
@@ -108,9 +109,9 @@ public final class DeserializedDescriptorResolver {
@Nullable @Nullable
private ClassDescriptor createDeserializedClass(@NotNull ClassData classData, @NotNull ClassId classId) { private ClassDescriptor createDeserializedClass(@NotNull ClassData classData, @NotNull ClassId classId) {
DeclarationDescriptor owner = classId.isTopLevelClass() DeclarationDescriptor owner = classId.isTopLevelClass()
? javaNamespaceResolver.resolveNamespace(classId.getPackageFqName(), INCLUDE_KOTLIN) ? javaNamespaceResolver.resolveNamespace(classId.getPackageFqName(), INCLUDE_KOTLIN_SOURCES)
: javaClassResolver : javaClassResolver.resolveClass(kotlinFqNameToJavaFqName(classId.getOuterClassId().asSingleFqName()),
.resolveClass(kotlinFqNameToJavaFqName(classId.getOuterClassId().asSingleFqName())); IGNORE_KOTLIN_SOURCES);
assert owner != null : "No owner found for " + classId; assert owner != null : "No owner found for " + classId;
return new DeserializedClassDescriptor(classId, storageManager, owner, classData.getNameResolver(), return new DeserializedClassDescriptor(classId, storageManager, owner, classData.getNameResolver(),
@@ -26,7 +26,6 @@ import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant; import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant;
import org.jetbrains.jet.lang.resolve.java.DescriptorResolverUtils; import org.jetbrains.jet.lang.resolve.java.DescriptorResolverUtils;
import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule;
import org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames; import org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames;
import org.jetbrains.jet.lang.resolve.java.mapping.JavaToKotlinClassMap; import org.jetbrains.jet.lang.resolve.java.mapping.JavaToKotlinClassMap;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
@@ -37,6 +36,8 @@ import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.INCLUDE_KOTLIN_SOURCES;
public final class JavaAnnotationResolver { public final class JavaAnnotationResolver {
private JavaClassResolver classResolver; private JavaClassResolver classResolver;
private JavaCompileTimeConstResolver compileTimeConstResolver; private JavaCompileTimeConstResolver compileTimeConstResolver;
@@ -99,8 +100,7 @@ public final class JavaAnnotationResolver {
return mappedClassDescriptor; return mappedClassDescriptor;
} }
final ClassDescriptor annotationClass = final ClassDescriptor annotationClass = classResolver.resolveClass(annotationFqName, INCLUDE_KOTLIN_SOURCES, postponedTasks);
classResolver.resolveClass(annotationFqName, DescriptorSearchRule.INCLUDE_KOTLIN, postponedTasks);
if (annotationClass == null) { if (annotationClass == null) {
return null; return null;
} }
@@ -57,6 +57,7 @@ import java.util.*;
import static org.jetbrains.jet.lang.resolve.DescriptorResolver.createEnumClassObjectValueOfMethod; import static org.jetbrains.jet.lang.resolve.DescriptorResolver.createEnumClassObjectValueOfMethod;
import static org.jetbrains.jet.lang.resolve.DescriptorResolver.createEnumClassObjectValuesMethod; import static org.jetbrains.jet.lang.resolve.DescriptorResolver.createEnumClassObjectValuesMethod;
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.getClassObjectName; import static org.jetbrains.jet.lang.resolve.DescriptorUtils.getClassObjectName;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.INCLUDE_KOTLIN_SOURCES;
public final class JavaClassResolver { public final class JavaClassResolver {
@@ -428,15 +429,14 @@ public final class JavaClassResolver {
private ClassOrNamespaceDescriptor resolveParentDescriptor(@NotNull FqName childClassFQName, boolean isInnerClass) { private ClassOrNamespaceDescriptor resolveParentDescriptor(@NotNull FqName childClassFQName, boolean isInnerClass) {
FqName parentFqName = childClassFQName.parent(); FqName parentFqName = childClassFQName.parent();
if (isInnerClass) { if (isInnerClass) {
ClassDescriptor parentClass = resolveClass(parentFqName, DescriptorSearchRule.INCLUDE_KOTLIN); ClassDescriptor parentClass = resolveClass(parentFqName, INCLUDE_KOTLIN_SOURCES);
if (parentClass == null) { if (parentClass == null) {
throw new IllegalStateException("Could not resolve " + parentFqName + " required to be parent for " + childClassFQName); throw new IllegalStateException("Could not resolve " + parentFqName + " required to be parent for " + childClassFQName);
} }
return parentClass; return parentClass;
} }
else { else {
//TODO: why do we include kotlin here? what this flags means anyway? NamespaceDescriptor parentNamespace = namespaceResolver.resolveNamespace(parentFqName, INCLUDE_KOTLIN_SOURCES);
NamespaceDescriptor parentNamespace = namespaceResolver.resolveNamespace(parentFqName, DescriptorSearchRule.INCLUDE_KOTLIN);
if (parentNamespace == null) { if (parentNamespace == null) {
throw new IllegalStateException("Could not resolve " + parentFqName + " required to be parent for " + childClassFQName); throw new IllegalStateException("Could not resolve " + parentFqName + " required to be parent for " + childClassFQName);
} }
@@ -480,11 +480,6 @@ public final class JavaClassResolver {
return ClassKind.CLASS; return ClassKind.CLASS;
} }
@Nullable
public ClassDescriptor resolveClass(FqName name) {
return resolveClass(name, DescriptorSearchRule.ERROR_IF_FOUND_IN_KOTLIN);
}
@NotNull @NotNull
private ClassDescriptorFromJvmBytecode createClassObjectDescriptorForEnum( private ClassDescriptorFromJvmBytecode createClassObjectDescriptorForEnum(
@NotNull ClassDescriptor containing, @NotNull ClassDescriptor containing,
@@ -27,7 +27,6 @@ import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
import org.jetbrains.jet.lang.resolve.constants.*; import org.jetbrains.jet.lang.resolve.constants.*;
import org.jetbrains.jet.lang.resolve.constants.StringValue; import org.jetbrains.jet.lang.resolve.constants.StringValue;
import org.jetbrains.jet.lang.resolve.java.DescriptorResolverUtils; import org.jetbrains.jet.lang.resolve.java.DescriptorResolverUtils;
import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.resolve.scopes.JetScope;
@@ -40,6 +39,8 @@ import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.INCLUDE_KOTLIN_SOURCES;
public final class JavaCompileTimeConstResolver { public final class JavaCompileTimeConstResolver {
private JavaAnnotationResolver annotationResolver; private JavaAnnotationResolver annotationResolver;
private JavaClassResolver classResolver; private JavaClassResolver classResolver;
@@ -99,8 +100,7 @@ public final class JavaCompileTimeConstResolver {
PsiAnnotationMemberValue[] initializers = value.getInitializers(); PsiAnnotationMemberValue[] initializers = value.getInitializers();
List<CompileTimeConstant<?>> values = getCompileTimeConstantForArrayValues(annotationFqName, valueName, taskList, initializers); List<CompileTimeConstant<?>> values = getCompileTimeConstantForArrayValues(annotationFqName, valueName, taskList, initializers);
ClassDescriptor classDescriptor = ClassDescriptor classDescriptor = classResolver.resolveClass(annotationFqName, INCLUDE_KOTLIN_SOURCES, taskList);
classResolver.resolveClass(annotationFqName, DescriptorSearchRule.INCLUDE_KOTLIN, taskList);
//TODO: nullability issues //TODO: nullability issues
ValueParameterDescriptor valueParameterDescriptor = ValueParameterDescriptor valueParameterDescriptor =
@@ -143,7 +143,7 @@ public final class JavaCompileTimeConstResolver {
} }
JetScope scope; JetScope scope;
ClassDescriptor classDescriptor = classResolver.resolveClass(new FqName(fqName), DescriptorSearchRule.INCLUDE_KOTLIN, taskList); ClassDescriptor classDescriptor = classResolver.resolveClass(new FqName(fqName), INCLUDE_KOTLIN_SOURCES, taskList);
if (classDescriptor == null) { if (classDescriptor == null) {
return null; return null;
} }
@@ -49,6 +49,8 @@ import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import javax.inject.Inject; import javax.inject.Inject;
import java.util.*; import java.util.*;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.INCLUDE_KOTLIN_SOURCES;
public final class JavaNamespaceResolver { public final class JavaNamespaceResolver {
@NotNull @NotNull
@@ -137,18 +139,13 @@ public final class JavaNamespaceResolver {
return javaNamespaceDescriptor; return javaNamespaceDescriptor;
} }
@Nullable
public NamespaceDescriptor resolveNamespace(@NotNull FqName qualifiedName) {
return resolveNamespace(qualifiedName, DescriptorSearchRule.ERROR_IF_FOUND_IN_KOTLIN);
}
@Nullable @Nullable
private NamespaceDescriptorParent resolveParentNamespace(@NotNull FqName fqName) { private NamespaceDescriptorParent resolveParentNamespace(@NotNull FqName fqName) {
if (fqName.isRoot()) { if (fqName.isRoot()) {
return FAKE_ROOT_MODULE; return FAKE_ROOT_MODULE;
} }
else { else {
return resolveNamespace(fqName.parent(), DescriptorSearchRule.INCLUDE_KOTLIN); return resolveNamespace(fqName.parent(), INCLUDE_KOTLIN_SOURCES);
} }
} }
@@ -24,7 +24,10 @@ import org.jetbrains.jet.lang.descriptors.ClassKind;
import org.jetbrains.jet.lang.descriptors.TypeParameterDescriptor; import org.jetbrains.jet.lang.descriptors.TypeParameterDescriptor;
import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.java.*; import org.jetbrains.jet.lang.resolve.java.JavaTypeTransformer;
import org.jetbrains.jet.lang.resolve.java.JvmAbi;
import org.jetbrains.jet.lang.resolve.java.TypeUsage;
import org.jetbrains.jet.lang.resolve.java.TypeVariableResolver;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.types.ErrorUtils; import org.jetbrains.jet.lang.types.ErrorUtils;
import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.JetType;
@@ -36,6 +39,8 @@ import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.IGNORE_KOTLIN_SOURCES;
public final class JavaSupertypeResolver { public final class JavaSupertypeResolver {
private static final FqName OBJECT_FQ_NAME = new FqName("java.lang.Object"); private static final FqName OBJECT_FQ_NAME = new FqName("java.lang.Object");
@@ -85,7 +90,7 @@ public final class JavaSupertypeResolver {
result.add(KotlinBuiltIns.getInstance().getAnyType()); result.add(KotlinBuiltIns.getInstance().getAnyType());
} }
else { else {
ClassDescriptor object = classResolver.resolveClass(OBJECT_FQ_NAME, DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN); ClassDescriptor object = classResolver.resolveClass(OBJECT_FQ_NAME, IGNORE_KOTLIN_SOURCES);
if (object != null) { if (object != null) {
result.add(object.getDefaultType()); result.add(object.getDefaultType());
} }
@@ -21,7 +21,6 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.ConstructorDescriptor; import org.jetbrains.jet.lang.descriptors.ConstructorDescriptor;
import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule;
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver; import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
import org.jetbrains.jet.lang.resolve.java.PsiClassFinder; import org.jetbrains.jet.lang.resolve.java.PsiClassFinder;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
@@ -31,6 +30,8 @@ import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.IGNORE_KOTLIN_SOURCES;
public final class JavaClassNonStaticMembersScope extends JavaClassMembersScope { public final class JavaClassNonStaticMembersScope extends JavaClassMembersScope {
private Collection<ConstructorDescriptor> constructors = null; private Collection<ConstructorDescriptor> constructors = null;
@@ -102,8 +103,7 @@ public final class JavaClassNonStaticMembersScope extends JavaClassMembersScope
private ClassDescriptor resolveInnerClass(@NotNull PsiClass innerPsiClass) { private ClassDescriptor resolveInnerClass(@NotNull PsiClass innerPsiClass) {
String name = innerPsiClass.getQualifiedName(); String name = innerPsiClass.getQualifiedName();
assert name != null : "Inner class has no qualified name: " + innerPsiClass; assert name != null : "Inner class has no qualified name: " + innerPsiClass;
ClassDescriptor classDescriptor = javaDescriptorResolver.resolveClass(new FqName(name), ClassDescriptor classDescriptor = javaDescriptorResolver.resolveClass(new FqName(name), IGNORE_KOTLIN_SOURCES);
DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN);
assert classDescriptor != null : "Couldn't resolve inner class " + name; assert classDescriptor != null : "Couldn't resolve inner class " + name;
return classDescriptor; return classDescriptor;
} }
@@ -22,7 +22,6 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule;
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver; import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
import org.jetbrains.jet.lang.resolve.java.PsiClassFinder; import org.jetbrains.jet.lang.resolve.java.PsiClassFinder;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
@@ -31,6 +30,8 @@ import org.jetbrains.jet.lang.resolve.name.Name;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.INCLUDE_KOTLIN_SOURCES;
public final class JavaClassStaticMembersScope extends JavaClassMembersScope { public final class JavaClassStaticMembersScope extends JavaClassMembersScope {
@NotNull @NotNull
private final FqName packageFQN; private final FqName packageFQN;
@@ -51,7 +52,7 @@ public final class JavaClassStaticMembersScope extends JavaClassMembersScope {
@Override @Override
public NamespaceDescriptor getNamespace(@NotNull Name name) { public NamespaceDescriptor getNamespace(@NotNull Name name) {
return javaDescriptorResolver.resolveNamespace(packageFQN.child(name), DescriptorSearchRule.INCLUDE_KOTLIN); return javaDescriptorResolver.resolveNamespace(packageFQN.child(name), INCLUDE_KOTLIN_SOURCES);
} }
@NotNull @NotNull
@@ -23,7 +23,10 @@ import com.intellij.psi.PsiModifier;
import com.intellij.psi.PsiPackage; import com.intellij.psi.PsiPackage;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.resolve.java.*; import org.jetbrains.jet.lang.resolve.java.DescriptorResolverUtils;
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
import org.jetbrains.jet.lang.resolve.java.JetJavaMirrorMarker;
import org.jetbrains.jet.lang.resolve.java.PsiClassFinder;
import org.jetbrains.jet.lang.resolve.java.provider.NamedMembers; import org.jetbrains.jet.lang.resolve.java.provider.NamedMembers;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.name.Name;
@@ -32,6 +35,9 @@ import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.Set; import java.util.Set;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.IGNORE_KOTLIN_SOURCES;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.INCLUDE_KOTLIN_SOURCES;
public final class JavaPackageScope extends JavaBaseScope { public final class JavaPackageScope extends JavaBaseScope {
@NotNull @NotNull
private final PsiPackage psiPackage; private final PsiPackage psiPackage;
@@ -61,8 +67,7 @@ public final class JavaPackageScope extends JavaBaseScope {
@Override @Override
public ClassifierDescriptor getClassifier(@NotNull Name name) { public ClassifierDescriptor getClassifier(@NotNull Name name) {
ClassDescriptor classDescriptor = ClassDescriptor classDescriptor = javaDescriptorResolver.resolveClass(packageFQN.child(name), IGNORE_KOTLIN_SOURCES);
javaDescriptorResolver.resolveClass(packageFQN.child(name), DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN);
if (classDescriptor == null || classDescriptor.getKind().isObject()) { if (classDescriptor == null || classDescriptor.getKind().isObject()) {
return null; return null;
} }
@@ -71,8 +76,7 @@ public final class JavaPackageScope extends JavaBaseScope {
@Override @Override
public ClassDescriptor getObjectDescriptor(@NotNull Name name) { public ClassDescriptor getObjectDescriptor(@NotNull Name name) {
ClassDescriptor classDescriptor = ClassDescriptor classDescriptor = javaDescriptorResolver.resolveClass(packageFQN.child(name), IGNORE_KOTLIN_SOURCES);
javaDescriptorResolver.resolveClass(packageFQN.child(name), DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN);
if (classDescriptor != null && classDescriptor.getKind().isObject()) { if (classDescriptor != null && classDescriptor.getKind().isObject()) {
return classDescriptor; return classDescriptor;
} }
@@ -81,7 +85,7 @@ public final class JavaPackageScope extends JavaBaseScope {
@Override @Override
public NamespaceDescriptor getNamespace(@NotNull Name name) { public NamespaceDescriptor getNamespace(@NotNull Name name) {
return javaDescriptorResolver.resolveNamespace(packageFQN.child(name), DescriptorSearchRule.INCLUDE_KOTLIN); return javaDescriptorResolver.resolveNamespace(packageFQN.child(name), INCLUDE_KOTLIN_SOURCES);
} }
@NotNull @NotNull
@@ -98,7 +102,7 @@ public final class JavaPackageScope extends JavaBaseScope {
for (PsiPackage psiSubPackage : psiPackage.getSubPackages()) { for (PsiPackage psiSubPackage : psiPackage.getSubPackages()) {
FqName fqName = new FqName(psiSubPackage.getQualifiedName()); FqName fqName = new FqName(psiSubPackage.getQualifiedName());
NamespaceDescriptor childNs = javaDescriptorResolver.resolveNamespace(fqName, DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN); NamespaceDescriptor childNs = javaDescriptorResolver.resolveNamespace(fqName, IGNORE_KOTLIN_SOURCES);
if (childNs != null) { if (childNs != null) {
result.add(childNs); result.add(childNs);
} }
@@ -117,12 +121,12 @@ public final class JavaPackageScope extends JavaBaseScope {
if (qualifiedName == null) continue; if (qualifiedName == null) continue;
FqName fqName = new FqName(qualifiedName); FqName fqName = new FqName(qualifiedName);
ClassDescriptor classDescriptor = javaDescriptorResolver.resolveClass(fqName, DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN); ClassDescriptor classDescriptor = javaDescriptorResolver.resolveClass(fqName, IGNORE_KOTLIN_SOURCES);
if (classDescriptor != null) { if (classDescriptor != null) {
result.add(classDescriptor); result.add(classDescriptor);
} }
NamespaceDescriptor namespace = javaDescriptorResolver.resolveNamespace(fqName, DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN); NamespaceDescriptor namespace = javaDescriptorResolver.resolveNamespace(fqName, IGNORE_KOTLIN_SOURCES);
if (namespace != null) { if (namespace != null) {
result.add(namespace); result.add(namespace);
} }
@@ -44,6 +44,7 @@ import java.util.*;
import static org.jetbrains.jet.descriptors.serialization.ClassSerializationUtil.getClassId; import static org.jetbrains.jet.descriptors.serialization.ClassSerializationUtil.getClassId;
import static org.jetbrains.jet.descriptors.serialization.NameSerializationUtil.createNameResolver; import static org.jetbrains.jet.descriptors.serialization.NameSerializationUtil.createNameResolver;
import static org.jetbrains.jet.descriptors.serialization.descriptors.AnnotationDeserializer.UNSUPPORTED; import static org.jetbrains.jet.descriptors.serialization.descriptors.AnnotationDeserializer.UNSUPPORTED;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.IGNORE_KOTLIN_SOURCES;
import static org.jetbrains.jet.lang.resolve.java.resolver.DeserializedResolverUtils.naiveKotlinFqName; import static org.jetbrains.jet.lang.resolve.java.resolver.DeserializedResolverUtils.naiveKotlinFqName;
public abstract class AbstractDescriptorSerializationTest extends KotlinTestWithEnvironment { public abstract class AbstractDescriptorSerializationTest extends KotlinTestWithEnvironment {
@@ -184,7 +185,7 @@ public abstract class AbstractDescriptorSerializationTest extends KotlinTestWith
@Override @Override
public ClassDescriptor findClass(@NotNull ClassId classId) { public ClassDescriptor findClass(@NotNull ClassId classId) {
ClassDescriptor found = super.findClass(classId); ClassDescriptor found = super.findClass(classId);
return found != null ? found : javaDescriptorResolver.resolveClass(classId.asSingleFqName().toSafe()); return found != null ? found : javaDescriptorResolver.resolveClass(classId.asSingleFqName().toSafe(), IGNORE_KOTLIN_SOURCES);
} }
@Nullable @Nullable
@@ -39,7 +39,6 @@ import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters; import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters;
import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM; import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM;
import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule;
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver; import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
import org.jetbrains.jet.test.TestCaseWithTmpdir; import org.jetbrains.jet.test.TestCaseWithTmpdir;
import org.junit.Assert; import org.junit.Assert;
@@ -52,6 +51,7 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import static org.jetbrains.jet.jvm.compiler.LoadDescriptorUtil.*; import static org.jetbrains.jet.jvm.compiler.LoadDescriptorUtil.*;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.INCLUDE_KOTLIN_SOURCES;
import static org.jetbrains.jet.test.util.DescriptorValidator.ValidationVisitor.ALLOW_ERROR_TYPES; import static org.jetbrains.jet.test.util.DescriptorValidator.ValidationVisitor.ALLOW_ERROR_TYPES;
import static org.jetbrains.jet.test.util.NamespaceComparator.*; import static org.jetbrains.jet.test.util.NamespaceComparator.*;
@@ -159,8 +159,7 @@ public abstract class AbstractLoadJavaTest extends TestCaseWithTmpdir {
injectorForAnalyzer.getTopDownAnalyzer().analyzeFiles(environment.getSourceFiles(), Collections.<AnalyzerScriptParameter>emptyList()); injectorForAnalyzer.getTopDownAnalyzer().analyzeFiles(environment.getSourceFiles(), Collections.<AnalyzerScriptParameter>emptyList());
JavaDescriptorResolver javaDescriptorResolver = injectorForJava.getJavaDescriptorResolver(); JavaDescriptorResolver javaDescriptorResolver = injectorForJava.getJavaDescriptorResolver();
NamespaceDescriptor namespaceDescriptor = javaDescriptorResolver.resolveNamespace( NamespaceDescriptor namespaceDescriptor = javaDescriptorResolver.resolveNamespace(TEST_PACKAGE_FQNAME, INCLUDE_KOTLIN_SOURCES);
LoadDescriptorUtil.TEST_PACKAGE_FQNAME, DescriptorSearchRule.INCLUDE_KOTLIN);
assert namespaceDescriptor != null : "Test namespace not found"; assert namespaceDescriptor != null : "Test namespace not found";
checkJavaNamespace(expectedFile, namespaceDescriptor, trace.getBindingContext(), DONT_INCLUDE_METHODS_OF_OBJECT); checkJavaNamespace(expectedFile, namespaceDescriptor, trace.getBindingContext(), DONT_INCLUDE_METHODS_OF_OBJECT);
@@ -45,8 +45,8 @@ import org.jetbrains.jet.lang.resolve.BindingTraceContext;
import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.DescriptorUtils;
import org.jetbrains.jet.lang.resolve.java.JavaBindingContext; import org.jetbrains.jet.lang.resolve.java.JavaBindingContext;
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver; import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
import org.jetbrains.jet.lang.resolve.java.mapping.JavaToKotlinClassMap;
import org.jetbrains.jet.lang.resolve.java.kotlinSignature.TypeTransformingVisitor; import org.jetbrains.jet.lang.resolve.java.kotlinSignature.TypeTransformingVisitor;
import org.jetbrains.jet.lang.resolve.java.mapping.JavaToKotlinClassMap;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.renderer.DescriptorRenderer; import org.jetbrains.jet.renderer.DescriptorRenderer;
@@ -59,6 +59,8 @@ import java.util.Set;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.IGNORE_KOTLIN_SOURCES;
public class JdkAnnotationsValidityTest extends UsefulTestCase { public class JdkAnnotationsValidityTest extends UsefulTestCase {
private static final int CLASSES_IN_CHUNK = 500; private static final int CLASSES_IN_CHUNK = 500;
@@ -103,8 +105,8 @@ public class JdkAnnotationsValidityTest extends UsefulTestCase {
int chunkStart = chunkIndex * CLASSES_IN_CHUNK; int chunkStart = chunkIndex * CLASSES_IN_CHUNK;
for (FqName javaClass : affectedClasses.subList(chunkStart, Math.min(chunkStart + CLASSES_IN_CHUNK, affectedClasses.size()))) { for (FqName javaClass : affectedClasses.subList(chunkStart, Math.min(chunkStart + CLASSES_IN_CHUNK, affectedClasses.size()))) {
ClassDescriptor topLevelClass = javaDescriptorResolver.resolveClass(javaClass); ClassDescriptor topLevelClass = javaDescriptorResolver.resolveClass(javaClass, IGNORE_KOTLIN_SOURCES);
NamespaceDescriptor topLevelNamespace = javaDescriptorResolver.resolveNamespace(javaClass); NamespaceDescriptor topLevelNamespace = javaDescriptorResolver.resolveNamespace(javaClass, IGNORE_KOTLIN_SOURCES);
if (topLevelClass == null) { if (topLevelClass == null) {
continue; continue;
} }
@@ -37,7 +37,6 @@ import org.jetbrains.jet.lang.resolve.AnalyzerScriptParameter;
import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.BindingTraceContext; import org.jetbrains.jet.lang.resolve.BindingTraceContext;
import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM; import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM;
import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.name.Name;
@@ -48,6 +47,7 @@ import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import static org.jetbrains.jet.JetTestUtils.createEnvironmentWithMockJdkAndIdeaAnnotations; import static org.jetbrains.jet.JetTestUtils.createEnvironmentWithMockJdkAndIdeaAnnotations;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.IGNORE_KOTLIN_SOURCES;
public final class LoadDescriptorUtil { public final class LoadDescriptorUtil {
@@ -99,7 +99,7 @@ public final class LoadDescriptorUtil {
BindingTraceContext trace = new BindingTraceContext(); BindingTraceContext trace = new BindingTraceContext();
InjectorForJavaDescriptorResolver injector = new InjectorForJavaDescriptorResolver(jetCoreEnvironment.getProject(), trace); InjectorForJavaDescriptorResolver injector = new InjectorForJavaDescriptorResolver(jetCoreEnvironment.getProject(), trace);
NamespaceDescriptor namespaceDescriptor = NamespaceDescriptor namespaceDescriptor =
injector.getJavaDescriptorResolver().resolveNamespace(TEST_PACKAGE_FQNAME, DescriptorSearchRule.ERROR_IF_FOUND_IN_KOTLIN); injector.getJavaDescriptorResolver().resolveNamespace(TEST_PACKAGE_FQNAME, IGNORE_KOTLIN_SOURCES);
assert namespaceDescriptor != null; assert namespaceDescriptor != null;
return Pair.create(namespaceDescriptor, trace.getBindingContext()); return Pair.create(namespaceDescriptor, trace.getBindingContext());
@@ -35,7 +35,6 @@ import org.jetbrains.jet.config.CompilerConfiguration;
import org.jetbrains.jet.di.InjectorForJavaDescriptorResolver; import org.jetbrains.jet.di.InjectorForJavaDescriptorResolver;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.resolve.BindingTraceContext; import org.jetbrains.jet.lang.resolve.BindingTraceContext;
import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule;
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver; import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.utils.PathUtil; import org.jetbrains.jet.utils.PathUtil;
@@ -46,6 +45,8 @@ import java.util.List;
import java.util.zip.ZipEntry; import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream; import java.util.zip.ZipInputStream;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.IGNORE_KOTLIN_SOURCES;
public class ResolveDescriptorsFromExternalLibraries { public class ResolveDescriptorsFromExternalLibraries {
@@ -190,7 +191,7 @@ public class ResolveDescriptorsFromExternalLibraries {
String className = entryName.substring(0, entryName.length() - ".class".length()).replace("/", "."); String className = entryName.substring(0, entryName.length() - ".class".length()).replace("/", ".");
try { try {
ClassDescriptor clazz = javaDescriptorResolver.resolveClass(new FqName(className), DescriptorSearchRule.ERROR_IF_FOUND_IN_KOTLIN); ClassDescriptor clazz = javaDescriptorResolver.resolveClass(new FqName(className), IGNORE_KOTLIN_SOURCES);
if (clazz == null) { if (clazz == null) {
throw new IllegalStateException("class not found by name " + className + " in " + libDescription); throw new IllegalStateException("class not found by name " + className + " in " + libDescription);
} }
@@ -36,7 +36,6 @@ import org.jetbrains.jet.lang.psi.JetPsiFactory;
import org.jetbrains.jet.lang.resolve.BindingTraceContext; import org.jetbrains.jet.lang.resolve.BindingTraceContext;
import org.jetbrains.jet.lang.resolve.TypeResolver; import org.jetbrains.jet.lang.resolve.TypeResolver;
import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo; import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo;
import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule;
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver; import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
import org.jetbrains.jet.lang.resolve.lazy.LazyResolveTestUtil; import org.jetbrains.jet.lang.resolve.lazy.LazyResolveTestUtil;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
@@ -54,6 +53,9 @@ import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.*; import java.util.*;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.IGNORE_KOTLIN_SOURCES;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.INCLUDE_KOTLIN_SOURCES;
public class JetTypeCheckerTest extends JetLiteFixture { public class JetTypeCheckerTest extends JetLiteFixture {
private KotlinBuiltIns builtIns; private KotlinBuiltIns builtIns;
@@ -580,15 +582,14 @@ public class JetTypeCheckerTest extends JetLiteFixture {
return addImports(testData.getMemberScope()); return addImports(testData.getMemberScope());
} }
@SuppressWarnings("ConstantConditions")
private WritableScopeImpl addImports(JetScope scope) { private WritableScopeImpl addImports(JetScope scope) {
WritableScopeImpl writableScope = new WritableScopeImpl( WritableScopeImpl writableScope = new WritableScopeImpl(
scope, scope.getContainingDeclaration(), RedeclarationHandler.DO_NOTHING, "JetTypeCheckerTest.addImports"); scope, scope.getContainingDeclaration(), RedeclarationHandler.DO_NOTHING, "JetTypeCheckerTest.addImports");
InjectorForJavaDescriptorResolver injector = new InjectorForJavaDescriptorResolver(getProject(), new BindingTraceContext()); InjectorForJavaDescriptorResolver injector = new InjectorForJavaDescriptorResolver(getProject(), new BindingTraceContext());
JavaDescriptorResolver javaDescriptorResolver = injector.getJavaDescriptorResolver(); JavaDescriptorResolver javaDescriptorResolver = injector.getJavaDescriptorResolver();
writableScope.importScope(javaDescriptorResolver.resolveNamespace(FqName.ROOT, writableScope.importScope(javaDescriptorResolver.resolveNamespace(FqName.ROOT, INCLUDE_KOTLIN_SOURCES).getMemberScope());
DescriptorSearchRule.INCLUDE_KOTLIN).getMemberScope()); writableScope.importScope(javaDescriptorResolver.resolveNamespace(new FqName("java.lang"), IGNORE_KOTLIN_SOURCES).getMemberScope());
writableScope.importScope(javaDescriptorResolver.resolveNamespace(new FqName("java.lang"),
DescriptorSearchRule.ERROR_IF_FOUND_IN_KOTLIN).getMemberScope());
writableScope.changeLockLevel(WritableScope.LockLevel.BOTH); writableScope.changeLockLevel(WritableScope.LockLevel.BOTH);
writableScope.importScope(builtIns.getBuiltInsScope()); writableScope.importScope(builtIns.getBuiltInsScope());
return writableScope; return writableScope;
@@ -37,7 +37,6 @@ import org.jetbrains.jet.di.InjectorForJavaDescriptorResolver;
import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.BindingTraceContext; import org.jetbrains.jet.lang.resolve.BindingTraceContext;
import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM;
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver; import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.name.Name;
@@ -49,6 +48,8 @@ import org.jetbrains.jet.renderer.DescriptorRendererBuilder;
import javax.swing.*; import javax.swing.*;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.IGNORE_KOTLIN_SOURCES;
public class KotlinSignatureAnnotationIntention extends BaseIntentionAction implements Iconable { public class KotlinSignatureAnnotationIntention extends BaseIntentionAction implements Iconable {
private static final DescriptorRenderer RENDERER = new DescriptorRendererBuilder() private static final DescriptorRenderer RENDERER = new DescriptorRendererBuilder()
.setShortNames(true) .setShortNames(true)
@@ -134,7 +135,7 @@ public class KotlinSignatureAnnotationIntention extends BaseIntentionAction impl
private static String getDefaultSignature(@NotNull PsiMethod method, FqName classFqName, JavaDescriptorResolver javaDescriptorResolver, BindingContext context) { private static String getDefaultSignature(@NotNull PsiMethod method, FqName classFqName, JavaDescriptorResolver javaDescriptorResolver, BindingContext context) {
if (method.getReturnType() == null) { if (method.getReturnType() == null) {
// For constructor // For constructor
ClassDescriptor classDescriptor = javaDescriptorResolver.resolveClass(classFqName); ClassDescriptor classDescriptor = javaDescriptorResolver.resolveClass(classFqName, IGNORE_KOTLIN_SOURCES);
assert classDescriptor != null: "Couldn't resolve class descriptor for " + classFqName; assert classDescriptor != null: "Couldn't resolve class descriptor for " + classFqName;
classDescriptor.getConstructors(); classDescriptor.getConstructors();
@@ -185,12 +186,12 @@ public class KotlinSignatureAnnotationIntention extends BaseIntentionAction impl
@NotNull @NotNull
private static JetScope getMemberScope(PsiModifierListOwner psiModifierListOwner, FqName classFqName, JavaDescriptorResolver javaDescriptorResolver) { private static JetScope getMemberScope(PsiModifierListOwner psiModifierListOwner, FqName classFqName, JavaDescriptorResolver javaDescriptorResolver) {
if (psiModifierListOwner.hasModifierProperty(PsiModifier.STATIC)) { if (psiModifierListOwner.hasModifierProperty(PsiModifier.STATIC)) {
NamespaceDescriptor namespaceDescriptor = javaDescriptorResolver.resolveNamespace(classFqName); NamespaceDescriptor namespaceDescriptor = javaDescriptorResolver.resolveNamespace(classFqName, IGNORE_KOTLIN_SOURCES);
assert namespaceDescriptor != null: "Couldn't resolve namespace descriptor for " + classFqName; assert namespaceDescriptor != null: "Couldn't resolve namespace descriptor for " + classFqName;
return namespaceDescriptor.getMemberScope(); return namespaceDescriptor.getMemberScope();
} }
ClassDescriptor classDescriptor = javaDescriptorResolver.resolveClass(classFqName); ClassDescriptor classDescriptor = javaDescriptorResolver.resolveClass(classFqName, IGNORE_KOTLIN_SOURCES);
assert classDescriptor != null: "Couldn't resolve class descriptor for " + classFqName; assert classDescriptor != null: "Couldn't resolve class descriptor for " + classFqName;
return classDescriptor.getDefaultType().getMemberScope(); return classDescriptor.getDefaultType().getMemberScope();
} }
@@ -55,6 +55,8 @@ import java.awt.event.MouseEvent;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.IGNORE_KOTLIN_SOURCES;
public class KotlinSignatureInJavaMarkerProvider implements LineMarkerProvider { public class KotlinSignatureInJavaMarkerProvider implements LineMarkerProvider {
private static final String SHOW_MARKERS_PROPERTY = "kotlin.signature.markers.enabled"; private static final String SHOW_MARKERS_PROPERTY = "kotlin.signature.markers.enabled";
@@ -152,7 +154,7 @@ public class KotlinSignatureInJavaMarkerProvider implements LineMarkerProvider {
@NotNull PsiMember member @NotNull PsiMember member
) { ) {
if (member.hasModifierProperty(PsiModifier.STATIC)) { if (member.hasModifierProperty(PsiModifier.STATIC)) {
NamespaceDescriptor packageDescriptor = javaDescriptorResolver.resolveNamespace(classFqName); NamespaceDescriptor packageDescriptor = javaDescriptorResolver.resolveNamespace(classFqName, IGNORE_KOTLIN_SOURCES);
if (packageDescriptor == null) { if (packageDescriptor == null) {
return null; return null;
} }
@@ -160,7 +162,7 @@ public class KotlinSignatureInJavaMarkerProvider implements LineMarkerProvider {
return packageDescriptor.getMemberScope(); return packageDescriptor.getMemberScope();
} }
else { else {
ClassDescriptor klass = javaDescriptorResolver.resolveClass(classFqName); ClassDescriptor klass = javaDescriptorResolver.resolveClass(classFqName, IGNORE_KOTLIN_SOURCES);
if (klass == null) { if (klass == null) {
return null; return null;
} }
@@ -26,7 +26,6 @@ import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.resolve.BindingTraceContext; import org.jetbrains.jet.lang.resolve.BindingTraceContext;
import org.jetbrains.jet.lang.resolve.MemberComparator; import org.jetbrains.jet.lang.resolve.MemberComparator;
import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule;
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver; import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
import org.jetbrains.jet.lang.resolve.java.resolver.KotlinClassFileHeader; import org.jetbrains.jet.lang.resolve.java.resolver.KotlinClassFileHeader;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
@@ -35,6 +34,7 @@ import org.jetbrains.jet.renderer.DescriptorRendererBuilder;
import java.util.*; import java.util.*;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.INCLUDE_KOTLIN_SOURCES;
import static org.jetbrains.jet.plugin.libraries.JetDecompiledData.descriptorToKey; import static org.jetbrains.jet.plugin.libraries.JetDecompiledData.descriptorToKey;
public final class DecompiledDataFactory { public final class DecompiledDataFactory {
@@ -73,7 +73,7 @@ public final class DecompiledDataFactory {
appendDecompiledTextAndPackageName(packageFqName); appendDecompiledTextAndPackageName(packageFqName);
KotlinClassFileHeader.HeaderType type = kotlinClassFileHeader.getType(); KotlinClassFileHeader.HeaderType type = kotlinClassFileHeader.getType();
if (type == KotlinClassFileHeader.HeaderType.PACKAGE) { if (type == KotlinClassFileHeader.HeaderType.PACKAGE) {
NamespaceDescriptor nd = javaDescriptorResolver.resolveNamespace(packageFqName, DescriptorSearchRule.INCLUDE_KOTLIN); NamespaceDescriptor nd = javaDescriptorResolver.resolveNamespace(packageFqName, INCLUDE_KOTLIN_SOURCES);
if (nd != null) { if (nd != null) {
for (DeclarationDescriptor member : sortDeclarations(nd.getMemberScope().getAllDescriptors())) { for (DeclarationDescriptor member : sortDeclarations(nd.getMemberScope().getAllDescriptors())) {
if (member instanceof ClassDescriptor || member instanceof NamespaceDescriptor if (member instanceof ClassDescriptor || member instanceof NamespaceDescriptor
@@ -88,7 +88,7 @@ public final class DecompiledDataFactory {
else { else {
assert type == KotlinClassFileHeader.HeaderType.CLASS; assert type == KotlinClassFileHeader.HeaderType.CLASS;
ClassDescriptor cd = javaDescriptorResolver.resolveClass(kotlinClassFileHeader.getJvmClassName().getFqName(), ClassDescriptor cd = javaDescriptorResolver.resolveClass(kotlinClassFileHeader.getJvmClassName().getFqName(),
DescriptorSearchRule.INCLUDE_KOTLIN); INCLUDE_KOTLIN_SOURCES);
if (cd != null) { if (cd != null) {
appendDescriptor(cd, ""); appendDescriptor(cd, "");
} }
@@ -32,6 +32,8 @@ import org.jetbrains.jet.plugin.JetLightProjectDescriptor;
import org.jetbrains.jet.plugin.caches.resolve.KotlinCacheManager; import org.jetbrains.jet.plugin.caches.resolve.KotlinCacheManager;
import org.jetbrains.jet.plugin.project.TargetPlatform; import org.jetbrains.jet.plugin.project.TargetPlatform;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.IGNORE_KOTLIN_SOURCES;
public class SignatureMarkerProviderTest extends LightCodeInsightFixtureTestCase { public class SignatureMarkerProviderTest extends LightCodeInsightFixtureTestCase {
@NotNull @NotNull
@@ -53,7 +55,8 @@ public class SignatureMarkerProviderTest extends LightCodeInsightFixtureTestCase
InjectorForJavaDescriptorResolver injector = InjectorForJavaDescriptorResolver injector =
new InjectorForJavaDescriptorResolver(project, KotlinSignatureInJavaMarkerProvider.createDelegatingTrace(project)); new InjectorForJavaDescriptorResolver(project, KotlinSignatureInJavaMarkerProvider.createDelegatingTrace(project));
ClassDescriptor reResolvedClass = injector.getJavaDescriptorResolver().resolveClass(new FqName("java.lang.Thread")); ClassDescriptor reResolvedClass = injector.getJavaDescriptorResolver()
.resolveClass(new FqName("java.lang.Thread"), IGNORE_KOTLIN_SOURCES);
assertSame(preResolvedClass, reResolvedClass); assertSame(preResolvedClass, reResolvedClass);
} }