Navigation to binaries: support navigation to type alias constructors

#KT-13479 Fixed
This commit is contained in:
Pavel V. Talanov
2016-09-26 18:34:19 +03:00
parent 24d805d2c1
commit 827b56e277
5 changed files with 11 additions and 3 deletions
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.types.Variance
interface TypeAliasConstructorDescriptor : ConstructorDescriptor {
val underlyingConstructorDescriptor: ClassConstructorDescriptor
val typeAliasDescriptor: TypeAliasDescriptor
override fun getContainingDeclaration(): TypeAliasDescriptor
@@ -45,7 +46,7 @@ interface TypeAliasConstructorDescriptor : ConstructorDescriptor {
}
class TypeAliasConstructorDescriptorImpl private constructor(
val typeAliasDescriptor: TypeAliasDescriptor,
override val typeAliasDescriptor: TypeAliasDescriptor,
override val underlyingConstructorDescriptor: ClassConstructorDescriptor,
original: TypeAliasConstructorDescriptor?,
annotations: Annotations,
@@ -20,6 +20,7 @@ import com.intellij.openapi.project.Project
import com.intellij.psi.search.EverythingGlobalScope
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.impl.TypeAliasConstructorDescriptor
import org.jetbrains.kotlin.idea.decompiler.KtDecompiledFile
import org.jetbrains.kotlin.idea.decompiler.textBuilder.DecompiledTextIndexer
import org.jetbrains.kotlin.idea.stubindex.*
@@ -81,6 +82,7 @@ private fun findCandidateDeclarationsInIndex(
}
val topLevelDeclaration = DescriptorUtils.getParentOfType(referencedDescriptor, PropertyDescriptor::class.java, false)
?: DescriptorUtils.getParentOfType(referencedDescriptor, TypeAliasConstructorDescriptor::class.java, false)?.typeAliasDescriptor
?: DescriptorUtils.getParentOfType(referencedDescriptor, FunctionDescriptor::class.java, false)
?: DescriptorUtils.getParentOfType(referencedDescriptor, TypeAliasDescriptor::class.java, false)
?: return emptyList()
@@ -109,6 +111,10 @@ object ByDescriptorIndexer : DecompiledTextIndexer<String> {
internal fun getDeclarationForDescriptor(descriptor: DeclarationDescriptor, file: KtDecompiledFile): KtDeclaration? {
val original = descriptor.original
if (original is TypeAliasConstructorDescriptor) {
return getDeclarationForDescriptor(original.typeAliasDescriptor, file)
}
if (original is ValueParameterDescriptor) {
val callable = original.containingDeclaration
val callableDeclaration = getDeclarationForDescriptor(callable, file) as? KtCallableDeclaration ?: return null
@@ -1,2 +1,2 @@
MainKt.class
public typealias <1>SimpleClassAlias = testData.libraries.SimpleClass
public typealias <1><2>SimpleClassAlias = testData.libraries.SimpleClass
@@ -1,4 +1,5 @@
import testData.libraries.*
fun foo(c: SimpleClassAlias) {
val s = SimpleClassAlias()
}
@@ -1,2 +1,2 @@
main.kt
typealias <1>SimpleClassAlias = SimpleClass
typealias <1><2>SimpleClassAlias = SimpleClass