diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/ExpressionsOfTypeProcessor.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/ExpressionsOfTypeProcessor.kt
index 00d1b3db72e..b7a8ddf0d30 100644
--- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/ExpressionsOfTypeProcessor.kt
+++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/ExpressionsOfTypeProcessor.kt
@@ -455,7 +455,7 @@ class ExpressionsOfTypeProcessor(
is PsiReferenceList -> { // usage in extends/implements list
if (parent.role == PsiReferenceList.Role.EXTENDS_LIST || parent.role == PsiReferenceList.Role.IMPLEMENTS_LIST) {
val psiClass = parent.parent as PsiClass
- if (!psiClass.isPrivateOrLocal()) {
+ if (!psiClass.isLocal()) { // we don't filter out private classes because we can inherit public class from private in Java
addClassToProcess(psiClass)
}
}
@@ -628,9 +628,11 @@ class ExpressionsOfTypeProcessor(
}
private fun PsiModifierListOwner.isPrivateOrLocal(): Boolean {
- return hasModifierProperty(PsiModifier.PRIVATE) || parents.any { it is PsiCodeBlock }
+ return hasModifierProperty(PsiModifier.PRIVATE) || isLocal()
}
+ private fun PsiModifierListOwner.isLocal() = parents.any { it is PsiCodeBlock }
+
private fun PsiElement.isOperatorExpensiveToSearch(): Boolean {
when (this) {
is KtFunction -> {
diff --git a/idea/testData/findUsages/kotlin/conventions/components/dataClass.1.kt b/idea/testData/findUsages/kotlin/conventions/components/dataClass.1.kt
index 6aa5aa1bbe4..8d7466460fa 100644
--- a/idea/testData/findUsages/kotlin/conventions/components/dataClass.1.kt
+++ b/idea/testData/findUsages/kotlin/conventions/components/dataClass.1.kt
@@ -24,4 +24,5 @@ fun listOfA() = listOf(A(1, "", ""))
fun test2(p1: JavaClass2, p2: JavaClass3) {
val (x1, y1) = p1[0]
val (x2, y2) = p2[0]
+ val (x3, y3) = JavaClass4.getNested()[0]
}
\ No newline at end of file
diff --git a/idea/testData/findUsages/kotlin/conventions/components/dataClass.3.java b/idea/testData/findUsages/kotlin/conventions/components/dataClass.3.java
new file mode 100644
index 00000000000..9f471457113
--- /dev/null
+++ b/idea/testData/findUsages/kotlin/conventions/components/dataClass.3.java
@@ -0,0 +1,14 @@
+import pack.A;
+
+import java.util.List;
+
+public class JavaClass4 {
+ private interface NestedPrivate extends List {
+ }
+
+ public interface NestedPublic extends NestedPrivate {
+ }
+
+ public static NestedPublic getNested() {
+ }
+}
diff --git a/idea/testData/findUsages/kotlin/conventions/components/dataClass.log b/idea/testData/findUsages/kotlin/conventions/components/dataClass.log
index 8ec6f649588..406d82fdc57 100644
--- a/idea/testData/findUsages/kotlin/conventions/components/dataClass.log
+++ b/idea/testData/findUsages/kotlin/conventions/components/dataClass.log
@@ -9,6 +9,7 @@ Checked type of x1
Checked type of x2
Checked type of x2
Checked type of x3
+Checked type of x3
Checked type of x4
Checked type of x5
Checked type of y
@@ -17,6 +18,7 @@ Checked type of y1
Checked type of y2
Checked type of y2
Checked type of y3
+Checked type of y3
Checked type of y4
Checked type of y5
Checked type of z
@@ -30,12 +32,16 @@ Resolved (x1, y1)
Resolved (x1, y1, z1)
Resolved (x2, y2)
Resolved (x2, y2, z2)
+Resolved (x3, y3)
Resolved (x3, y3, z3)
Resolved (x4, y4, z4)
Resolved (x5, y5, z5)
Searched references to JavaClass.getA() in Kotlin files
Searched references to JavaClass2
Searched references to JavaClass3
+Searched references to JavaClass4.NestedPrivate
+Searched references to JavaClass4.NestedPublic
+Searched references to JavaClass4.getNested() in Kotlin files
Searched references to a in Kotlin files
Searched references to f() in Kotlin files
Searched references to g() in Kotlin files
diff --git a/idea/testData/findUsages/kotlin/conventions/components/dataClass.results.txt b/idea/testData/findUsages/kotlin/conventions/components/dataClass.results.txt
index 87c2cbe1aed..e71b80b80f0 100644
--- a/idea/testData/findUsages/kotlin/conventions/components/dataClass.results.txt
+++ b/idea/testData/findUsages/kotlin/conventions/components/dataClass.results.txt
@@ -7,6 +7,7 @@
[dataClass.1.kt] Value read 15 val (x5, y5, z5) = javaClass.getA()[0]
[dataClass.1.kt] Value read 25 val (x1, y1) = p1[0]
[dataClass.1.kt] Value read 26 val (x2, y2) = p2[0]
+[dataClass.1.kt] Value read 27 val (x3, y3) = JavaClass4.getNested()[0]
[dataClass.1.kt] Value read 5 a.n
[dataClass.1.kt] Value read 8 val (x, y, z) = a
[dataClass.1.kt] Value read 9 val (x1, y1, z1) = f()
\ No newline at end of file