FIR: correctly process accessor symbols in derived classes

This commit is contained in:
Mikhail Glukhikh
2019-11-28 17:59:35 +03:00
parent f1eb0dff1f
commit eb90bd0e89
5 changed files with 33 additions and 2 deletions
@@ -111,7 +111,7 @@ class JavaClassEnhancementScope(
) as FirAccessorSymbol ) as FirAccessorSymbol
} }
else -> { else -> {
if (original is FirPropertySymbol) return original if (original is FirPropertySymbol || original is FirAccessorSymbol) return original
error("Can't make enhancement for $original: `${firElement.render()}`") error("Can't make enhancement for $original: `${firElement.render()}`")
} }
} }
@@ -100,7 +100,7 @@ class JavaClassUseSiteMemberScope(
processor(it) processor(it)
} else { } else {
val overriddenBy = it.getOverridden(overrideCandidates) val overriddenBy = it.getOverridden(overrideCandidates)
if (overriddenBy == null && it is FirVariableSymbol<*>) { if (overriddenBy == null) {
processor(it) processor(it)
} else { } else {
NEXT NEXT
@@ -0,0 +1,18 @@
// FILE: PsiElement.java
public interface PsiElement {
PsiElement[] getChildren();
}
// FILE: XmlTag.java
public interface XmlTag extends PsiElement {
String getLocalName();
}
// FILE: test.kt
fun foo(tag: XmlTag, name: String): List<XmlTag> {
val result = tag.children.filterIsInstance<XmlTag>().filter { it.localName == name }
return result
}
@@ -0,0 +1,8 @@
FILE: test.kt
public final fun foo(tag: R|XmlTag|, name: R|kotlin/String|): R|kotlin/collections/List<XmlTag>| {
lval result: R|kotlin/collections/List<XmlTag>| = R|<local>/tag|.R|/PsiElement.children|.R|kotlin/collections/filterIsInstance|<R|XmlTag|>().R|kotlin/collections/filter|<R|XmlTag|>(<L> = filter@fun <anonymous>(it: R|XmlTag|): R|kotlin/Boolean| <kind=UNKNOWN> {
==(R|<local>/it|.R|/XmlTag.localName|, R|<local>/name|)
}
)
^foo R|<local>/result|
}
@@ -529,6 +529,11 @@ public class FirDiagnosticsWithStdlibTestGenerated extends AbstractFirDiagnostic
runTest("compiler/fir/resolve/testData/resolve/stdlib/j+k/StaticGenericMethod.kt"); runTest("compiler/fir/resolve/testData/resolve/stdlib/j+k/StaticGenericMethod.kt");
} }
@TestMetadata("SyntheticAfterFiltering.kt")
public void testSyntheticAfterFiltering() throws Exception {
runTest("compiler/fir/resolve/testData/resolve/stdlib/j+k/SyntheticAfterFiltering.kt");
}
@TestMetadata("SyntheticWithForEach.kt") @TestMetadata("SyntheticWithForEach.kt")
public void testSyntheticWithForEach() throws Exception { public void testSyntheticWithForEach() throws Exception {
runTest("compiler/fir/resolve/testData/resolve/stdlib/j+k/SyntheticWithForEach.kt"); runTest("compiler/fir/resolve/testData/resolve/stdlib/j+k/SyntheticWithForEach.kt");