From f72dcb8ee21f14c1d7ef3da32d5de6e91afd7e90 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Mon, 19 May 2014 11:38:53 +0400 Subject: [PATCH] Fix for EA-53605 - UOE: PackageType.throwException --- .../src/org/jetbrains/jet/lang/types/PackageType.java | 5 +++++ .../jetbrains/jet/lang/types/lang/KotlinBuiltIns.java | 7 ++++--- .../jetbrains/jet/renderer/DescriptorRendererImpl.java | 3 +++ .../testData/checker/regression/createInnerInstance.kt | 10 ++++++++++ .../jet/checkers/JetPsiCheckerTestGenerated.java | 5 +++++ 5 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 idea/testData/checker/regression/createInnerInstance.kt diff --git a/core/descriptors/src/org/jetbrains/jet/lang/types/PackageType.java b/core/descriptors/src/org/jetbrains/jet/lang/types/PackageType.java index c461dcf40ef..0962c0d2804 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/types/PackageType.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/types/PackageType.java @@ -84,4 +84,9 @@ public class PackageType implements JetType { throwException(); return null; } + + @Override + public String toString() { + return "[Package-type " + name + "]"; + } } diff --git a/core/descriptors/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java b/core/descriptors/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java index fef6b0a40af..6122ef22b9b 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java @@ -727,7 +727,7 @@ public class KotlinBuiltIns { } public boolean isFunctionType(@NotNull JetType type) { - if (setContainsClassOf(functionClassesSet, type)) return true; + if (!(type instanceof PackageType) && setContainsClassOf(functionClassesSet, type)) return true; for (JetType superType : type.getConstructor().getSupertypes()) { if (isFunctionType(superType)) return true; @@ -737,11 +737,12 @@ public class KotlinBuiltIns { } public boolean isExactFunctionOrExtensionFunctionType(@NotNull JetType type) { - return setContainsClassOf(extensionFunctionClassesSet, type) || setContainsClassOf(functionClassesSet, type); + return !(type instanceof PackageType) + && (setContainsClassOf(extensionFunctionClassesSet, type) || setContainsClassOf(functionClassesSet, type)); } public boolean isExtensionFunctionType(@NotNull JetType type) { - if (setContainsClassOf(extensionFunctionClassesSet, type)) return true; + if (!(type instanceof PackageType) && setContainsClassOf(extensionFunctionClassesSet, type)) return true; for (JetType superType : type.getConstructor().getSupertypes()) { if (isExtensionFunctionType(superType)) return true; diff --git a/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java b/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java index adb1c9a64be..98cab90d38d 100644 --- a/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java +++ b/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java @@ -245,6 +245,9 @@ public class DescriptorRendererImpl implements DescriptorRenderer { } return "???"; } + if (type instanceof PackageType) { + return type.toString(); + } if (type instanceof LazyType && debugMode) { return type.toString(); } diff --git a/idea/testData/checker/regression/createInnerInstance.kt b/idea/testData/checker/regression/createInnerInstance.kt new file mode 100644 index 00000000000..f2b63b0065e --- /dev/null +++ b/idea/testData/checker/regression/createInnerInstance.kt @@ -0,0 +1,10 @@ +object A { + class B + fun foo() = 1 + object Bar{} +} + +fun test(a: T) { + val c = (a as A) + c.B() +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/checkers/JetPsiCheckerTestGenerated.java b/idea/tests/org/jetbrains/jet/checkers/JetPsiCheckerTestGenerated.java index beb84e14d63..1ef3d24ce9b 100644 --- a/idea/tests/org/jetbrains/jet/checkers/JetPsiCheckerTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/checkers/JetPsiCheckerTestGenerated.java @@ -306,6 +306,11 @@ public class JetPsiCheckerTestGenerated extends AbstractJetPsiCheckerTest { doTest("idea/testData/checker/regression/CoercionToUnit.kt"); } + @TestMetadata("createInnerInstance.kt") + public void testCreateInnerInstance() throws Exception { + doTest("idea/testData/checker/regression/createInnerInstance.kt"); + } + @TestMetadata("DoubleDefine.kt") public void testDoubleDefine() throws Exception { doTest("idea/testData/checker/regression/DoubleDefine.kt");