From 968182efdb2fe98289be5f44ef7c99bea9ba78e9 Mon Sep 17 00:00:00 2001 From: Bart van Helvert Date: Fri, 12 Jul 2024 15:04:25 +0200 Subject: [PATCH] [kotlin] Add annotator for missing constructor brackets #KTIJ-29511 Fixed GitOrigin-RevId: b9db39d0fb2312439c30d3dcaa2e5ccfef146fad --- .../kotlin.code-insight.fixes.k2.xml | 1 + .../MissingConstructorBracketsAnnotator.kt | 23 +++++++++++++++++++ .../fixes/HighLevelQuickFixTestGenerated.java | 17 ++++++++++++++ .../quickfix/MissingConstructorKeywordFix.kt | 2 +- .../missingConstructorBrackets/basic.kt | 3 ++- .../missingConstructorBrackets/basic.kt.after | 3 ++- .../codeinsight/GenerateK2QuickFixTests.kt | 2 +- 7 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/MissingConstructorBracketsAnnotator.kt diff --git a/plugins/kotlin/code-insight/fixes-k2/resources/kotlin.code-insight.fixes.k2.xml b/plugins/kotlin/code-insight/fixes-k2/resources/kotlin.code-insight.fixes.k2.xml index 5de2cc1508d9..ddce853d812e 100644 --- a/plugins/kotlin/code-insight/fixes-k2/resources/kotlin.code-insight.fixes.k2.xml +++ b/plugins/kotlin/code-insight/fixes-k2/resources/kotlin.code-insight.fixes.k2.xml @@ -7,6 +7,7 @@ + diff --git a/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/MissingConstructorBracketsAnnotator.kt b/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/MissingConstructorBracketsAnnotator.kt new file mode 100644 index 000000000000..68970e98a623 --- /dev/null +++ b/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/MissingConstructorBracketsAnnotator.kt @@ -0,0 +1,23 @@ +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package org.jetbrains.kotlin.idea.k2.codeinsight.fixes + +import com.intellij.lang.annotation.AnnotationHolder +import com.intellij.lang.annotation.Annotator +import com.intellij.lang.annotation.HighlightSeverity +import com.intellij.openapi.util.TextRange +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.idea.quickfix.MissingConstructorBracketsFix +import org.jetbrains.kotlin.psi.KtClass + +class MissingConstructorBracketsAnnotator : Annotator { + override fun annotate(element: PsiElement, holder: AnnotationHolder) { + if (element !is KtClass) return + val primaryConstructor = element.primaryConstructor ?: return + if (primaryConstructor.valueParameterList != null) return + val startRange = primaryConstructor.getConstructorKeyword()?.textRange?.endOffset ?: return + holder.newSilentAnnotation(HighlightSeverity.ERROR) + .range(TextRange.create(startRange, startRange + 1)) + .withFix(MissingConstructorBracketsFix(primaryConstructor)) + .create() + } +} \ No newline at end of file diff --git a/plugins/kotlin/code-insight/fixes-k2/tests/test/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/HighLevelQuickFixTestGenerated.java b/plugins/kotlin/code-insight/fixes-k2/tests/test/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/HighLevelQuickFixTestGenerated.java index 2099f2a2e1fc..20edc4d631e5 100644 --- a/plugins/kotlin/code-insight/fixes-k2/tests/test/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/HighLevelQuickFixTestGenerated.java +++ b/plugins/kotlin/code-insight/fixes-k2/tests/test/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/HighLevelQuickFixTestGenerated.java @@ -8955,7 +8955,24 @@ public abstract class HighLevelQuickFixTestGenerated extends AbstractHighLevelQu } } + @RunWith(JUnit3RunnerWithInners.class) + @TestMetadata("../../../idea/tests/testData/quickfix/missingConstructorBrackets") + public static class MissingConstructorBrackets extends AbstractHighLevelQuickFixTest { + @java.lang.Override + @org.jetbrains.annotations.NotNull + public final KotlinPluginMode getPluginMode() { + return KotlinPluginMode.K2; + } + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, this, testDataFilePath); + } + + @TestMetadata("basic.kt") + public void testBasic() throws Exception { + runTest("../../../idea/tests/testData/quickfix/missingConstructorBrackets/basic.kt"); + } + } diff --git a/plugins/kotlin/frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/MissingConstructorKeywordFix.kt b/plugins/kotlin/frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/MissingConstructorKeywordFix.kt index bb3954a60995..7f5a2d71ab19 100644 --- a/plugins/kotlin/frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/MissingConstructorKeywordFix.kt +++ b/plugins/kotlin/frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/MissingConstructorKeywordFix.kt @@ -34,4 +34,4 @@ class MissingConstructorKeywordFix( } return addAfter(constructor, modifierList) } -} +} \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/quickfix/missingConstructorBrackets/basic.kt b/plugins/kotlin/idea/tests/testData/quickfix/missingConstructorBrackets/basic.kt index a93b160ca613..a0b6c11659d6 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/missingConstructorBrackets/basic.kt +++ b/plugins/kotlin/idea/tests/testData/quickfix/missingConstructorBrackets/basic.kt @@ -2,4 +2,5 @@ class Fruit private constructor { } -// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.MissingConstructorBracketsFix \ No newline at end of file +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.MissingConstructorBracketsFix +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.MissingConstructorBracketsFix \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/quickfix/missingConstructorBrackets/basic.kt.after b/plugins/kotlin/idea/tests/testData/quickfix/missingConstructorBrackets/basic.kt.after index 881347df62d2..3fad53923384 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/missingConstructorBrackets/basic.kt.after +++ b/plugins/kotlin/idea/tests/testData/quickfix/missingConstructorBrackets/basic.kt.after @@ -2,4 +2,5 @@ class Fruit private constructor() { } -// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.MissingConstructorBracketsFix \ No newline at end of file +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.MissingConstructorBracketsFix +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.MissingConstructorBracketsFix \ No newline at end of file diff --git a/plugins/kotlin/util/test-generator-fir/test/org/jetbrains/kotlin/fir/testGenerator/codeinsight/GenerateK2QuickFixTests.kt b/plugins/kotlin/util/test-generator-fir/test/org/jetbrains/kotlin/fir/testGenerator/codeinsight/GenerateK2QuickFixTests.kt index 3cee3fa9a715..95a1e6d2415e 100644 --- a/plugins/kotlin/util/test-generator-fir/test/org/jetbrains/kotlin/fir/testGenerator/codeinsight/GenerateK2QuickFixTests.kt +++ b/plugins/kotlin/util/test-generator-fir/test/org/jetbrains/kotlin/fir/testGenerator/codeinsight/GenerateK2QuickFixTests.kt @@ -138,7 +138,7 @@ internal fun MutableTWorkspace.generateK2FixTests() { model("$idea/quickfix/makeUpperBoundNonNullable", pattern = pattern, isIgnored = true) model("$idea/quickfix/memberVisibilityCanBePrivate", pattern = pattern, isIgnored = true) model("$idea/quickfix/migration/missingConstructorKeyword", pattern = pattern) - model("$idea/quickfix/missingConstructorBrackets", pattern = pattern, isIgnored = true) + model("$idea/quickfix/missingConstructorBrackets", pattern = pattern) model("$idea/quickfix/moveMemberToCompanionObject", pattern = pattern, isIgnored = true) model("$idea/quickfix/moveReceiverAnnotation", pattern = pattern, isIgnored = true) model("$idea/quickfix/moveToConstructorParameters", pattern = pattern, isIgnored = true)