KT-14890 Fix the problem with RemoveEmptyClassBodyIntention for nested class followed by a secondary constructor
#KT-14890 Fixed
This commit is contained in:
committed by
Mikhail Glukhikh
parent
b7f27b86fe
commit
ba92dcb737
@@ -20,8 +20,11 @@ import com.intellij.codeInspection.CleanupLocalInspectionTool
|
|||||||
import com.intellij.codeInspection.ProblemHighlightType
|
import com.intellij.codeInspection.ProblemHighlightType
|
||||||
import com.intellij.openapi.editor.Editor
|
import com.intellij.openapi.editor.Editor
|
||||||
import org.jetbrains.kotlin.idea.inspections.IntentionBasedInspection
|
import org.jetbrains.kotlin.idea.inspections.IntentionBasedInspection
|
||||||
|
import org.jetbrains.kotlin.psi.KtClass
|
||||||
import org.jetbrains.kotlin.psi.KtClassBody
|
import org.jetbrains.kotlin.psi.KtClassBody
|
||||||
import org.jetbrains.kotlin.psi.KtObjectDeclaration
|
import org.jetbrains.kotlin.psi.KtObjectDeclaration
|
||||||
|
import org.jetbrains.kotlin.psi.KtSecondaryConstructor
|
||||||
|
import org.jetbrains.kotlin.psi.psiUtil.getNextSiblingIgnoringWhitespaceAndComments
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
||||||
|
|
||||||
class RemoveEmptyClassBodyInspection : IntentionBasedInspection<KtClassBody>(RemoveEmptyClassBodyIntention::class), CleanupLocalInspectionTool {
|
class RemoveEmptyClassBodyInspection : IntentionBasedInspection<KtClassBody>(RemoveEmptyClassBodyIntention::class), CleanupLocalInspectionTool {
|
||||||
@@ -36,6 +39,11 @@ class RemoveEmptyClassBodyIntention : SelfTargetingOffsetIndependentIntention<Kt
|
|||||||
element.getStrictParentOfType<KtObjectDeclaration>()?.let {
|
element.getStrictParentOfType<KtObjectDeclaration>()?.let {
|
||||||
if (it.isObjectLiteral()) return false
|
if (it.isObjectLiteral()) return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
element.getStrictParentOfType<KtClass>()?.let {
|
||||||
|
if (!it.isTopLevel() && it.getNextSiblingIgnoringWhitespaceAndComments() is KtSecondaryConstructor) return false
|
||||||
|
}
|
||||||
|
|
||||||
return element.text.replace("{", "").replace("}", "").isBlank()
|
return element.text.replace("{", "").replace("}", "").isBlank()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
class A(val x: String) {
|
||||||
|
|
||||||
|
class C {<caret>}
|
||||||
|
|
||||||
|
fun foo() {
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(x: String, y: Int) : this(x) {
|
||||||
|
}
|
||||||
|
}
|
||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
class A(val x: String) {
|
||||||
|
|
||||||
|
class C
|
||||||
|
|
||||||
|
fun foo() {
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(x: String, y: Int) : this(x) {
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
class A(val x: String) {
|
||||||
|
|
||||||
|
class C {<caret>}
|
||||||
|
|
||||||
|
val foo = 1
|
||||||
|
|
||||||
|
constructor(x: String, y: Int) : this(x) {
|
||||||
|
}
|
||||||
|
}
|
||||||
+9
@@ -0,0 +1,9 @@
|
|||||||
|
class A(val x: String) {
|
||||||
|
|
||||||
|
class C
|
||||||
|
|
||||||
|
val foo = 1
|
||||||
|
|
||||||
|
constructor(x: String, y: Int) : this(x) {
|
||||||
|
}
|
||||||
|
}
|
||||||
+9
@@ -0,0 +1,9 @@
|
|||||||
|
// IS_APPLICABLE: false
|
||||||
|
|
||||||
|
class A(val x: String) {
|
||||||
|
|
||||||
|
class C {<caret>}
|
||||||
|
|
||||||
|
constructor(x: String, y: Int) : this(x) {
|
||||||
|
}
|
||||||
|
}
|
||||||
Vendored
+11
@@ -0,0 +1,11 @@
|
|||||||
|
// IS_APPLICABLE: false
|
||||||
|
|
||||||
|
class A(val x: String) {
|
||||||
|
|
||||||
|
class C {<caret>}
|
||||||
|
|
||||||
|
// comments
|
||||||
|
|
||||||
|
constructor(x: String, y: Int) : this(x) {
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -10936,6 +10936,30 @@ public class IntentionTestGenerated extends AbstractIntentionTest {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("nestedClassFollowedByFunction.kt")
|
||||||
|
public void testNestedClassFollowedByFunction() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/removeEmptyClassBody/nestedClassFollowedByFunction.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("nestedClassFollowedByMember.kt")
|
||||||
|
public void testNestedClassFollowedByMember() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/removeEmptyClassBody/nestedClassFollowedByMember.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("nestedClassFollowedBySecondaryConstructor.kt")
|
||||||
|
public void testNestedClassFollowedBySecondaryConstructor() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/removeEmptyClassBody/nestedClassFollowedBySecondaryConstructor.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("nestedClassFollowedBySecondaryConstructor2.kt")
|
||||||
|
public void testNestedClassFollowedBySecondaryConstructor2() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/removeEmptyClassBody/nestedClassFollowedBySecondaryConstructor2.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("noneEmptyClass.kt")
|
@TestMetadata("noneEmptyClass.kt")
|
||||||
public void testNoneEmptyClass() throws Exception {
|
public void testNoneEmptyClass() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/removeEmptyClassBody/noneEmptyClass.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/removeEmptyClassBody/noneEmptyClass.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user