KT-8861 Package name vs property with wrong receiver

#KT-8861 Fixed
This commit is contained in:
Stanislav Erokhin
2015-08-25 17:29:03 +03:00
parent 0883bfa615
commit abb18b7bb9
4 changed files with 42 additions and 1 deletions
@@ -120,7 +120,7 @@ public class CallExpressionResolver {
// if the expression is a receiver in a qualified expression, it should be resolved after the selector is resolved
boolean isLHSOfDot = JetPsiUtil.isLHSOfDot(nameExpression);
if (!resolutionResult.isNothing()) {
if (!resolutionResult.isNothing() && resolutionResult.getResultCode() != OverloadResolutionResults.Code.CANDIDATES_WITH_WRONG_RECEIVER) {
boolean isQualifier = isLHSOfDot && resolutionResult.isSingleResult()
&& resolutionResult.getResultingDescriptor() instanceof FakeCallableDescriptorForObject;
if (!isQualifier) {
@@ -0,0 +1,20 @@
package some
class A()
val Int.some: Int get() = 4
val Int.foo: Int get() = 4
fun Int.extFun() = 4
fun String.test() {
<!EXPRESSION_EXPECTED_PACKAGE_FOUND!>some<!>
some.A()
"".<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>some<!>
<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>foo<!>
"".<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>foo<!>
<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>extFun<!>()
"".<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>extFun<!>()
}
@@ -0,0 +1,15 @@
package
package some {
internal val kotlin.Int.foo: kotlin.Int
internal val kotlin.Int.some: kotlin.Int
internal fun kotlin.Int.extFun(): kotlin.Int
internal fun kotlin.String.test(): kotlin.Unit
internal final class A {
public constructor A()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
@@ -11637,6 +11637,12 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest {
doTest(fileName);
}
@TestMetadata("wrongReceiver.kt")
public void testWrongReceiver() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/resolve/wrongReceiver.kt");
doTest(fileName);
}
@TestMetadata("compiler/testData/diagnostics/tests/resolve/invoke")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)