From b32859cf68f641b487c709346fd344451186c69b Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Mon, 4 Apr 2016 13:40:30 +0300 Subject: [PATCH] KT-11633 Kotlin code editor applies wrong indentation after completing a statement in data class #KT-11633 Fixed --- idea/idea-analysis/idea-analysis.iml | 1 + .../jetbrains/kotlin/idea/util/ShortenReferences.kt | 11 +++++++++-- .../testData/handlers/basic/KT11633.kt | 11 +++++++++++ .../testData/handlers/basic/KT11633.kt.after | 11 +++++++++++ .../handlers/BasicCompletionHandlerTestGenerated.java | 6 ++++++ idea/testData/shortenRefs/KT11633.kt | 11 +++++++++++ idea/testData/shortenRefs/kt11633.kt.after | 11 +++++++++++ .../kotlin/shortenRefs/ShortenRefsTestGenerated.java | 6 ++++++ 8 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 idea/idea-completion/testData/handlers/basic/KT11633.kt create mode 100644 idea/idea-completion/testData/handlers/basic/KT11633.kt.after create mode 100644 idea/testData/shortenRefs/KT11633.kt create mode 100644 idea/testData/shortenRefs/kt11633.kt.after diff --git a/idea/idea-analysis/idea-analysis.iml b/idea/idea-analysis/idea-analysis.iml index 44f8b46113b..04f68a6cfe5 100644 --- a/idea/idea-analysis/idea-analysis.iml +++ b/idea/idea-analysis/idea-analysis.iml @@ -31,5 +31,6 @@ + \ No newline at end of file diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/util/ShortenReferences.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/util/ShortenReferences.kt index d6ef3c69caa..07494cb753f 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/util/ShortenReferences.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/util/ShortenReferences.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.idea.util import com.intellij.openapi.util.TextRange import com.intellij.psi.PsiDocumentManager import com.intellij.psi.PsiElement +import com.intellij.psi.impl.source.PostprocessReformattingAspect import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassifierDescriptor @@ -235,10 +236,16 @@ class ShortenReferences(val options: (KtElement) -> Options = { Options.DEFAULT fun shortenElements(elementSetToUpdate: MutableSet) { for (element in elementsToShorten) { if (!element.isValid) continue - val newElement = shortenElement(element) + + var newElement: KtElement? = null + // we never want any reformatting to happen because sometimes it causes strange effects (see KT-11633) + PostprocessReformattingAspect.getInstance(element.project).disablePostprocessFormattingInside { + newElement = shortenElement(element) + } + if (element in elementSetToUpdate && newElement != element) { elementSetToUpdate.remove(element) - elementSetToUpdate.add(newElement) + elementSetToUpdate.add(newElement!!) } } } diff --git a/idea/idea-completion/testData/handlers/basic/KT11633.kt b/idea/idea-completion/testData/handlers/basic/KT11633.kt new file mode 100644 index 00000000000..7cc35d44477 --- /dev/null +++ b/idea/idea-completion/testData/handlers/basic/KT11633.kt @@ -0,0 +1,11 @@ +import java.util.Date + +data class Test( + @Deprecated("Other") + val some: Int? = 1, + val other: Date = Date, + val test: Int +) + +// ELEMENT: Date +// TAIL_TEXT: "(...) (java.util)" diff --git a/idea/idea-completion/testData/handlers/basic/KT11633.kt.after b/idea/idea-completion/testData/handlers/basic/KT11633.kt.after new file mode 100644 index 00000000000..6139dc5c825 --- /dev/null +++ b/idea/idea-completion/testData/handlers/basic/KT11633.kt.after @@ -0,0 +1,11 @@ +import java.util.Date + +data class Test( + @Deprecated("Other") + val some: Int? = 1, + val other: Date = Date(), + val test: Int +) + +// ELEMENT: Date +// TAIL_TEXT: "(...) (java.util)" diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/handlers/BasicCompletionHandlerTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/handlers/BasicCompletionHandlerTestGenerated.java index a1ceee80296..213111aa6b2 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/handlers/BasicCompletionHandlerTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/handlers/BasicCompletionHandlerTestGenerated.java @@ -113,6 +113,12 @@ public class BasicCompletionHandlerTestGenerated extends AbstractBasicCompletion doTest(fileName); } + @TestMetadata("KT11633.kt") + public void testKT11633() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/handlers/basic/KT11633.kt"); + doTest(fileName); + } + @TestMetadata("NestedTypeArg.kt") public void testNestedTypeArg() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/handlers/basic/NestedTypeArg.kt"); diff --git a/idea/testData/shortenRefs/KT11633.kt b/idea/testData/shortenRefs/KT11633.kt new file mode 100644 index 00000000000..62261081be4 --- /dev/null +++ b/idea/testData/shortenRefs/KT11633.kt @@ -0,0 +1,11 @@ +import java.util.Date + +data class Test( + @Deprecated("Other") + val some: Int? = 1, + val other: Date = java.util.Date(), + val test: Int +) + +// ELEMENT: Date +// TAIL_TEXT: "(...) (java.util)" diff --git a/idea/testData/shortenRefs/kt11633.kt.after b/idea/testData/shortenRefs/kt11633.kt.after new file mode 100644 index 00000000000..f1d180396d3 --- /dev/null +++ b/idea/testData/shortenRefs/kt11633.kt.after @@ -0,0 +1,11 @@ +import java.util.Date + +data class Test( + @Deprecated("Other") + val some: Int? = 1, + val other: Date = Date(), + val test: Int +) + +// ELEMENT: Date +// TAIL_TEXT: "(...) (java.util)" diff --git a/idea/tests/org/jetbrains/kotlin/shortenRefs/ShortenRefsTestGenerated.java b/idea/tests/org/jetbrains/kotlin/shortenRefs/ShortenRefsTestGenerated.java index e3fd73f4497..6ecc4cbd5dc 100644 --- a/idea/tests/org/jetbrains/kotlin/shortenRefs/ShortenRefsTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/shortenRefs/ShortenRefsTestGenerated.java @@ -71,6 +71,12 @@ public class ShortenRefsTestGenerated extends AbstractShortenRefsTest { doTest(fileName); } + @TestMetadata("kt11633.kt") + public void testKt11633() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/shortenRefs/kt11633.kt"); + doTest(fileName); + } + @TestMetadata("noShortening.kt") public void testNoShortening() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/shortenRefs/noShortening.kt");