diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/PsiClassFinderForJvm.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/PsiClassFinderForJvm.java index 1b14c4c7813..1b553ac5805 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/PsiClassFinderForJvm.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/PsiClassFinderForJvm.java @@ -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); } diff --git a/compiler/tests/org/jetbrains/jet/cli/jvm/compiler/JavaDescriptorResolverTest.java b/compiler/tests/org/jetbrains/jet/cli/jvm/compiler/JavaDescriptorResolverTest.java index 0974d4cac28..638c6f61599 100644 --- a/compiler/tests/org/jetbrains/jet/cli/jvm/compiler/JavaDescriptorResolverTest.java +++ b/compiler/tests/org/jetbrains/jet/cli/jvm/compiler/JavaDescriptorResolverTest.java @@ -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")); + } }