"Redundant setter parameter type" range includes whole parameter declaration #KT-19648 Fixed (#1267)
This commit is contained in:
committed by
Dmitry Jemerov
parent
e3b7f6d698
commit
367b9f6664
+5
-6
@@ -30,12 +30,11 @@ class RemoveSetterParameterTypeInspection : AbstractKotlinInspection() {
|
|||||||
override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean): PsiElementVisitor {
|
override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean): PsiElementVisitor {
|
||||||
return object : KtVisitorVoid() {
|
return object : KtVisitorVoid() {
|
||||||
override fun visitDeclaration(dcl: KtDeclaration) {
|
override fun visitDeclaration(dcl: KtDeclaration) {
|
||||||
if (dcl is KtParameter && dcl.typeReference != null && dcl.isSetterParameter) {
|
val typeReference = (dcl as? KtParameter)?.takeIf { it.isSetterParameter }?.typeReference ?: return
|
||||||
holder.registerProblem(dcl,
|
holder.registerProblem(typeReference,
|
||||||
"Redundant setter parameter type",
|
"Redundant setter parameter type",
|
||||||
ProblemHighlightType.LIKE_UNUSED_SYMBOL,
|
ProblemHighlightType.LIKE_UNUSED_SYMBOL,
|
||||||
IntentionWrapper(RemoveExplicitTypeIntention(), dcl.containingKtFile))
|
IntentionWrapper(RemoveExplicitTypeIntention(), dcl.containingKtFile))
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,22 +41,23 @@ class RemoveExplicitTypeIntention : SelfTargetingRangeIntention<KtCallableDeclar
|
|||||||
companion object {
|
companion object {
|
||||||
fun getRange(element: KtCallableDeclaration): TextRange? {
|
fun getRange(element: KtCallableDeclaration): TextRange? {
|
||||||
if (element.containingFile is KtCodeFragment) return null
|
if (element.containingFile is KtCodeFragment) return null
|
||||||
if (element.typeReference == null) return null
|
val typeReference = element.typeReference ?: return null
|
||||||
|
|
||||||
if (element is KtParameter && (element.isLoopParameter || element.isSetterParameter)) {
|
if (element is KtParameter) {
|
||||||
return element.textRange
|
if (element.isLoopParameter) return element.textRange
|
||||||
|
if (element.isSetterParameter) return typeReference.textRange
|
||||||
}
|
}
|
||||||
|
|
||||||
val initializer = (element as? KtDeclarationWithInitializer)?.initializer
|
val initializer = (element as? KtDeclarationWithInitializer)?.initializer
|
||||||
if (element !is KtProperty && element !is KtNamedFunction) return null
|
if (element !is KtProperty && element !is KtNamedFunction) return null
|
||||||
(element as? KtNamedFunction)?.let {
|
(element as? KtNamedFunction)?.let {
|
||||||
if (it.hasBlockBody() && (element.descriptor as? FunctionDescriptor)?.returnType?.isUnit()?.not() ?: true) return null
|
if (it.hasBlockBody() && (element.descriptor as? FunctionDescriptor)?.returnType?.isUnit()?.not() != false) return null
|
||||||
}
|
}
|
||||||
|
|
||||||
return when {
|
return when {
|
||||||
initializer != null -> TextRange(element.startOffset, initializer.startOffset - 1)
|
initializer != null -> TextRange(element.startOffset, initializer.startOffset - 1)
|
||||||
element is KtProperty && element.getter != null -> TextRange(element.startOffset, element.typeReference!!.endOffset)
|
element is KtProperty && element.getter != null -> TextRange(element.startOffset, typeReference.endOffset)
|
||||||
element is KtNamedFunction -> TextRange(element.startOffset, element.typeReference!!.endOffset)
|
element is KtNamedFunction -> TextRange(element.startOffset, typeReference.endOffset)
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
// IS_APPLICABLE: false
|
||||||
|
var x: String = " "
|
||||||
|
set(<caret>param: String) {
|
||||||
|
field = "$param "
|
||||||
|
}
|
||||||
@@ -12701,6 +12701,12 @@ public class IntentionTestGenerated extends AbstractIntentionTest {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("notOnSetterParameter.kt")
|
||||||
|
public void testNotOnSetterParameter() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/removeExplicitType/notOnSetterParameter.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("onOverride.kt")
|
@TestMetadata("onOverride.kt")
|
||||||
public void testOnOverride() throws Exception {
|
public void testOnOverride() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/removeExplicitType/onOverride.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/removeExplicitType/onOverride.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user