From ba0000dde1ffd5715453dc62c4baa32ca6aaf8be Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Mon, 8 Jun 2015 19:07:41 +0300 Subject: [PATCH] Navigation: Fix navigation to library sources for Kotlin constructors --- .../navigation/JetSourceNavigationHelper.java | 12 +++++++++++- .../navigation/decompiled/ClassWithConstructor.kt | 2 ++ idea/testData/decompiler/navigation/library/main.kt | 4 +++- .../decompiler/navigation/usercode/Constructor.kt | 4 +++- .../navigation/usercode/ExtensionProperty.kt | 2 +- 5 files changed, 20 insertions(+), 4 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/JetSourceNavigationHelper.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/JetSourceNavigationHelper.java index 6907f479c13..12254e2fe56 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/JetSourceNavigationHelper.java +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/JetSourceNavigationHelper.java @@ -340,7 +340,7 @@ public class JetSourceNavigationHelper { } @Nullable - public static JetNamedDeclaration getSourceFunction(@NotNull JetNamedFunction decompiledFunction) { + public static JetNamedDeclaration getSourceFunction(@NotNull JetFunction decompiledFunction) { return getSourcePropertyOrFunction(decompiledFunction); } @@ -452,6 +452,16 @@ public class JetSourceNavigationHelper { if (sourceParameters.size() != parameters.size()) return null; return sourceParameters.get(index); } + + @Override + public JetDeclaration visitPrimaryConstructor(@NotNull JetPrimaryConstructor constructor, Void data) { + return getSourceFunction(constructor); + } + + @Override + public JetDeclaration visitSecondaryConstructor(@NotNull JetSecondaryConstructor constructor, Void data) { + return getSourceFunction(constructor); + } } private static class LibrarySourcesScope extends GlobalSearchScope { diff --git a/idea/testData/decompiler/navigation/decompiled/ClassWithConstructor.kt b/idea/testData/decompiler/navigation/decompiled/ClassWithConstructor.kt index 4c7233f5d4e..9f36f41012d 100644 --- a/idea/testData/decompiler/navigation/decompiled/ClassWithConstructor.kt +++ b/idea/testData/decompiler/navigation/decompiled/ClassWithConstructor.kt @@ -4,5 +4,7 @@ package testData.libraries [[public final class ClassWithConstructor public constructor(a: kotlin.String, b: kotlin.Any) { + [public constructor(a: kotlin.String) { /* compiled code */ }] + [internal final val a: kotlin.String /* compiled code */] }]] diff --git a/idea/testData/decompiler/navigation/library/main.kt b/idea/testData/decompiler/navigation/library/main.kt index 38b0f29eae8..e6e07417097 100644 --- a/idea/testData/decompiler/navigation/library/main.kt +++ b/idea/testData/decompiler/navigation/library/main.kt @@ -61,7 +61,9 @@ public abstract class ClassWithAbstractAndOpenMembers { } } -public class ClassWithConstructor(val a: String, b: Any) +public class ClassWithConstructor(val a: String, b: Any) { + constructor(a: String): this(a, a) +} public fun main(args : Array) { } diff --git a/idea/testData/decompiler/navigation/usercode/Constructor.kt b/idea/testData/decompiler/navigation/usercode/Constructor.kt index 7435c4e8c5c..60cfd6cc6eb 100644 --- a/idea/testData/decompiler/navigation/usercode/Constructor.kt +++ b/idea/testData/decompiler/navigation/usercode/Constructor.kt @@ -1,6 +1,8 @@ import testData.libraries.* val x: ClassWithConstructor = ClassWithConstructor("abc", 239) +val xx: ClassWithConstructor = ClassWithConstructor("abc") // main.kt -//public class <1><2>ClassWithConstructor(val a: String, b: Any) +//public class <1><3>ClassWithConstructor<2>(val a: String, b: Any) { +// <4>constructor(a: String): this(a, a) diff --git a/idea/testData/decompiler/navigation/usercode/ExtensionProperty.kt b/idea/testData/decompiler/navigation/usercode/ExtensionProperty.kt index 56ec6aafae9..b47415e719c 100644 --- a/idea/testData/decompiler/navigation/usercode/ExtensionProperty.kt +++ b/idea/testData/decompiler/navigation/usercode/ExtensionProperty.kt @@ -17,6 +17,6 @@ fun foo() { // return this //} // -//public class <2>Pair(val first: A, val second: B) +//public class Pair<2>(val first: A, val second: B) // //public val Pair.<3>exProp : String \ No newline at end of file