diff --git a/idea/src/org/jetbrains/jet/plugin/libraries/JetSourceNavigationHelper.java b/idea/src/org/jetbrains/jet/plugin/libraries/JetSourceNavigationHelper.java
index 8bb0cdcff9a..944bc351699 100644
--- a/idea/src/org/jetbrains/jet/plugin/libraries/JetSourceNavigationHelper.java
+++ b/idea/src/org/jetbrains/jet/plugin/libraries/JetSourceNavigationHelper.java
@@ -40,21 +40,33 @@ import gnu.trove.THashSet;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.TestOnly;
+import org.jetbrains.asm4.Type;
import org.jetbrains.jet.asJava.LightClassUtil;
+import org.jetbrains.jet.codegen.AsmUtil;
import org.jetbrains.jet.codegen.binding.PsiCodegenPredictor;
import org.jetbrains.jet.lang.DefaultModuleConfiguration;
import org.jetbrains.jet.lang.descriptors.CallableDescriptor;
+import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.psi.*;
+import org.jetbrains.jet.lang.resolve.BindingContext;
+import org.jetbrains.jet.lang.resolve.BindingContextUtils;
import org.jetbrains.jet.lang.resolve.java.JvmClassName;
-import org.jetbrains.jet.lang.resolve.lazy.declarations.FileBasedDeclarationProviderFactory;
+import org.jetbrains.jet.lang.resolve.java.JvmPrimitiveType;
+import org.jetbrains.jet.lang.resolve.java.KotlinToJavaTypesMap;
import org.jetbrains.jet.lang.resolve.lazy.KotlinCodeAnalyzer;
-import org.jetbrains.jet.lang.resolve.lazy.storage.LockBasedStorageManager;
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
+import org.jetbrains.jet.lang.resolve.lazy.declarations.FileBasedDeclarationProviderFactory;
+import org.jetbrains.jet.lang.resolve.lazy.storage.LockBasedStorageManager;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.Name;
+import org.jetbrains.jet.lang.types.JetType;
+import org.jetbrains.jet.lang.types.TypeUtils;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
import org.jetbrains.jet.lexer.JetTokens;
+import org.jetbrains.jet.plugin.caches.resolve.KotlinCacheManager;
+import org.jetbrains.jet.plugin.project.AnalyzerFacadeWithCache;
+import org.jetbrains.jet.plugin.references.BuiltInsReferenceResolver;
import org.jetbrains.jet.plugin.stubindex.JetFullClassNameIndex;
import org.jetbrains.jet.plugin.stubindex.JetTopLevelFunctionsFqnNameIndex;
import org.jetbrains.jet.plugin.stubindex.JetTopLevelPropertiesFqnNameIndex;
@@ -342,6 +354,24 @@ public class JetSourceNavigationHelper {
if (originalClass != null) {
return originalClass;
}
+ if (LightClassUtil.belongsToKotlinBuiltIns((JetFile) classOrObject.getContainingFile())) {
+ Name className = classOrObject.getNameAsName();
+ assert className != null : "Class from BuiltIns should have a name";
+ ClassDescriptor classDescriptor = KotlinBuiltIns.getInstance().getBuiltInClassByName(className);
+ Type javaAnalog = KotlinToJavaTypesMap.getInstance().getJavaAnalog(classDescriptor.getDefaultType());
+ if (javaAnalog != null) {
+ if (AsmUtil.isPrimitive(javaAnalog)) {
+ javaAnalog = KotlinToJavaTypesMap.getInstance().getJavaAnalog(TypeUtils.makeNullable(classDescriptor.getDefaultType()));
+ assert javaAnalog != null : "Java analog should exists for primitive nullable type";
+ }
+ if (javaAnalog.getSort() != Type.OBJECT) {
+ return null;
+ }
+ String fqName = JvmClassName.byType(javaAnalog).getFqName().getFqName();
+ return JavaPsiFacade.getInstance(classOrObject.getProject()).
+ findClass(fqName, GlobalSearchScope.allScope(classOrObject.getProject()));
+ }
+ }
if (!JetPsiUtil.isLocalClass(classOrObject)) {
return LightClassUtil.createLightClass(classOrObject);
}
diff --git a/idea/testData/hierarchy/class/super/JetList/JetList_verification.xml b/idea/testData/hierarchy/class/super/JetList/JetList_verification.xml
new file mode 100644
index 00000000000..92dbb2b3f46
--- /dev/null
+++ b/idea/testData/hierarchy/class/super/JetList/JetList_verification.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/idea/testData/hierarchy/class/super/JetList/main.kt b/idea/testData/hierarchy/class/super/JetList/main.kt
new file mode 100644
index 00000000000..ce1d613c67f
--- /dev/null
+++ b/idea/testData/hierarchy/class/super/JetList/main.kt
@@ -0,0 +1,3 @@
+val a: List
+
+
diff --git a/idea/testData/hierarchy/class/type/JetInt/JetInt_verification.xml b/idea/testData/hierarchy/class/type/JetInt/JetInt_verification.xml
new file mode 100644
index 00000000000..3e855378629
--- /dev/null
+++ b/idea/testData/hierarchy/class/type/JetInt/JetInt_verification.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/idea/testData/hierarchy/class/type/JetInt/main.kt b/idea/testData/hierarchy/class/type/JetInt/main.kt
new file mode 100644
index 00000000000..e64cf594e7b
--- /dev/null
+++ b/idea/testData/hierarchy/class/type/JetInt/main.kt
@@ -0,0 +1,3 @@
+val a: Int
+
+
diff --git a/idea/tests/org/jetbrains/jet/plugin/hierarchy/HierarchyTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/hierarchy/HierarchyTestGenerated.java
index de1332a6c05..ac1c5088ac9 100644
--- a/idea/tests/org/jetbrains/jet/plugin/hierarchy/HierarchyTestGenerated.java
+++ b/idea/tests/org/jetbrains/jet/plugin/hierarchy/HierarchyTestGenerated.java
@@ -133,6 +133,11 @@ public class HierarchyTestGenerated extends AbstractHierarchyTest {
doTypeClassHierarchyTest("idea/testData/hierarchy/class/type/JavaFromKotlinForKotlinClass");
}
+ @TestMetadata("JetInt")
+ public void testJetInt() throws Exception {
+ doTypeClassHierarchyTest("idea/testData/hierarchy/class/type/JetInt");
+ }
+
@TestMetadata("KJKHierarchy")
public void testKJKHierarchy() throws Exception {
doTypeClassHierarchyTest("idea/testData/hierarchy/class/type/KJKHierarchy");
@@ -161,6 +166,11 @@ public class HierarchyTestGenerated extends AbstractHierarchyTest {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/hierarchy/class/super"), Pattern.compile("^(.+)$"), false);
}
+ @TestMetadata("JetList")
+ public void testJetList() throws Exception {
+ doSuperClassHierarchyTest("idea/testData/hierarchy/class/super/JetList");
+ }
+
@TestMetadata("TwoTraits")
public void testTwoTraits() throws Exception {
doSuperClassHierarchyTest("idea/testData/hierarchy/class/super/TwoTraits");