"Redundant qualifier name": fix false positive with enum constant initialized with companion object field

#KT-33526 Fixed
This commit is contained in:
Toshiaki Kameyama
2019-10-04 17:31:22 +09:00
committed by Dmitry Gridin
parent 27eea882fb
commit 131567474a
3 changed files with 22 additions and 4 deletions
@@ -20,10 +20,7 @@ import org.jetbrains.kotlin.idea.util.getResolutionScope
import org.jetbrains.kotlin.idea.util.hasNotReceiver
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.endOffset
import org.jetbrains.kotlin.psi.psiUtil.getLastParentOfTypeInRowWithSelf
import org.jetbrains.kotlin.psi.psiUtil.getQualifiedElementSelector
import org.jetbrains.kotlin.psi.psiUtil.startOffset
import org.jetbrains.kotlin.psi.psiUtil.*
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.ImportedFromObjectCallableDescriptor
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
@@ -44,6 +41,13 @@ class RemoveRedundantQualifierNameInspection : AbstractKotlinInspection(), Clean
else
expressionForAnalyze
val parentEnumEntry = expressionForAnalyze.getStrictParentOfType<KtEnumEntry>()
if (parentEnumEntry != null) {
val companionObject = (expressionForAnalyze.receiverExpression.mainReference?.resolve() as? KtObjectDeclaration)
?.takeIf { it.isCompanion() }
if (companionObject?.containingClass() == parentEnumEntry.getStrictParentOfType<KtClass>()) return
}
val context = originalExpression.analyze()
val originalDescriptor = expressionForAnalyze.getQualifiedElementSelector()
@@ -0,0 +1,9 @@
// PROBLEM: none
enum class C(val i: Int) {
ONE(<caret>C.K)
;
companion object {
const val K = 1
}
}
@@ -8369,6 +8369,11 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest {
runTest("idea/testData/inspectionsLocal/removeRedundantQualifierName/notApplicableCompanion.kt");
}
@TestMetadata("notApplicableCompanionInEnumEntry.kt")
public void testNotApplicableCompanionInEnumEntry() throws Exception {
runTest("idea/testData/inspectionsLocal/removeRedundantQualifierName/notApplicableCompanionInEnumEntry.kt");
}
@TestMetadata("notApplicableCompanionOtherName.kt")
public void testNotApplicableCompanionOtherName() throws Exception {
runTest("idea/testData/inspectionsLocal/removeRedundantQualifierName/notApplicableCompanionOtherName.kt");