Move DescriptorSearchRule logic to DescriptorSearchRule class
This commit is contained in:
+23
-3
@@ -16,11 +16,31 @@
|
|||||||
|
|
||||||
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.resolve.DescriptorUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Stepan Koltsov
|
* @author Stepan Koltsov
|
||||||
*/
|
*/
|
||||||
public enum DescriptorSearchRule {
|
public enum DescriptorSearchRule {
|
||||||
INCLUDE_KOTLIN,
|
INCLUDE_KOTLIN {
|
||||||
IGNORE_IF_FOUND_IN_KOTLIN,
|
@Override
|
||||||
ERROR_IF_FOUND_IN_KOTLIN,
|
public <T extends DeclarationDescriptor> T processFoundInKotlin(T foundDescriptor) {
|
||||||
|
return foundDescriptor;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
IGNORE_IF_FOUND_IN_KOTLIN {
|
||||||
|
@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);
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-12
@@ -113,18 +113,7 @@ public final class ClassResolver {
|
|||||||
// First, let's check that this is a real Java class, not a Java's view on a Kotlin class:
|
// First, let's check that this is a real Java class, not a Java's view on a Kotlin class:
|
||||||
ClassDescriptor kotlinClassDescriptor = javaDescriptorResolver.getSemanticServices().getKotlinClassDescriptor(qualifiedName);
|
ClassDescriptor kotlinClassDescriptor = javaDescriptorResolver.getSemanticServices().getKotlinClassDescriptor(qualifiedName);
|
||||||
if (kotlinClassDescriptor != null) {
|
if (kotlinClassDescriptor != null) {
|
||||||
if (searchRule == DescriptorSearchRule.ERROR_IF_FOUND_IN_KOTLIN) {
|
return searchRule.processFoundInKotlin(kotlinClassDescriptor);
|
||||||
throw new IllegalStateException("class must not be found in kotlin: " + qualifiedName);
|
|
||||||
}
|
|
||||||
else if (searchRule == DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
else if (searchRule == DescriptorSearchRule.INCLUDE_KOTLIN) {
|
|
||||||
return kotlinClassDescriptor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
throw new IllegalStateException("unknown searchRule: " + searchRule);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Not let's take a descriptor of a Java class
|
// Not let's take a descriptor of a Java class
|
||||||
|
|||||||
+5
-14
@@ -38,11 +38,14 @@ import java.util.Map;
|
|||||||
|
|
||||||
public final class NamespaceResolver {
|
public final class NamespaceResolver {
|
||||||
|
|
||||||
|
@NotNull
|
||||||
public static final ModuleDescriptor FAKE_ROOT_MODULE = new ModuleDescriptor(JavaDescriptorResolver.JAVA_ROOT);
|
public static final ModuleDescriptor FAKE_ROOT_MODULE = new ModuleDescriptor(JavaDescriptorResolver.JAVA_ROOT);
|
||||||
|
@NotNull
|
||||||
private final JavaDescriptorResolver javaDescriptorResolver;
|
private final JavaDescriptorResolver javaDescriptorResolver;
|
||||||
|
@NotNull
|
||||||
private final Map<FqName, ResolverNamespaceData> namespaceDescriptorCacheByFqn = Maps.newHashMap();
|
private final Map<FqName, ResolverNamespaceData> namespaceDescriptorCacheByFqn = Maps.newHashMap();
|
||||||
|
|
||||||
public NamespaceResolver(JavaDescriptorResolver javaDescriptorResolver) {
|
public NamespaceResolver(@NotNull JavaDescriptorResolver javaDescriptorResolver) {
|
||||||
this.javaDescriptorResolver = javaDescriptorResolver;
|
this.javaDescriptorResolver = javaDescriptorResolver;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -52,19 +55,7 @@ public final class NamespaceResolver {
|
|||||||
NamespaceDescriptor kotlinNamespaceDescriptor =
|
NamespaceDescriptor kotlinNamespaceDescriptor =
|
||||||
javaDescriptorResolver.getSemanticServices().getKotlinNamespaceDescriptor(qualifiedName);
|
javaDescriptorResolver.getSemanticServices().getKotlinNamespaceDescriptor(qualifiedName);
|
||||||
if (kotlinNamespaceDescriptor != null) {
|
if (kotlinNamespaceDescriptor != null) {
|
||||||
if (searchRule == DescriptorSearchRule.ERROR_IF_FOUND_IN_KOTLIN) {
|
return searchRule.processFoundInKotlin(kotlinNamespaceDescriptor);
|
||||||
throw new IllegalStateException("class must not be found in kotlin: " + qualifiedName);
|
|
||||||
}
|
|
||||||
else if (searchRule == DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
else if (searchRule == DescriptorSearchRule.INCLUDE_KOTLIN) {
|
|
||||||
// TODO: probably this is evil
|
|
||||||
return kotlinNamespaceDescriptor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
throw new IllegalStateException("unknown searchRule: " + searchRule);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ResolverNamespaceData namespaceData = namespaceDescriptorCacheByFqn.get(qualifiedName);
|
ResolverNamespaceData namespaceData = namespaceDescriptorCacheByFqn.get(qualifiedName);
|
||||||
|
|||||||
Reference in New Issue
Block a user