[kotlin] Add annotator for missing constructor brackets

#KTIJ-29511 Fixed

GitOrigin-RevId: b9db39d0fb2312439c30d3dcaa2e5ccfef146fad
This commit is contained in:
Bart van Helvert
2024-07-12 21:41:10 +00:00
committed by intellij-monorepo-bot
parent 1010b6e381
commit 968182efdb
7 changed files with 47 additions and 4 deletions
@@ -7,6 +7,7 @@
</extensions>
<extensions defaultExtensionNs="com.intellij">
<annotator language="kotlin" implementationClass="org.jetbrains.kotlin.idea.k2.codeinsight.fixes.MissingConstructorBracketsAnnotator"/>
<codeInsight.unresolvedReferenceQuickFixProvider
implementation="org.jetbrains.kotlin.idea.k2.codeinsight.fixes.KotlinFirUnresolvedReferenceQuickFixProvider"/>
</extensions>
@@ -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()
}
}
@@ -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");
}
}
@@ -34,4 +34,4 @@ class MissingConstructorKeywordFix(
}
return addAfter(constructor, modifierList)
}
}
}
@@ -2,4 +2,5 @@
class Fruit private constructor<caret> {
}
// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.MissingConstructorBracketsFix
// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.MissingConstructorBracketsFix
// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.MissingConstructorBracketsFix
@@ -2,4 +2,5 @@
class Fruit private constructor(<caret>) {
}
// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.MissingConstructorBracketsFix
// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.MissingConstructorBracketsFix
// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.MissingConstructorBracketsFix
@@ -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)