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)