some classes from runtime.jar are not meant to be loaded by JDR

* assert runtime implementations from JetStandard* are not loaded
  by JavaDescriptorResolver
* fix wrong @JetMethod in jet.Iterator
* fix jet.Iterator ns was created
* fix incorrect number of functions and tuples in JetStandardClasses
* added TODO about inconsisten Tuple class
This commit is contained in:
Stepan Koltsov
2012-04-11 20:00:01 +04:00
parent eaae5b4465
commit 829f73cc5f
104 changed files with 362 additions and 17 deletions
@@ -360,7 +360,7 @@ public class JavaDescriptorResolver {
// Not let's take a descriptor of a Java class
ResolverBinaryClassData classData = classDescriptorCache.get(qualifiedName);
if (classData == null) {
PsiClass psiClass = psiClassFinder.findPsiClass(qualifiedName);
PsiClass psiClass = psiClassFinder.findPsiClass(qualifiedName, PsiClassFinder.RuntimeClassesHandleMode.THROW);
if (psiClass == null) {
return null;
}
@@ -944,7 +944,7 @@ public class JavaDescriptorResolver {
break lookingForPsi;
}
psiClass = psiClassFinder.findPsiClass(fqName);
psiClass = psiClassFinder.findPsiClass(fqName, PsiClassFinder.RuntimeClassesHandleMode.IGNORE);
if (psiClass != null) {
trace.record(JavaBindingContext.JAVA_NAMESPACE_KIND, ns, JavaNamespaceKind.CLASS_STATICS);
break lookingForPsi;
@@ -983,7 +983,7 @@ public class JavaDescriptorResolver {
@Nullable
private PsiClass getPsiClassForJavaPackageScope(@NotNull FqName packageFQN) {
return psiClassFinder.findPsiClass(packageFQN.child(JvmAbi.PACKAGE_CLASS));
return psiClassFinder.findPsiClass(packageFQN.child(JvmAbi.PACKAGE_CLASS), PsiClassFinder.RuntimeClassesHandleMode.IGNORE);
}
private static class ValueParameterDescriptors {
@@ -64,6 +64,10 @@ public class JvmStdlibNames {
public static final JvmClassName JET_OBJECT = new JvmClassName("jet.JetObject");
public static final JvmClassName ASSERT_INVISIBLE_IN_RESOLVER = new JvmClassName("org.jetbrains.jet.rt.annotation.AssertInvisibleInResolver");
private JvmStdlibNames() {
}
@@ -26,8 +26,13 @@ import org.jetbrains.jet.lang.resolve.FqName;
* @author Stepan Koltsov
*/
public interface PsiClassFinder {
enum RuntimeClassesHandleMode {
THROW,
IGNORE,
}
@Nullable
PsiClass findPsiClass(@NotNull FqName fqName);
PsiClass findPsiClass(@NotNull FqName fqName, @NotNull RuntimeClassesHandleMode runtimeClassesHandleMode);
@Nullable
PsiPackage findPsiPackage(@NotNull FqName fqName);
}
@@ -19,6 +19,7 @@ package org.jetbrains.jet.lang.resolve.java;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.JavaPsiFacade;
import com.intellij.psi.PsiAnnotation;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiPackage;
import com.intellij.psi.impl.compiled.ClsClassImpl;
@@ -29,11 +30,9 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.resolve.FqName;
import org.jetbrains.jet.lang.resolve.java.alt.AltClassFinder;
import org.jetbrains.jet.plugin.JetFileType;
import org.jetbrains.jet.utils.PathUtil;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import java.util.Collections;
/**
* @author Stepan Koltsov
@@ -74,7 +73,7 @@ public class PsiClassFinderForJvm implements PsiClassFinder {
@Override
@Nullable
public PsiClass findPsiClass(@NotNull FqName qualifiedName) {
public PsiClass findPsiClass(@NotNull FqName qualifiedName, @NotNull RuntimeClassesHandleMode runtimeClassesHandleMode) {
PsiClass original = javaFacade.findClass(qualifiedName.getFqName(), javaSearchScope);
PsiClass altClass = altClassFinder.findClass(qualifiedName);
PsiClass result = original;
@@ -97,6 +96,26 @@ public class PsiClassFinderForJvm implements PsiClassFinder {
return null;
}
if (result == null) {
return null;
}
PsiAnnotation assertInvisibleAnnotation = result.getModifierList().findAnnotation(
JvmStdlibNames.ASSERT_INVISIBLE_IN_RESOLVER.getFqName().getFqName());
if (assertInvisibleAnnotation != null) {
if (runtimeClassesHandleMode == RuntimeClassesHandleMode.IGNORE) {
return null;
}
else if (runtimeClassesHandleMode == RuntimeClassesHandleMode.THROW) {
throw new IllegalStateException(
"classpath is configured incorrectly:" +
" class " + qualifiedName + " from runtime must not be loaded by compiler");
}
else {
throw new IllegalStateException("unknown parameter value: " + runtimeClassesHandleMode);
}
}
return result;
}