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;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
public enum DescriptorSearchRule {
INCLUDE_KOTLIN {
INCLUDE_KOTLIN_SOURCES {
@Override
public <T extends DeclarationDescriptor> T processFoundInKotlin(T foundDescriptor) {
return foundDescriptor;
}
},
IGNORE_IF_FOUND_IN_KOTLIN {
IGNORE_KOTLIN_SOURCES {
@Override
public <T extends DeclarationDescriptor> T processFoundInKotlin(T foundDescriptor) {
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);
@@ -33,6 +33,8 @@ import java.util.Collection;
import java.util.List;
import java.util.Set;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.IGNORE_KOTLIN_SOURCES;
public class JavaDescriptorResolver implements DependencyClassByQualifiedNameResolver {
public static final Name JAVA_ROOT = Name.special("<java_root>");
@@ -75,7 +77,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
@Override
public ClassDescriptor resolveClass(@NotNull FqName qualifiedName) {
return classResolver.resolveClass(qualifiedName);
return classResolver.resolveClass(qualifiedName, IGNORE_KOTLIN_SOURCES);
}
@NotNull
@@ -90,7 +92,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
@Override
public NamespaceDescriptor resolveNamespace(@NotNull FqName qualifiedName) {
return namespaceResolver.resolveNamespace(qualifiedName);
return resolveNamespace(qualifiedName, IGNORE_KOTLIN_SOURCES);
}
@Nullable
@@ -37,6 +37,7 @@ import java.util.EnumSet;
import java.util.List;
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.types.Variance.*;
@@ -138,7 +139,7 @@ public class JavaTypeTransformer {
howThisTypeIsUsed);
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) {
return ErrorUtils.createErrorType("Unresolved java class: " + classType.getPresentableText());
@@ -45,7 +45,7 @@ import java.io.IOException;
import java.util.*;
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.*;
public class AnnotationDescriptorDeserializer implements AnnotationDeserializer {
@@ -180,7 +180,7 @@ public class AnnotationDescriptorDeserializer implements AnnotationDeserializer
if (ignoreAnnotation(desc)) return null;
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;
final AnnotationDescriptor annotation = new AnnotationDescriptor();
annotation.setAnnotationType(annotationClass.getDefaultType());
@@ -34,7 +34,8 @@ import javax.inject.Inject;
import java.util.Collection;
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;
public final class DeserializedDescriptorResolver {
@@ -52,13 +53,13 @@ public final class DeserializedDescriptorResolver {
@Nullable
@Override
public ClassDescriptor findClass(@NotNull ClassId classId) {
return javaClassResolver.resolveClass(kotlinFqNameToJavaFqName(classId.asSingleFqName()));
return javaClassResolver.resolveClass(kotlinFqNameToJavaFqName(classId.asSingleFqName()), IGNORE_KOTLIN_SOURCES);
}
@Nullable
@Override
public NamespaceDescriptor findPackage(@NotNull FqName name) {
return javaNamespaceResolver.resolveNamespace(name);
return javaNamespaceResolver.resolveNamespace(name, IGNORE_KOTLIN_SOURCES);
}
@NotNull
@@ -108,9 +109,9 @@ public final class DeserializedDescriptorResolver {
@Nullable
private ClassDescriptor createDeserializedClass(@NotNull ClassData classData, @NotNull ClassId classId) {
DeclarationDescriptor owner = classId.isTopLevelClass()
? javaNamespaceResolver.resolveNamespace(classId.getPackageFqName(), INCLUDE_KOTLIN)
: javaClassResolver
.resolveClass(kotlinFqNameToJavaFqName(classId.getOuterClassId().asSingleFqName()));
? javaNamespaceResolver.resolveNamespace(classId.getPackageFqName(), INCLUDE_KOTLIN_SOURCES)
: javaClassResolver.resolveClass(kotlinFqNameToJavaFqName(classId.getOuterClassId().asSingleFqName()),
IGNORE_KOTLIN_SOURCES);
assert owner != null : "No owner found for " + classId;
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.resolve.constants.CompileTimeConstant;
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.mapping.JavaToKotlinClassMap;
import org.jetbrains.jet.lang.resolve.name.FqName;
@@ -37,6 +36,8 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.INCLUDE_KOTLIN_SOURCES;
public final class JavaAnnotationResolver {
private JavaClassResolver classResolver;
private JavaCompileTimeConstResolver compileTimeConstResolver;
@@ -99,8 +100,7 @@ public final class JavaAnnotationResolver {
return mappedClassDescriptor;
}
final ClassDescriptor annotationClass =
classResolver.resolveClass(annotationFqName, DescriptorSearchRule.INCLUDE_KOTLIN, postponedTasks);
final ClassDescriptor annotationClass = classResolver.resolveClass(annotationFqName, INCLUDE_KOTLIN_SOURCES, postponedTasks);
if (annotationClass == 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.createEnumClassObjectValuesMethod;
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 {
@@ -428,15 +429,14 @@ public final class JavaClassResolver {
private ClassOrNamespaceDescriptor resolveParentDescriptor(@NotNull FqName childClassFQName, boolean isInnerClass) {
FqName parentFqName = childClassFQName.parent();
if (isInnerClass) {
ClassDescriptor parentClass = resolveClass(parentFqName, DescriptorSearchRule.INCLUDE_KOTLIN);
ClassDescriptor parentClass = resolveClass(parentFqName, INCLUDE_KOTLIN_SOURCES);
if (parentClass == null) {
throw new IllegalStateException("Could not resolve " + parentFqName + " required to be parent for " + childClassFQName);
}
return parentClass;
}
else {
//TODO: why do we include kotlin here? what this flags means anyway?
NamespaceDescriptor parentNamespace = namespaceResolver.resolveNamespace(parentFqName, DescriptorSearchRule.INCLUDE_KOTLIN);
NamespaceDescriptor parentNamespace = namespaceResolver.resolveNamespace(parentFqName, INCLUDE_KOTLIN_SOURCES);
if (parentNamespace == null) {
throw new IllegalStateException("Could not resolve " + parentFqName + " required to be parent for " + childClassFQName);
}
@@ -480,11 +480,6 @@ public final class JavaClassResolver {
return ClassKind.CLASS;
}
@Nullable
public ClassDescriptor resolveClass(FqName name) {
return resolveClass(name, DescriptorSearchRule.ERROR_IF_FOUND_IN_KOTLIN);
}
@NotNull
private ClassDescriptorFromJvmBytecode createClassObjectDescriptorForEnum(
@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.StringValue;
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.Name;
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
@@ -40,6 +39,8 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.INCLUDE_KOTLIN_SOURCES;
public final class JavaCompileTimeConstResolver {
private JavaAnnotationResolver annotationResolver;
private JavaClassResolver classResolver;
@@ -99,8 +100,7 @@ public final class JavaCompileTimeConstResolver {
PsiAnnotationMemberValue[] initializers = value.getInitializers();
List<CompileTimeConstant<?>> values = getCompileTimeConstantForArrayValues(annotationFqName, valueName, taskList, initializers);
ClassDescriptor classDescriptor =
classResolver.resolveClass(annotationFqName, DescriptorSearchRule.INCLUDE_KOTLIN, taskList);
ClassDescriptor classDescriptor = classResolver.resolveClass(annotationFqName, INCLUDE_KOTLIN_SOURCES, taskList);
//TODO: nullability issues
ValueParameterDescriptor valueParameterDescriptor =
@@ -143,7 +143,7 @@ public final class JavaCompileTimeConstResolver {
}
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) {
return null;
}
@@ -49,6 +49,8 @@ import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import javax.inject.Inject;
import java.util.*;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.INCLUDE_KOTLIN_SOURCES;
public final class JavaNamespaceResolver {
@NotNull
@@ -137,18 +139,13 @@ public final class JavaNamespaceResolver {
return javaNamespaceDescriptor;
}
@Nullable
public NamespaceDescriptor resolveNamespace(@NotNull FqName qualifiedName) {
return resolveNamespace(qualifiedName, DescriptorSearchRule.ERROR_IF_FOUND_IN_KOTLIN);
}
@Nullable
private NamespaceDescriptorParent resolveParentNamespace(@NotNull FqName fqName) {
if (fqName.isRoot()) {
return FAKE_ROOT_MODULE;
}
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.resolve.BindingContext;
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.types.ErrorUtils;
import org.jetbrains.jet.lang.types.JetType;
@@ -36,6 +39,8 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.IGNORE_KOTLIN_SOURCES;
public final class JavaSupertypeResolver {
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());
}
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) {
result.add(object.getDefaultType());
}
@@ -21,7 +21,6 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
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.PsiClassFinder;
import org.jetbrains.jet.lang.resolve.name.FqName;
@@ -31,6 +30,8 @@ import java.util.Collection;
import java.util.Collections;
import java.util.List;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.IGNORE_KOTLIN_SOURCES;
public final class JavaClassNonStaticMembersScope extends JavaClassMembersScope {
private Collection<ConstructorDescriptor> constructors = null;
@@ -102,8 +103,7 @@ public final class JavaClassNonStaticMembersScope extends JavaClassMembersScope
private ClassDescriptor resolveInnerClass(@NotNull PsiClass innerPsiClass) {
String name = innerPsiClass.getQualifiedName();
assert name != null : "Inner class has no qualified name: " + innerPsiClass;
ClassDescriptor classDescriptor = javaDescriptorResolver.resolveClass(new FqName(name),
DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN);
ClassDescriptor classDescriptor = javaDescriptorResolver.resolveClass(new FqName(name), IGNORE_KOTLIN_SOURCES);
assert classDescriptor != null : "Couldn't resolve inner class " + name;
return classDescriptor;
}
@@ -22,7 +22,6 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
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.PsiClassFinder;
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.Collections;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.INCLUDE_KOTLIN_SOURCES;
public final class JavaClassStaticMembersScope extends JavaClassMembersScope {
@NotNull
private final FqName packageFQN;
@@ -51,7 +52,7 @@ public final class JavaClassStaticMembersScope extends JavaClassMembersScope {
@Override
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
@@ -23,7 +23,10 @@ import com.intellij.psi.PsiModifier;
import com.intellij.psi.PsiPackage;
import org.jetbrains.annotations.NotNull;
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.name.FqName;
import org.jetbrains.jet.lang.resolve.name.Name;
@@ -32,6 +35,9 @@ import java.util.Collection;
import java.util.Collections;
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 {
@NotNull
private final PsiPackage psiPackage;
@@ -61,8 +67,7 @@ public final class JavaPackageScope extends JavaBaseScope {
@Override
public ClassifierDescriptor getClassifier(@NotNull Name name) {
ClassDescriptor classDescriptor =
javaDescriptorResolver.resolveClass(packageFQN.child(name), DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN);
ClassDescriptor classDescriptor = javaDescriptorResolver.resolveClass(packageFQN.child(name), IGNORE_KOTLIN_SOURCES);
if (classDescriptor == null || classDescriptor.getKind().isObject()) {
return null;
}
@@ -71,8 +76,7 @@ public final class JavaPackageScope extends JavaBaseScope {
@Override
public ClassDescriptor getObjectDescriptor(@NotNull Name name) {
ClassDescriptor classDescriptor =
javaDescriptorResolver.resolveClass(packageFQN.child(name), DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN);
ClassDescriptor classDescriptor = javaDescriptorResolver.resolveClass(packageFQN.child(name), IGNORE_KOTLIN_SOURCES);
if (classDescriptor != null && classDescriptor.getKind().isObject()) {
return classDescriptor;
}
@@ -81,7 +85,7 @@ public final class JavaPackageScope extends JavaBaseScope {
@Override
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
@@ -98,7 +102,7 @@ public final class JavaPackageScope extends JavaBaseScope {
for (PsiPackage psiSubPackage : psiPackage.getSubPackages()) {
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) {
result.add(childNs);
}
@@ -117,12 +121,12 @@ public final class JavaPackageScope extends JavaBaseScope {
if (qualifiedName == null) continue;
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) {
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) {
result.add(namespace);
}