diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/TraceBasedJavaResolverCache.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/TraceBasedJavaResolverCache.java index c1692e80ce8..f9db2050795 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/TraceBasedJavaResolverCache.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/TraceBasedJavaResolverCache.java @@ -16,6 +16,8 @@ package org.jetbrains.jet.lang.resolve.java.resolver; +import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.diagnostic.Logger; import com.intellij.psi.PsiExpression; import com.intellij.psi.PsiField; import com.intellij.psi.PsiLiteralExpression; @@ -37,12 +39,18 @@ import org.jetbrains.jet.lang.resolve.java.structure.impl.JavaElementImpl; import org.jetbrains.jet.lang.resolve.java.structure.impl.JavaFieldImpl; import org.jetbrains.jet.lang.resolve.java.structure.impl.JavaMethodImpl; import org.jetbrains.jet.lang.resolve.name.FqName; +import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; +import org.jetbrains.jet.rt.annotation.AssertInvisibleInResolver; import javax.inject.Inject; import static org.jetbrains.jet.lang.resolve.BindingContext.*; +import static org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils.fqNameByClass; public class TraceBasedJavaResolverCache implements JavaResolverCache { + private static final Logger LOG = Logger.getInstance(TraceBasedJavaResolverCache.class); + private static final FqName ASSERT_INVISIBLE_IN_RESOLVER_ANNOTATION = fqNameByClass(AssertInvisibleInResolver.class); + private BindingTrace trace; @Inject @@ -77,6 +85,17 @@ public class TraceBasedJavaResolverCache implements JavaResolverCache { @Nullable @Override public ClassDescriptor getClass(@NotNull JavaClass javaClass) { + FqName fqName = javaClass.getFqName(); + if (fqName != null && KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME.equals(fqName.parent())) { + if (javaClass.findAnnotation(ASSERT_INVISIBLE_IN_RESOLVER_ANNOTATION) != null) { + if (ApplicationManager.getApplication().isInternal()) { + LOG.error("Classpath is configured incorrectly:" + + " class " + fqName + " from runtime must not be loaded by compiler"); + } + return null; + } + } + return trace.get(CLASS, ((JavaClassImpl) javaClass).getPsi()); } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaClassResolver.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaClassResolver.java index 48d7b65363d..01cc69c151d 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaClassResolver.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaClassResolver.java @@ -16,8 +16,6 @@ package org.jetbrains.jet.lang.resolve.java.resolver; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.diagnostic.Logger; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; @@ -47,19 +45,14 @@ import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.TypeUtils; import org.jetbrains.jet.lang.types.checker.JetTypeChecker; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; -import org.jetbrains.jet.rt.annotation.AssertInvisibleInResolver; import javax.inject.Inject; import java.util.*; 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.resolver.DescriptorResolverUtils.fqNameByClass; public final class JavaClassResolver { - private static final FqName ASSERT_INVISIBLE_IN_RESOLVER_ANNOTATION = fqNameByClass(AssertInvisibleInResolver.class); - private static final Logger LOG = Logger.getInstance(JavaClassResolver.class); - @NotNull private final Map classDescriptorCache = new HashMap(); @@ -208,16 +201,6 @@ public final class JavaClassResolver { return null; } - if (KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME.equals(qualifiedName.parent())) { - if (javaClass.findAnnotation(ASSERT_INVISIBLE_IN_RESOLVER_ANNOTATION) != 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 ClassDescriptor alreadyResolved = cache.getClass(javaClass); if (alreadyResolved != null) {