Java-compatible "Copy Reference" action for Kotlin

#KT-13140 Fixed
This commit is contained in:
Dmitry Jemerov
2016-08-25 19:40:23 +02:00
parent cbb2e5c379
commit 39ab1e985a
@@ -16,34 +16,29 @@
package org.jetbrains.kotlin.idea.actions package org.jetbrains.kotlin.idea.actions
import com.intellij.ide.actions.JavaQualifiedNameProvider
import com.intellij.ide.actions.QualifiedNameProvider import com.intellij.ide.actions.QualifiedNameProvider
import com.intellij.psi.PsiElement
import com.intellij.openapi.project.Project
import com.intellij.openapi.editor.Editor import com.intellij.openapi.editor.Editor
import org.jetbrains.kotlin.psi.KtProperty import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.psi.KtNamedFunction import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.psi.KtDeclaration import com.intellij.psi.PsiMethod
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor import org.jetbrains.kotlin.asJava.LightClassUtil
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtClassOrObject
import org.jetbrains.kotlin.psi.KtNamedFunction
import org.jetbrains.kotlin.psi.KtProperty
class KotlinQualifiedNameProvider: QualifiedNameProvider { class KotlinQualifiedNameProvider: QualifiedNameProvider {
override fun adjustElementToCopy(element: PsiElement?) = null override fun adjustElementToCopy(element: PsiElement?) = null
override fun getQualifiedName(element: PsiElement?): String? { override fun getQualifiedName(element: PsiElement?) = when(element) {
when (element) { is KtClassOrObject -> element.fqName?.asString()
is KtClassOrObject -> return element.fqName?.asString() is KtNamedFunction -> getJavaQualifiedName(LightClassUtil.getLightClassMethod(element))
is KtNamedFunction, is KtProperty -> { is KtProperty -> getJavaQualifiedName(LightClassUtil.getLightClassPropertyMethods(element).getter)
val descriptor = (element as KtDeclaration).resolveToDescriptor() else -> null
val fqNameUnsafe = DescriptorUtils.getFqName(descriptor)
if (fqNameUnsafe.isSafe) {
return fqNameUnsafe.asString()
}
}
}
return null
} }
private fun getJavaQualifiedName(method: PsiMethod?) = method?.let { JavaQualifiedNameProvider().getQualifiedName(method) }
override fun qualifiedNameToElement(fqn: String?, project: Project?) = null override fun qualifiedNameToElement(fqn: String?, project: Project?) = null
override fun insertQualifiedName(fqn: String?, element: PsiElement?, editor: Editor?, project: Project?) { override fun insertQualifiedName(fqn: String?, element: PsiElement?, editor: Editor?, project: Project?) {