From dbfea9b7872c5d32615791ae726cafec13bd87b5 Mon Sep 17 00:00:00 2001 From: Mikhail Zarechenskiy Date: Mon, 8 May 2017 03:09:33 +0300 Subject: [PATCH] Fix TCE for invalid code with wrong callee expression #KT-14927 Fixed --- .../kotlin/resolve/QualifiedExpressionResolver.kt | 8 +++++--- .../calleeExpressionAsCallExpression.kt | 1 + .../calleeExpressionAsCallExpression.txt | 3 +++ .../qualifiedExpression/nullCalleeExpression.kt | 1 + .../qualifiedExpression/nullCalleeExpression.txt | 3 +++ .../kotlin/checkers/DiagnosticsTestGenerated.java | 12 ++++++++++++ 6 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/qualifiedExpression/calleeExpressionAsCallExpression.kt create mode 100644 compiler/testData/diagnostics/tests/qualifiedExpression/calleeExpressionAsCallExpression.txt create mode 100644 compiler/testData/diagnostics/tests/qualifiedExpression/nullCalleeExpression.kt create mode 100644 compiler/testData/diagnostics/tests/qualifiedExpression/nullCalleeExpression.txt diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/QualifiedExpressionResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/QualifiedExpressionResolver.kt index aecb99ec4a1..9447311cce7 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/QualifiedExpressionResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/QualifiedExpressionResolver.kt @@ -276,9 +276,11 @@ class QualifiedExpressionResolver { return true } if (doubleColonLHS && expression is KtCallExpression && expression.isWithoutValueArguments) { - val simpleName = expression.calleeExpression as KtSimpleNameExpression - result.add(QualifierPart(simpleName.getReferencedNameAsName(), simpleName, expression.typeArgumentList)) - return true + val simpleName = expression.calleeExpression + if (simpleName is KtSimpleNameExpression) { + result.add(QualifierPart(simpleName.getReferencedNameAsName(), simpleName, expression.typeArgumentList)) + return true + } } return false } diff --git a/compiler/testData/diagnostics/tests/qualifiedExpression/calleeExpressionAsCallExpression.kt b/compiler/testData/diagnostics/tests/qualifiedExpression/calleeExpressionAsCallExpression.kt new file mode 100644 index 00000000000..0a1bead57c9 --- /dev/null +++ b/compiler/testData/diagnostics/tests/qualifiedExpression/calleeExpressionAsCallExpression.kt @@ -0,0 +1 @@ +val unwrapped = some<sdf()()Any>::unwrap \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/qualifiedExpression/calleeExpressionAsCallExpression.txt b/compiler/testData/diagnostics/tests/qualifiedExpression/calleeExpressionAsCallExpression.txt new file mode 100644 index 00000000000..ae47311958c --- /dev/null +++ b/compiler/testData/diagnostics/tests/qualifiedExpression/calleeExpressionAsCallExpression.txt @@ -0,0 +1,3 @@ +package + +public val unwrapped: [ERROR : Type for some::unwrap] diff --git a/compiler/testData/diagnostics/tests/qualifiedExpression/nullCalleeExpression.kt b/compiler/testData/diagnostics/tests/qualifiedExpression/nullCalleeExpression.kt new file mode 100644 index 00000000000..fbabb3e8b49 --- /dev/null +++ b/compiler/testData/diagnostics/tests/qualifiedExpression/nullCalleeExpression.kt @@ -0,0 +1 @@ +val unwrapped = some.<cabc$WrapperAny>::unwrap \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/qualifiedExpression/nullCalleeExpression.txt b/compiler/testData/diagnostics/tests/qualifiedExpression/nullCalleeExpression.txt new file mode 100644 index 00000000000..d67025dfa37 --- /dev/null +++ b/compiler/testData/diagnostics/tests/qualifiedExpression/nullCalleeExpression.txt @@ -0,0 +1,3 @@ +package + +public val unwrapped: [ERROR : ] diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index b82ff29b0fd..2ca0d86fd67 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -15946,6 +15946,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/diagnostics/tests/qualifiedExpression"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true); } + @TestMetadata("calleeExpressionAsCallExpression.kt") + public void testCalleeExpressionAsCallExpression() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/qualifiedExpression/calleeExpressionAsCallExpression.kt"); + doTest(fileName); + } + @TestMetadata("GenericClassVsPackage.kt") public void testGenericClassVsPackage() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/qualifiedExpression/GenericClassVsPackage.kt"); @@ -15958,6 +15964,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { doTest(fileName); } + @TestMetadata("nullCalleeExpression.kt") + public void testNullCalleeExpression() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/qualifiedExpression/nullCalleeExpression.kt"); + doTest(fileName); + } + @TestMetadata("PackageVsClass.kt") public void testPackageVsClass() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/qualifiedExpression/PackageVsClass.kt");