KT-7484 Companion object is marked unused if it's only usages are statically imported from Java

#KT-7484 fixed
This commit is contained in:
Evgeny Gerashchenko
2015-07-10 17:30:04 +03:00
parent 3a4010503e
commit da4be8a0f5
5 changed files with 30 additions and 12 deletions
@@ -24,8 +24,6 @@ import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
import org.jetbrains.kotlin.kdoc.psi.impl.KDocName
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
import org.jetbrains.kotlin.psi.psiUtil.getQualifiedElementSelector
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstance
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
import org.jetbrains.kotlin.utils.emptyOrSingletonList
@@ -90,15 +88,14 @@ public fun PsiReference.matchesTarget(candidateTarget: PsiElement): Boolean {
}
if ((parent as? PsiNewExpression)?.resolveConstructor()?.unwrapped == unwrappedCandidate) return true
}
if (this is PsiReferenceExpression && candidateTarget is JetObjectDeclaration && unwrappedTargets.size() == 1) {
if (this is PsiJavaCodeReferenceElement && candidateTarget is JetObjectDeclaration && unwrappedTargets.size() == 1) {
val referredClass = unwrappedTargets.first()
if (referredClass is JetClass && candidateTarget in referredClass.getCompanionObjects()) {
val parentReference = getParent().getReference()
if (parentReference != null) {
return parentReference.unwrappedTargets.any {
(it is JetProperty || it is JetNamedFunction) && it.getParent()?.getParent() == candidateTarget
}
}
if (getParent() is PsiImportStaticStatement) return true
return getParent().getReference()?.unwrappedTargets?.any {
(it is JetProperty || it is JetNamedFunction) && it.getParent()?.getParent() == candidateTarget
} ?: false
}
}
return false
@@ -1,3 +1,5 @@
import static Foo.*;
class JavaUsage {
public static void main(String[] args) {
System.out.println(Foo.CONST);
@@ -1,3 +1,4 @@
Class static member access (3: 28) System.out.println(Foo.CONST);
Class static member access (4: 9) Foo.s();
Unclassified usage (5: 13) Foo.Companion.f();
Class static member access (5: 28) System.out.println(Foo.CONST);
Class static member access (6: 9) Foo.s();
Unclassified usage (1: 15) import static Foo.*;
Unclassified usage (7: 13) Foo.Companion.f();
@@ -0,0 +1,8 @@
import static companionObjectWithStatics.Foo.*
class JavaUsage {
public static void main(String[] args) {
System.out.println(CONST + CONST);
foo()
}
}
@@ -0,0 +1,10 @@
package companionObjectWithStatics
class Foo {
companion object {
platformStatic fun foo() {
}
val CONST = 111
}
}