From 0fd4cdb086941a27a74b58e419478fdd9abbdc67 Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Mon, 30 Oct 2017 06:49:08 +0300 Subject: [PATCH] Fix false positive for "redundant super" in data class #KT-20981 Fixed --- .../idea/inspections/KotlinRedundantOverrideInspection.kt | 7 ++----- .../inspectionsLocal/redundantOverride/dataClass.kt | 4 ++++ .../idea/inspections/LocalInspectionTestGenerated.java | 6 ++++++ 3 files changed, 12 insertions(+), 5 deletions(-) create mode 100644 idea/testData/inspectionsLocal/redundantOverride/dataClass.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/KotlinRedundantOverrideInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/KotlinRedundantOverrideInspection.kt index a339d3a41ae..298b4cefe51 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/KotlinRedundantOverrideInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/KotlinRedundantOverrideInspection.kt @@ -22,13 +22,9 @@ import com.intellij.openapi.util.TextRange import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject -import org.jetbrains.kotlin.psi.psiUtil.endOffset -import org.jetbrains.kotlin.psi.psiUtil.getCallNameExpression -import org.jetbrains.kotlin.psi.psiUtil.startOffset +import org.jetbrains.kotlin.psi.psiUtil.* import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall -import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.typeUtil.isSubtypeOf class KotlinRedundantOverrideInspection : AbstractKotlinInspection(), CleanupLocalInspectionTool { @@ -41,6 +37,7 @@ class KotlinRedundantOverrideInspection : AbstractKotlinInspection(), CleanupLoc if (!modifierList.hasModifier(KtTokens.OVERRIDE_KEYWORD)) return if (MODIFIER_EXCLUDE_OVERRIDE.any { modifierList.hasModifier(it) }) return if (function.annotationEntries.isNotEmpty()) return + if (function.containingClass()?.isData() == true) return val bodyExpression = function.bodyExpression ?: return val qualifiedExpression = when (bodyExpression) { diff --git a/idea/testData/inspectionsLocal/redundantOverride/dataClass.kt b/idea/testData/inspectionsLocal/redundantOverride/dataClass.kt new file mode 100644 index 00000000000..b5303f28425 --- /dev/null +++ b/idea/testData/inspectionsLocal/redundantOverride/dataClass.kt @@ -0,0 +1,4 @@ +// PROBLEM: none +data class My(val x: Int, val y: String) { + override fun hashCode() = super.hashCode() +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java index 92b35229ec5..a694245c1b4 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java @@ -1493,6 +1493,12 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest { doTest(fileName); } + @TestMetadata("dataClass.kt") + public void testDataClass() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/inspectionsLocal/redundantOverride/dataClass.kt"); + doTest(fileName); + } + @TestMetadata("delegatedMemberHidesSuperTypeOverride.kt") public void testDelegatedMemberHidesSuperTypeOverride() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/inspectionsLocal/redundantOverride/delegatedMemberHidesSuperTypeOverride.kt");