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:
+5
@@ -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"));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user