From 97a95d6a6a28a2577608df552c03a8de91a490e9 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Wed, 27 Aug 2014 20:29:02 +0400 Subject: [PATCH] Fix "Cannot resolve method" error in Java for methods from trait --- .../jet/asJava/KotlinLightMethodForDeclaration.kt | 7 +++++-- .../kotlinAndJavaChecker/ImplementedMethodsFromTraits.java | 6 ++++++ .../kotlinAndJavaChecker/ImplementedMethodsFromTraits.kt | 6 ++++++ .../jetbrains/jet/checkers/KotlinAndJavaCheckerTest.java | 4 ++++ 4 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 idea/testData/kotlinAndJavaChecker/ImplementedMethodsFromTraits.java create mode 100644 idea/testData/kotlinAndJavaChecker/ImplementedMethodsFromTraits.kt diff --git a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinLightMethodForDeclaration.kt b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinLightMethodForDeclaration.kt index 152147f86dd..8ba92afb914 100644 --- a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinLightMethodForDeclaration.kt +++ b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinLightMethodForDeclaration.kt @@ -112,7 +112,10 @@ public class KotlinLightMethodForDeclaration( override fun getUseScope(): SearchScope = origin.getUseScope() override fun equals(other: Any?): Boolean = - other is KotlinLightMethodForDeclaration && getName() == other.getName() && origin == other.origin + other is KotlinLightMethodForDeclaration && + getName() == other.getName() && + origin == other.origin && + getContainingClass() == other.getContainingClass() - override fun hashCode(): Int = getName().hashCode() * 31 + origin.hashCode() + override fun hashCode(): Int = (getName().hashCode() * 31 + origin.hashCode()) * 31 + getContainingClass()!!.hashCode() } diff --git a/idea/testData/kotlinAndJavaChecker/ImplementedMethodsFromTraits.java b/idea/testData/kotlinAndJavaChecker/ImplementedMethodsFromTraits.java new file mode 100644 index 00000000000..4bf6713f25c --- /dev/null +++ b/idea/testData/kotlinAndJavaChecker/ImplementedMethodsFromTraits.java @@ -0,0 +1,6 @@ +class C { + public C(B b, A a) { + a.foo(); + b.foo(); + } +} diff --git a/idea/testData/kotlinAndJavaChecker/ImplementedMethodsFromTraits.kt b/idea/testData/kotlinAndJavaChecker/ImplementedMethodsFromTraits.kt new file mode 100644 index 00000000000..3b10d43d742 --- /dev/null +++ b/idea/testData/kotlinAndJavaChecker/ImplementedMethodsFromTraits.kt @@ -0,0 +1,6 @@ +public trait A { + public fun foo() {} +} + +public class B: A { +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/checkers/KotlinAndJavaCheckerTest.java b/idea/tests/org/jetbrains/jet/checkers/KotlinAndJavaCheckerTest.java index bb25b67789c..909c6fd9fe0 100644 --- a/idea/tests/org/jetbrains/jet/checkers/KotlinAndJavaCheckerTest.java +++ b/idea/tests/org/jetbrains/jet/checkers/KotlinAndJavaCheckerTest.java @@ -69,4 +69,8 @@ public class KotlinAndJavaCheckerTest extends KotlinDaemonAnalyzerTestCase { public void testUseKotlinSubclassesOfMappedTypes() throws Exception { doTest(true, true, "UseKotlinSubclassesOfMappedTypes.java", "UseKotlinSubclassesOfMappedTypes.kt"); } + + public void testImplementedMethodsFromTraits() throws Exception { + doTest(true, true, "ImplementedMethodsFromTraits.java", "ImplementedMethodsFromTraits.kt"); + } }