Add inspection: Refactor sealed sub-class to object #KT-20305 Fixed

This commit is contained in:
Gabryel Monteiro
2018-02-12 20:50:36 +03:00
committed by Mikhail Glukhikh
parent 7cf6c70fbf
commit df7968678a
31 changed files with 514 additions and 0 deletions
@@ -0,0 +1,50 @@
<problems>
<problem>
<file>sealed.kt</file>
<line>8</line>
<module>light_idea_test_case</module>
<entry_point TYPE="file" FQNAME="temp:///src/sealed.kt" />
<problem_class severity="INFORMATION" attribute_key="INFO_ATTRIBUTES">Sealed Sub-class should be changed To Object</problem_class>
<description>Sealed Sub-class should be changed To Object</description>
</problem>
<problem>
<file>sealed.kt</file>
<line>10</line>
<module>light_idea_test_case</module>
<entry_point TYPE="file" FQNAME="temp:///src/sealed.kt" />
<problem_class severity="INFORMATION" attribute_key="INFO_ATTRIBUTES">Sealed Sub-class should be changed To Object</problem_class>
<description>Sealed Sub-class should be changed To Object</description>
</problem>
<problem>
<file>sealed.kt</file>
<line>13</line>
<module>light_idea_test_case</module>
<entry_point TYPE="file" FQNAME="temp:///src/sealed.kt" />
<problem_class severity="INFORMATION" attribute_key="INFO_ATTRIBUTES">Sealed Sub-class should be changed To Object</problem_class>
<description>Sealed Sub-class should be changed To Object</description>
</problem>
<problem>
<file>sealed.kt</file>
<line>15</line>
<module>light_idea_test_case</module>
<entry_point TYPE="file" FQNAME="temp:///src/sealed.kt" />
<problem_class severity="INFORMATION" attribute_key="INFO_ATTRIBUTES">Sealed Sub-class should be changed To Object</problem_class>
<description>Sealed Sub-class should be changed To Object</description>
</problem>
<problem>
<file>sealed.kt</file>
<line>41</line>
<module>light_idea_test_case</module>
<entry_point TYPE="file" FQNAME="temp:///src/sealed.kt" />
<problem_class severity="INFORMATION" attribute_key="INFO_ATTRIBUTES">Sealed Sub-class should be changed To Object</problem_class>
<description>Sealed Sub-class should be changed To Object</description>
</problem>
<problem>
<file>sealed.kt</file>
<line>45</line>
<module>light_idea_test_case</module>
<entry_point TYPE="file" FQNAME="temp:///src/sealed.kt" />
<problem_class severity="INFORMATION" attribute_key="INFO_ATTRIBUTES">Sealed Sub-class should be changed To Object</problem_class>
<description>Sealed Sub-class should be changed To Object</description>
</problem>
</problems>
@@ -0,0 +1 @@
// INSPECTION_CLASS: org.jetbrains.kotlin.idea.inspections.CanSealedSubClassBeObjectInspection
@@ -0,0 +1,47 @@
sealed class Sealed {
open class OpenSubSealedNestedNoChild() : Sealed()
open class SubSealedNestedWithChild : Sealed()
class SubSealedNestedChild() : SubSealedNestedWithChild()
final class FinalSubSealedNested() : Sealed()
class SubSealedNested() : Sealed()
}
class SubSealedParentheses() : Sealed()
class SubSealedNoParentheses : Sealed()
open class SubSealedWithChild : Sealed()
class SubSealedChild : SubSealedWithChild()
class SubSealedParameters(val value : String) : Sealed()
object SubSealedObject() : Sealed()
class SubSealedObjectWithPrimaryConstructor(parameter: String) : Sealed()
class SubSealedObjectWithSecondaryConstructor() : Sealed() {
constructor(parameter: String): this()
}
object AlreadyObject: Sealed()
class SubSealedWithCompanion: Sealed() {
companion object
}
class SubSealedWithInner: Sealed() {
inner class Inner
}
class SubSealedWithNested: Sealed() {
class Nested
}
class SubSealedWithFunction: Sealed() {
fun internalFunction() { }
}
@@ -0,0 +1 @@
org.jetbrains.kotlin.idea.inspections.CanSealedSubClassBeObjectInspection
@@ -0,0 +1,3 @@
sealed class Sealed
private <caret>class SubSealed : Sealed()
@@ -0,0 +1,3 @@
sealed class Sealed
private object SubSealed : Sealed()
@@ -0,0 +1,3 @@
sealed class Sealed
<caret>class SubSealed() : Sealed()
@@ -0,0 +1,3 @@
sealed class Sealed
object SubSealed : Sealed()
@@ -0,0 +1,3 @@
sealed class Sealed
<caret>class SubSealed : Sealed()
@@ -0,0 +1,3 @@
sealed class Sealed
object SubSealed : Sealed()
@@ -0,0 +1,11 @@
import seal.*
class JavaSealedTest {
public void testNesting() {
new SubSealed.Nested();
Supplier<SubSealed.Nested> nestedSupplier = SubSealed.Nested::new;
SubSealed.INSTANCE.internalFunction();
Runnable noArgFunction = SubSealed.INSTANCE::internalFunction;
}
}
@@ -0,0 +1,16 @@
import seal.*
class KotlinSealedTest {
fun testSeal() {
val internalFunction = SubSealed::internalFunction
val nestedClass = SubSealed.Nested()
SubSealed.Nested()
SubSealed::Nested
SubSealed.internalFunction()
SubSealed::internalFunction
SubSealed::internalFunction
}
}
@@ -0,0 +1,9 @@
package seal
sealed class Sealed
object SubSealed : Sealed() {
class Nested
fun internalFunction() {}
}
@@ -0,0 +1,11 @@
import seal.*
class JavaSealedTest {
public void testNesting() {
new SubSealed.Nested();
Supplier<SubSealed.Nested> nestedSupplier = SubSealed.Nested::new;
new SubSealed().internalFunction();
Runnable noArgFunction = new SubSealed()::internalFunction;
}
}
@@ -0,0 +1,16 @@
import seal.*
class KotlinSealedTest {
fun testSeal() {
val internalFunction = SubSealed()::internalFunction
val nestedClass = SubSealed.Nested()
SubSealed.Nested()
SubSealed::Nested
SubSealed().internalFunction()
SubSealed()::internalFunction
SubSealed::internalFunction
}
}
@@ -0,0 +1,9 @@
package seal
sealed class Sealed
<caret>class SubSealed : Sealed() {
class Nested
fun internalFunction() {}
}
@@ -0,0 +1,5 @@
{
"mainFile": "Seal.kt",
"inspectionClass": "org.jetbrains.kotlin.idea.inspections.CanSealedSubClassBeObjectInspection",
"fix": "Convert Sealed Sub-class to Object"
}
@@ -0,0 +1,13 @@
import seal.*
class JavaSealedTest {
Sealed sealedInsideClass = SubSealed.INSTANCE;
public void testSeal() {
Sealed sealedInsideMethod = SubSealed.INSTANCE;
SubSealed.INSTANCE.toString();
// Will be deleted because Java doesn't allow a expression to be used as a statement
}
}
@@ -0,0 +1,13 @@
import seal.*
val sealedOutsideClass = SubSealed
class KotlinSealedTest {
val sealedInsideClass = SubSealed
fun testSeal() {
val sealedInsideMethod = SubSealed
SubSealed
}
}
@@ -0,0 +1,5 @@
package seal
sealed class Sealed
object SubSealed : Sealed()
@@ -0,0 +1,14 @@
import seal.*
class JavaSealedTest {
Sealed sealedInsideClass = new SubSealed();
public void testSeal() {
Sealed sealedInsideMethod = new SubSealed();
new SubSealed().toString();
// Will be deleted because Java doesn't allow a expression to be used as a statement
new SubSealed();
}
}
@@ -0,0 +1,13 @@
import seal.*
val sealedOutsideClass = SubSealed()
class KotlinSealedTest {
val sealedInsideClass = SubSealed()
fun testSeal() {
val sealedInsideMethod = SubSealed()
SubSealed()
}
}
@@ -0,0 +1,5 @@
package seal
sealed class Sealed
<caret>class SubSealed : Sealed()
@@ -0,0 +1,5 @@
{
"mainFile": "Seal.kt",
"inspectionClass": "org.jetbrains.kotlin.idea.inspections.CanSealedSubClassBeObjectInspection",
"fix": "Convert Sealed Sub-class to Object"
}