Remove RuntimeHandleClassesMode

There were two usages of RuntimeHandleClassesMode.REPORT_ERROR: first in tests,
where it never occurred, second in JavaClassResolver, where it's now inlined
This commit is contained in:
Alexander Udalov
2013-09-03 20:42:00 +04:00
parent 4eb9f28312
commit eaacff4566
6 changed files with 23 additions and 45 deletions
@@ -23,13 +23,8 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
public interface PsiClassFinder { public interface PsiClassFinder {
enum RuntimeClassesHandleMode {
REPORT_ERROR,
IGNORE,
}
@Nullable @Nullable
PsiClass findPsiClass(@NotNull FqName fqName, @NotNull RuntimeClassesHandleMode runtimeClassesHandleMode); PsiClass findPsiClass(@NotNull FqName fqName);
@Nullable @Nullable
PsiPackage findPsiPackage(@NotNull FqName fqName); PsiPackage findPsiPackage(@NotNull FqName fqName);
@@ -16,29 +16,22 @@
package org.jetbrains.jet.lang.resolve.java; package org.jetbrains.jet.lang.resolve.java;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project; import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiAnnotation;
import com.intellij.psi.PsiClass; import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiPackage; import com.intellij.psi.PsiPackage;
import com.intellij.psi.search.DelegatingGlobalSearchScope; import com.intellij.psi.search.DelegatingGlobalSearchScope;
import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.search.GlobalSearchScope;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.resolve.java.resolver.JavaAnnotationResolver;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
import org.jetbrains.jet.plugin.JetFileType; import org.jetbrains.jet.plugin.JetFileType;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import javax.inject.Inject; import javax.inject.Inject;
public class PsiClassFinderImpl implements PsiClassFinder { public class PsiClassFinderImpl implements PsiClassFinder {
private static final Logger LOG = Logger.getInstance(PsiClassFinderImpl.class);
@NotNull @NotNull
private Project project; private Project project;
@@ -78,10 +71,9 @@ public class PsiClassFinderImpl implements PsiClassFinder {
javaFacade = new JavaPsiFacadeKotlinHacks(project); javaFacade = new JavaPsiFacadeKotlinHacks(project);
} }
@Override @Override
@Nullable @Nullable
public PsiClass findPsiClass(@NotNull FqName qualifiedName, @NotNull RuntimeClassesHandleMode runtimeClassesHandleMode) { public PsiClass findPsiClass(@NotNull FqName qualifiedName) {
PsiClass original = javaFacade.findClass(qualifiedName.asString(), javaSearchScope); PsiClass original = javaFacade.findClass(qualifiedName.asString(), javaSearchScope);
if (original != null) { if (original != null) {
@@ -96,31 +88,6 @@ public class PsiClassFinderImpl implements PsiClassFinder {
throw new IllegalStateException("JetJavaMirrorMaker is not possible in resolve.java, resolving: " + qualifiedName); throw new IllegalStateException("JetJavaMirrorMaker is not possible in resolve.java, resolving: " + qualifiedName);
} }
if (original == null) {
return null;
}
if (KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME.equals(qualifiedName.parent())) {
PsiAnnotation assertInvisibleAnnotation = JavaAnnotationResolver.findOwnAnnotation(
original, JvmAnnotationNames.ASSERT_INVISIBLE_IN_RESOLVER.getFqName().asString());
if (assertInvisibleAnnotation != null) {
switch (runtimeClassesHandleMode) {
case IGNORE:
break;
case REPORT_ERROR:
if (ApplicationManager.getApplication().isInternal()) {
LOG.error("classpath is configured incorrectly:" +
" class " + qualifiedName + " from runtime must not be loaded by compiler");
}
break;
default:
throw new IllegalStateException("unknown parameter value: " + runtimeClassesHandleMode);
}
return null;
}
}
return original; return original;
} }
@@ -123,7 +123,7 @@ public class AnnotationDescriptorDeserializer implements AnnotationDeserializer
if (fileForKotlinFile != null) { if (fileForKotlinFile != null) {
return fileForKotlinFile; return fileForKotlinFile;
} }
PsiClass psiClass = psiClassFinder.findPsiClass(fqName, PsiClassFinder.RuntimeClassesHandleMode.IGNORE /* TODO: ?! */); PsiClass psiClass = psiClassFinder.findPsiClass(fqName);
if (psiClass == null) { if (psiClass == null) {
throw new IllegalStateException("Psi class is not found for class: " + descriptor); throw new IllegalStateException("Psi class is not found for class: " + descriptor);
} }
@@ -18,8 +18,11 @@ package org.jetbrains.jet.lang.resolve.java.resolver;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiAnnotation;
import com.intellij.psi.PsiClass; import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiMethod; import com.intellij.psi.PsiMethod;
import com.intellij.psi.PsiModifier; import com.intellij.psi.PsiModifier;
@@ -60,6 +63,7 @@ import static org.jetbrains.jet.lang.resolve.DescriptorUtils.getClassObjectName;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.INCLUDE_KOTLIN_SOURCES; import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.INCLUDE_KOTLIN_SOURCES;
public final class JavaClassResolver { public final class JavaClassResolver {
private static final Logger LOG = Logger.getInstance(JavaClassResolver.class);
// NOTE: this complexity is introduced because class descriptors do not always have valid fqnames (class objects) // NOTE: this complexity is introduced because class descriptors do not always have valid fqnames (class objects)
@NotNull @NotNull
@@ -233,12 +237,25 @@ public final class JavaClassResolver {
} }
} }
PsiClass psiClass = psiClassFinder.findPsiClass(qualifiedName, PsiClassFinder.RuntimeClassesHandleMode.REPORT_ERROR); PsiClass psiClass = psiClassFinder.findPsiClass(qualifiedName);
if (psiClass == null) { if (psiClass == null) {
cacheNegativeValue(javaClassToKotlinFqName(qualifiedName)); cacheNegativeValue(javaClassToKotlinFqName(qualifiedName));
return null; return null;
} }
if (KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME.equals(qualifiedName.parent())) {
PsiAnnotation assertInvisibleAnnotation = JavaAnnotationResolver.findOwnAnnotation(
psiClass, JvmAnnotationNames.ASSERT_INVISIBLE_IN_RESOLVER.getFqName().asString());
if (assertInvisibleAnnotation != null) {
if (ApplicationManager.getApplication().isInternal()) {
LOG.error("classpath is configured incorrectly:" +
" class " + qualifiedName + " from runtime must not be loaded by compiler");
}
return null;
}
}
// Class may have been resolved previously by different Java resolver instance, and we are reusing its trace // Class may have been resolved previously by different Java resolver instance, and we are reusing its trace
ClassDescriptor alreadyResolved = trace.get(BindingContext.CLASS, psiClass); ClassDescriptor alreadyResolved = trace.get(BindingContext.CLASS, psiClass);
if (alreadyResolved != null) { if (alreadyResolved != null) {
@@ -181,7 +181,7 @@ public final class JavaNamespaceResolver {
return new JavaPackageScope(namespaceDescriptor, psiPackage, fqName, javaDescriptorResolver); return new JavaPackageScope(namespaceDescriptor, psiPackage, fqName, javaDescriptorResolver);
} }
PsiClass psiClass = psiClassFinder.findPsiClass(fqName, PsiClassFinder.RuntimeClassesHandleMode.IGNORE); PsiClass psiClass = psiClassFinder.findPsiClass(fqName);
if (psiClass == null) { if (psiClass == null) {
return null; return null;
} }
@@ -29,7 +29,6 @@ import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo;
import org.jetbrains.jet.lang.resolve.calls.context.ExpressionPosition; import org.jetbrains.jet.lang.resolve.calls.context.ExpressionPosition;
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall; import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall;
import org.jetbrains.jet.lang.resolve.calls.results.OverloadResolutionResults; import org.jetbrains.jet.lang.resolve.calls.results.OverloadResolutionResults;
import org.jetbrains.jet.lang.resolve.java.PsiClassFinder;
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.receivers.ReceiverValue; import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue;
@@ -115,7 +114,7 @@ public class JetExpectedResolveDataUtil {
@NotNull @NotNull
private static PsiClass findClass(String qualifiedName, Project project) { private static PsiClass findClass(String qualifiedName, Project project) {
InjectorForJavaDescriptorResolver injector = new InjectorForJavaDescriptorResolver(project, new BindingTraceContext()); InjectorForJavaDescriptorResolver injector = new InjectorForJavaDescriptorResolver(project, new BindingTraceContext());
PsiClass psiClass = injector.getPsiClassFinder().findPsiClass(new FqName(qualifiedName), PsiClassFinder.RuntimeClassesHandleMode.REPORT_ERROR); PsiClass psiClass = injector.getPsiClassFinder().findPsiClass(new FqName(qualifiedName));
Assert.assertNotNull("Class wasn't found: " + qualifiedName, psiClass); Assert.assertNotNull("Class wasn't found: " + qualifiedName, psiClass);
return psiClass; return psiClass;
} }