"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 {
|
||||
return object : KtVisitorVoid() {
|
||||
override fun visitDeclaration(dcl: KtDeclaration) {
|
||||
if (dcl is KtParameter && dcl.typeReference != null && dcl.isSetterParameter) {
|
||||
holder.registerProblem(dcl,
|
||||
"Redundant setter parameter type",
|
||||
ProblemHighlightType.LIKE_UNUSED_SYMBOL,
|
||||
IntentionWrapper(RemoveExplicitTypeIntention(), dcl.containingKtFile))
|
||||
}
|
||||
val typeReference = (dcl as? KtParameter)?.takeIf { it.isSetterParameter }?.typeReference ?: return
|
||||
holder.registerProblem(typeReference,
|
||||
"Redundant setter parameter type",
|
||||
ProblemHighlightType.LIKE_UNUSED_SYMBOL,
|
||||
IntentionWrapper(RemoveExplicitTypeIntention(), dcl.containingKtFile))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,22 +41,23 @@ class RemoveExplicitTypeIntention : SelfTargetingRangeIntention<KtCallableDeclar
|
||||
companion object {
|
||||
fun getRange(element: KtCallableDeclaration): TextRange? {
|
||||
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)) {
|
||||
return element.textRange
|
||||
if (element is KtParameter) {
|
||||
if (element.isLoopParameter) return element.textRange
|
||||
if (element.isSetterParameter) return typeReference.textRange
|
||||
}
|
||||
|
||||
val initializer = (element as? KtDeclarationWithInitializer)?.initializer
|
||||
if (element !is KtProperty && element !is KtNamedFunction) return null
|
||||
(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 {
|
||||
initializer != null -> TextRange(element.startOffset, initializer.startOffset - 1)
|
||||
element is KtProperty && element.getter != null -> TextRange(element.startOffset, element.typeReference!!.endOffset)
|
||||
element is KtNamedFunction -> TextRange(element.startOffset, element.typeReference!!.endOffset)
|
||||
element is KtProperty && element.getter != null -> TextRange(element.startOffset, typeReference.endOffset)
|
||||
element is KtNamedFunction -> TextRange(element.startOffset, typeReference.endOffset)
|
||||
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);
|
||||
}
|
||||
|
||||
@TestMetadata("notOnSetterParameter.kt")
|
||||
public void testNotOnSetterParameter() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/removeExplicitType/notOnSetterParameter.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("onOverride.kt")
|
||||
public void testOnOverride() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/removeExplicitType/onOverride.kt");
|
||||
|
||||
Reference in New Issue
Block a user