From a68dbe78d8f3a4c0a5417d75e13b11e9aa55caca Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Thu, 7 Apr 2016 20:53:47 +0300 Subject: [PATCH] KT-11594 "Add non-null asserted (!!) call" applied to unsafe cast to nullable type causes AE at KtPsiFactory.createExpression() #KT-11594 Fixed --- .../jetbrains/kotlin/idea/quickfix/ExclExclCallFixes.kt | 7 ++----- idea/testData/quickfix/expressions/kt11594.kt | 7 +++++++ idea/testData/quickfix/expressions/kt11594.kt.after | 7 +++++++ .../kotlin/idea/quickfix/QuickFixTestGenerated.java | 6 ++++++ 4 files changed, 22 insertions(+), 5 deletions(-) create mode 100644 idea/testData/quickfix/expressions/kt11594.kt create mode 100644 idea/testData/quickfix/expressions/kt11594.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ExclExclCallFixes.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ExclExclCallFixes.kt index 5c904e33dbc..8473ebf46fb 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ExclExclCallFixes.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ExclExclCallFixes.kt @@ -31,10 +31,7 @@ import org.jetbrains.kotlin.idea.KotlinBundle import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.incremental.components.NoLookupLocation import org.jetbrains.kotlin.lexer.KtTokens -import org.jetbrains.kotlin.psi.KtExpression -import org.jetbrains.kotlin.psi.KtFile -import org.jetbrains.kotlin.psi.KtPostfixExpression -import org.jetbrains.kotlin.psi.KtPsiFactory +import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.types.TypeUtils import org.jetbrains.kotlin.util.OperatorNameConventions @@ -85,7 +82,7 @@ class AddExclExclCallFix(val psiElement: PsiElement) : ExclExclCallFix() { override fun invoke(project: Project, editor: Editor?, file: PsiFile?) { val modifiedExpression = getExpressionForIntroduceCall() ?: return - val exclExclExpression = KtPsiFactory(project).createExpression(modifiedExpression.text + "!!") + val exclExclExpression = KtPsiFactory(project).createExpressionByPattern("$0!!", modifiedExpression) modifiedExpression.replace(exclExclExpression) } diff --git a/idea/testData/quickfix/expressions/kt11594.kt b/idea/testData/quickfix/expressions/kt11594.kt new file mode 100644 index 00000000000..8931f89bec4 --- /dev/null +++ b/idea/testData/quickfix/expressions/kt11594.kt @@ -0,0 +1,7 @@ +// "Add non-null asserted (!!) call" "true" + +fun callMe(p: String) {} + +fun callIt(p: Any) { + callMe(p as String?) +} \ No newline at end of file diff --git a/idea/testData/quickfix/expressions/kt11594.kt.after b/idea/testData/quickfix/expressions/kt11594.kt.after new file mode 100644 index 00000000000..43f7f0cd4b1 --- /dev/null +++ b/idea/testData/quickfix/expressions/kt11594.kt.after @@ -0,0 +1,7 @@ +// "Add non-null asserted (!!) call" "true" + +fun callMe(p: String) {} + +fun callIt(p: Any) { + callMe((p as String?)!!) +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index 43f164bd46d..2c2f5fcac48 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -4473,6 +4473,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { doTest(fileName); } + @TestMetadata("kt11594.kt") + public void testKt11594() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/expressions/kt11594.kt"); + doTest(fileName); + } + @TestMetadata("removeUselessCast.kt") public void testRemoveUselessCast() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/expressions/removeUselessCast.kt");