JavaDescriptorResolver should not crash if there is no original for alt-header

(before this commit it crashed because package was not searched in alt-headers)

This commit makes JDR ignore alt-header if original is not found
This commit is contained in:
Stepan Koltsov
2012-05-30 21:04:25 +04:00
parent 570789512f
commit 3a3cbd53d8
2 changed files with 17 additions and 0 deletions
@@ -75,8 +75,13 @@ public class PsiClassFinderForJvm implements PsiClassFinder {
public PsiClass findPsiClass(@NotNull FqName qualifiedName, @NotNull RuntimeClassesHandleMode runtimeClassesHandleMode) {
PsiClass original = javaFacade.findClass(qualifiedName.getFqName(), javaSearchScope);
PsiClass altClass = altClassFinder.findClass(qualifiedName);
PsiClass result = original;
if (altClass != null) {
if (original == null) {
return null;
}
if (altClass instanceof ClsClassImpl) {
altClass.putUserData(ClsClassImpl.DELEGATE_KEY, original);
}
@@ -18,10 +18,12 @@ package org.jetbrains.jet.cli.jvm.compiler;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.JetTestUtils;
import org.jetbrains.jet.codegen.forTestCompile.ForTestCompileJdkHeaders;
import org.jetbrains.jet.di.InjectorForJavaSemanticServices;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
import org.jetbrains.jet.lang.descriptors.VariableDescriptor;
import org.jetbrains.jet.lang.resolve.java.CompilerDependencies;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.java.CompilerSpecialMode;
import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule;
@@ -73,4 +75,14 @@ public class JavaDescriptorResolverTest extends TestCaseWithTmpdir {
jetCoreEnvironment.getCompilerDependencies(), jetCoreEnvironment.getProject());
return injector.getJavaDescriptorResolver();
}
public void testResolveJdkHeaderClassWithoutJdk() {
JetCoreEnvironment jetCoreEnvironment = new JetCoreEnvironment(myTestRootDisposable, new CompilerDependencies(CompilerSpecialMode.IDEA, null, ForTestCompileJdkHeaders.jdkHeadersForTests(), null));
InjectorForJavaSemanticServices injector = new InjectorForJavaSemanticServices(
jetCoreEnvironment.getCompilerDependencies(), jetCoreEnvironment.getProject());
// java.lang.Iterable must exist in jdk-headers otherwize this test is meaningless, resolveClass always returns null
injector.getJavaDescriptorResolver().resolveClass(new FqName("java.lang.Iterable"));
}
}