"Redundant qualifier name": fix false positive with inner class as constructor parameter for outer
#KT-33123 Fixed
This commit is contained in:
committed by
Dmitry Gridin
parent
bc66834c3c
commit
bdc04547cc
+7
@@ -9,6 +9,7 @@ import com.intellij.codeInspection.*
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.util.TextRange
|
||||
import com.intellij.psi.PsiElementVisitor
|
||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||
import org.jetbrains.kotlin.idea.analysis.analyzeAsReplacement
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||
@@ -16,6 +17,7 @@ import org.jetbrains.kotlin.idea.core.ShortenReferences
|
||||
import org.jetbrains.kotlin.idea.core.compareDescriptors
|
||||
import org.jetbrains.kotlin.idea.imports.importableFqName
|
||||
import org.jetbrains.kotlin.idea.references.mainReference
|
||||
import org.jetbrains.kotlin.idea.search.usagesSearch.descriptor
|
||||
import org.jetbrains.kotlin.idea.util.getResolutionScope
|
||||
import org.jetbrains.kotlin.idea.util.hasNotReceiver
|
||||
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
||||
@@ -128,6 +130,11 @@ private fun KtUserType.applicableExpression(context: BindingContext): KtUserType
|
||||
val referenceExpression = referenceExpression as? KtNameReferenceExpression ?: return null
|
||||
val originalDescriptor = referenceExpression.mainReference.resolveToDescriptors(context).firstOrNull() ?: return null
|
||||
|
||||
if (originalDescriptor is ClassDescriptor
|
||||
&& originalDescriptor.isInner
|
||||
&& (originalDescriptor.containingDeclaration as? ClassDescriptor)?.typeConstructor != null
|
||||
) return null
|
||||
|
||||
val shortName = originalDescriptor.importableFqName?.shortName() ?: return null
|
||||
val scope = referenceExpression.getResolutionScope(context) ?: return null
|
||||
val descriptor = scope.findFirstClassifierWithDeprecationStatus(shortName, NoLookupLocation.FROM_IDE)?.descriptor ?: return null
|
||||
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
// PROBLEM: none
|
||||
class Outer<T>(val inner: <caret>Outer<T>.Inner? = null) {
|
||||
inner class Inner
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
// PROBLEM: none
|
||||
interface Inv<X>
|
||||
|
||||
class Outer<E> {
|
||||
inner class Inner
|
||||
|
||||
class Nested : Inv<<caret>Outer<String>.Inner>
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
// PROBLEM: none
|
||||
class Outer<E> {
|
||||
inner class Inner
|
||||
|
||||
class Nested {
|
||||
fun bar(x: <caret>Outer<String>.Inner) {}
|
||||
}
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
// PROBLEM: none
|
||||
class Outer<T>() {
|
||||
inner class Inner
|
||||
|
||||
fun test(inner: <caret>Outer<T>.Inner?) {
|
||||
}
|
||||
}
|
||||
+20
@@ -8464,6 +8464,26 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest {
|
||||
runTest("idea/testData/inspectionsLocal/removeRedundantQualifierName/notApplicableExpression4.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("notApplicableInnerClassInGenericOuterClass.kt")
|
||||
public void testNotApplicableInnerClassInGenericOuterClass() throws Exception {
|
||||
runTest("idea/testData/inspectionsLocal/removeRedundantQualifierName/notApplicableInnerClassInGenericOuterClass.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("notApplicableInnerClassInGenericOuterClass2.kt")
|
||||
public void testNotApplicableInnerClassInGenericOuterClass2() throws Exception {
|
||||
runTest("idea/testData/inspectionsLocal/removeRedundantQualifierName/notApplicableInnerClassInGenericOuterClass2.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("notApplicableInnerClassInGenericOuterClass3.kt")
|
||||
public void testNotApplicableInnerClassInGenericOuterClass3() throws Exception {
|
||||
runTest("idea/testData/inspectionsLocal/removeRedundantQualifierName/notApplicableInnerClassInGenericOuterClass3.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("notApplicableInnerClassInGenericOuterClass4.kt")
|
||||
public void testNotApplicableInnerClassInGenericOuterClass4() throws Exception {
|
||||
runTest("idea/testData/inspectionsLocal/removeRedundantQualifierName/notApplicableInnerClassInGenericOuterClass4.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("notApplicableLocalFun.kt")
|
||||
public void testNotApplicableLocalFun() throws Exception {
|
||||
runTest("idea/testData/inspectionsLocal/removeRedundantQualifierName/notApplicableLocalFun.kt");
|
||||
|
||||
Reference in New Issue
Block a user