From 0f3971323f6b512d83734509cca44f6b9c2538be Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Fri, 13 Feb 2015 17:53:27 +0300 Subject: [PATCH] Go to Declaration does not work on usage of constant from class object in Java (KT-6172) #KT-6172 Fixed --- .../codegen/ImplementationBodyCodegen.java | 3 ++- .../kotlinClassObjectPropertyUsage.0.kt | 11 +++++++++++ .../kotlinClassObjectPropertyUsage.1.java | 9 +++++++++ .../kotlinClassObjectPropertyUsage.results.txt | 2 ++ .../ClassObjectStaticField.java | 9 +++++++++ .../referenceInJava/PlatformStaticFun.java | 9 +++++++++ .../resolve/referenceInJava/dependencies.kt | 18 ++++++++++++++++++ .../findUsages/JetFindUsagesTestGenerated.java | 6 ++++++ .../ReferenceResolveInJavaTestGenerated.java | 12 ++++++++++++ 9 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 idea/testData/findUsages/kotlin/findPropertyUsages/kotlinClassObjectPropertyUsage.0.kt create mode 100644 idea/testData/findUsages/kotlin/findPropertyUsages/kotlinClassObjectPropertyUsage.1.java create mode 100644 idea/testData/findUsages/kotlin/findPropertyUsages/kotlinClassObjectPropertyUsage.results.txt create mode 100644 idea/testData/resolve/referenceInJava/ClassObjectStaticField.java create mode 100644 idea/testData/resolve/referenceInJava/PlatformStaticFun.java diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java index b7235b9b8ed..34a76003069 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java @@ -1001,7 +1001,8 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { PropertyDescriptor property = info.descriptor; Type type = typeMapper.mapType(property); - FieldVisitor fv = v.newField(OtherOrigin(property), ACC_STATIC | ACC_FINAL | ACC_PUBLIC, context.getFieldName(property, false), + FieldVisitor fv = v.newField(Synthetic(DescriptorToSourceUtils.descriptorToDeclaration(property), property), + ACC_STATIC | ACC_FINAL | ACC_PUBLIC, context.getFieldName(property, false), type.getDescriptor(), typeMapper.mapFieldSignature(property.getType()), info.defaultValue); diff --git a/idea/testData/findUsages/kotlin/findPropertyUsages/kotlinClassObjectPropertyUsage.0.kt b/idea/testData/findUsages/kotlin/findPropertyUsages/kotlinClassObjectPropertyUsage.0.kt new file mode 100644 index 00000000000..61691726ba4 --- /dev/null +++ b/idea/testData/findUsages/kotlin/findPropertyUsages/kotlinClassObjectPropertyUsage.0.kt @@ -0,0 +1,11 @@ +// PSI_ELEMENT: org.jetbrains.kotlin.psi.JetProperty +// OPTIONS: usages +package server + +trait Some { + class object { + val XX = 1 + } +} + +val a = Some.XX \ No newline at end of file diff --git a/idea/testData/findUsages/kotlin/findPropertyUsages/kotlinClassObjectPropertyUsage.1.java b/idea/testData/findUsages/kotlin/findPropertyUsages/kotlinClassObjectPropertyUsage.1.java new file mode 100644 index 00000000000..e15ad5599bb --- /dev/null +++ b/idea/testData/findUsages/kotlin/findPropertyUsages/kotlinClassObjectPropertyUsage.1.java @@ -0,0 +1,9 @@ +package client; + +import server.*; + +class Client { + void fooBar() { + int i = Some.XX; + } +} \ No newline at end of file diff --git a/idea/testData/findUsages/kotlin/findPropertyUsages/kotlinClassObjectPropertyUsage.results.txt b/idea/testData/findUsages/kotlin/findPropertyUsages/kotlinClassObjectPropertyUsage.results.txt new file mode 100644 index 00000000000..50cfc6761d7 --- /dev/null +++ b/idea/testData/findUsages/kotlin/findPropertyUsages/kotlinClassObjectPropertyUsage.results.txt @@ -0,0 +1,2 @@ +Unclassified usage (7: 22) int i = Some.XX; +Value read (11: 14) val a = Some.XX \ No newline at end of file diff --git a/idea/testData/resolve/referenceInJava/ClassObjectStaticField.java b/idea/testData/resolve/referenceInJava/ClassObjectStaticField.java new file mode 100644 index 00000000000..05b96c2ad8c --- /dev/null +++ b/idea/testData/resolve/referenceInJava/ClassObjectStaticField.java @@ -0,0 +1,9 @@ +import k.StaticFieldInClassObjectInTrait; + +public class ClassObjectField { + public static void foo() { + Object object = StaticFieldInClassObjectInTrait.XX; + } +} + +// REF: (k.StaticFieldInClassObjectInTrait).XX \ No newline at end of file diff --git a/idea/testData/resolve/referenceInJava/PlatformStaticFun.java b/idea/testData/resolve/referenceInJava/PlatformStaticFun.java new file mode 100644 index 00000000000..e10f6d02c23 --- /dev/null +++ b/idea/testData/resolve/referenceInJava/PlatformStaticFun.java @@ -0,0 +1,9 @@ +import k.PlatformStaticFun; + +public class TestPlatformStaticFun { + public static void foo() { + PlatformStaticFun.test(); + } +} + +// REF: (in k.PlatformStaticFun).test() \ No newline at end of file diff --git a/idea/testData/resolve/referenceInJava/dependencies.kt b/idea/testData/resolve/referenceInJava/dependencies.kt index a0c7d3716f1..65894cf61ae 100644 --- a/idea/testData/resolve/referenceInJava/dependencies.kt +++ b/idea/testData/resolve/referenceInJava/dependencies.kt @@ -1,5 +1,7 @@ package k +import kotlin.platform.platformStatic + public class Class() { public val prop: Int = 0 fun function() = 1 @@ -21,4 +23,20 @@ public class ClassWithClassObject { public object KotlinObject { fun f() = 1 +} + +public trait StaticFieldInClassObjectInTrait { + class object { + public val XX: String = "xx" + } +} + +object PlatformStaticFun { + platformStatic + fun test() { + } +} + +trait TraitNoImpl { + fun foo() } \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/findUsages/JetFindUsagesTestGenerated.java b/idea/tests/org/jetbrains/kotlin/findUsages/JetFindUsagesTestGenerated.java index 4269db51398..e4357c65ff4 100644 --- a/idea/tests/org/jetbrains/kotlin/findUsages/JetFindUsagesTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/findUsages/JetFindUsagesTestGenerated.java @@ -696,6 +696,12 @@ public class JetFindUsagesTestGenerated extends AbstractJetFindUsagesTest { doTest(fileName); } + @TestMetadata("kotlinClassObjectPropertyUsage.0.kt") + public void testKotlinClassObjectPropertyUsage() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/findUsages/kotlin/findPropertyUsages/kotlinClassObjectPropertyUsage.0.kt"); + doTest(fileName); + } + @TestMetadata("kotlinLocalPropertyUsages1.0.kt") public void testKotlinLocalPropertyUsages1() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/findUsages/kotlin/findPropertyUsages/kotlinLocalPropertyUsages1.0.kt"); diff --git a/idea/tests/org/jetbrains/kotlin/idea/resolve/ReferenceResolveInJavaTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/resolve/ReferenceResolveInJavaTestGenerated.java index e413a5b67a7..c2b062f967b 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/resolve/ReferenceResolveInJavaTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/resolve/ReferenceResolveInJavaTestGenerated.java @@ -48,6 +48,12 @@ public class ReferenceResolveInJavaTestGenerated extends AbstractReferenceResolv doTest(fileName); } + @TestMetadata("ClassObjectStaticField.java") + public void testClassObjectStaticField() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/resolve/referenceInJava/ClassObjectStaticField.java"); + doTest(fileName); + } + @TestMetadata("Constructor.java") public void testConstructor() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/resolve/referenceInJava/Constructor.java"); @@ -83,4 +89,10 @@ public class ReferenceResolveInJavaTestGenerated extends AbstractReferenceResolv String fileName = JetTestUtils.navigationMetadata("idea/testData/resolve/referenceInJava/PackageFacade.java"); doTest(fileName); } + + @TestMetadata("PlatformStaticFun.java") + public void testPlatformStaticFun() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/resolve/referenceInJava/PlatformStaticFun.java"); + doTest(fileName); + } }