Unwrap light elements before getting FqName
This commit is contained in:
@@ -49,14 +49,11 @@ import com.intellij.psi.PsiParameterList
|
|||||||
import com.intellij.psi.PsiParameter
|
import com.intellij.psi.PsiParameter
|
||||||
import org.jetbrains.jet.lang.psi.JetQualifiedExpression
|
import org.jetbrains.jet.lang.psi.JetQualifiedExpression
|
||||||
import org.jetbrains.jet.lang.psi.JetUserType
|
import org.jetbrains.jet.lang.psi.JetUserType
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName
|
|
||||||
import org.jetbrains.jet.lang.psi.JetCallExpression
|
import org.jetbrains.jet.lang.psi.JetCallExpression
|
||||||
import com.intellij.psi.PsiPackage
|
import com.intellij.psi.PsiPackage
|
||||||
import com.intellij.psi.PsiClass
|
|
||||||
import com.intellij.psi.PsiMember
|
|
||||||
import org.jetbrains.jet.lang.psi.JetNamedDeclaration
|
|
||||||
import com.intellij.psi.JavaDirectoryService
|
import com.intellij.psi.JavaDirectoryService
|
||||||
import com.intellij.psi.PsiDirectory
|
import com.intellij.psi.PsiDirectory
|
||||||
|
import org.jetbrains.jet.lang.psi.JetModifierListOwner
|
||||||
|
|
||||||
public fun PsiElement.getParentByTypesAndPredicate<T: PsiElement>(
|
public fun PsiElement.getParentByTypesAndPredicate<T: PsiElement>(
|
||||||
strict : Boolean = false, vararg parentClasses : Class<T>, predicate: (T) -> Boolean
|
strict : Boolean = false, vararg parentClasses : Class<T>, predicate: (T) -> Boolean
|
||||||
@@ -265,20 +262,4 @@ public fun JetSimpleNameExpression.getOutermostNonInterleavingQualifiedElement()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns FqName for given declaration (either Java or Kotlin)
|
|
||||||
*/
|
|
||||||
public fun PsiElement.getFqName(): FqName? {
|
|
||||||
return when (this) {
|
|
||||||
is PsiPackage -> FqName(getQualifiedName())
|
|
||||||
is PsiClass -> getQualifiedName()?.let { FqName(it) }
|
|
||||||
is PsiMember -> getName()?.let { name ->
|
|
||||||
val prefix = getContainingClass()?.getQualifiedName()
|
|
||||||
FqName(if (prefix != null) "$prefix.$name" else name)
|
|
||||||
}
|
|
||||||
is JetNamedDeclaration -> JetPsiUtil.getFQName(this)
|
|
||||||
else -> null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public fun PsiDirectory.getPackage(): PsiPackage? = JavaDirectoryService.getInstance()!!.getPackage(this)
|
public fun PsiDirectory.getPackage(): PsiPackage? = JavaDirectoryService.getInstance()!!.getPackage(this)
|
||||||
@@ -28,11 +28,15 @@ import com.intellij.psi.PsiElement
|
|||||||
import com.intellij.openapi.util.Key
|
import com.intellij.openapi.util.Key
|
||||||
import com.intellij.psi.PsiDirectory
|
import com.intellij.psi.PsiDirectory
|
||||||
import org.jetbrains.jet.lang.psi.JetFile
|
import org.jetbrains.jet.lang.psi.JetFile
|
||||||
import com.intellij.psi.PsiFile
|
|
||||||
import org.jetbrains.jet.plugin.JetFileType
|
|
||||||
import org.jetbrains.jet.lang.psi.psiUtil.getPackage
|
|
||||||
import com.intellij.psi.PsiFileFactory
|
import com.intellij.psi.PsiFileFactory
|
||||||
import java.lang.annotation.Target
|
import org.jetbrains.jet.lang.psi.psiUtil.getPackage
|
||||||
|
import org.jetbrains.jet.plugin.JetFileType
|
||||||
|
import com.intellij.psi.PsiPackage
|
||||||
|
import com.intellij.psi.PsiClass
|
||||||
|
import com.intellij.psi.PsiMember
|
||||||
|
import org.jetbrains.jet.lang.psi.JetNamedDeclaration
|
||||||
|
import org.jetbrains.jet.lang.psi.JetPsiUtil
|
||||||
|
import org.jetbrains.jet.asJava.namedUnwrappedElement
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Replace [[JetSimpleNameExpression]] (and its enclosing qualifier) with qualified element given by FqName
|
* Replace [[JetSimpleNameExpression]] (and its enclosing qualifier) with qualified element given by FqName
|
||||||
@@ -74,4 +78,21 @@ fun createKotlinFile(fileName: String, targetDir: PsiDirectory): JetFile {
|
|||||||
)
|
)
|
||||||
|
|
||||||
return targetDir.add(file) as JetFile
|
return targetDir.add(file) as JetFile
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns FqName for given declaration (either Java or Kotlin)
|
||||||
|
*/
|
||||||
|
public fun PsiElement.getKotlinFqName(): FqName? {
|
||||||
|
val element = namedUnwrappedElement
|
||||||
|
return when (element) {
|
||||||
|
is PsiPackage -> FqName(element.getQualifiedName())
|
||||||
|
is PsiClass -> element.getQualifiedName()?.let { FqName(it) }
|
||||||
|
is PsiMember -> (element : PsiMember).getName()?.let { name ->
|
||||||
|
val prefix = element.getContainingClass()?.getQualifiedName()
|
||||||
|
FqName(if (prefix != null) "$prefix.$name" else name)
|
||||||
|
}
|
||||||
|
is JetNamedDeclaration -> JetPsiUtil.getFQName(element)
|
||||||
|
else -> null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -23,11 +23,11 @@ import org.jetbrains.jet.lang.psi.*
|
|||||||
import org.jetbrains.jet.lang.resolve.name.FqName
|
import org.jetbrains.jet.lang.resolve.name.FqName
|
||||||
import org.jetbrains.jet.lexer.JetTokens
|
import org.jetbrains.jet.lexer.JetTokens
|
||||||
import org.jetbrains.jet.plugin.codeInsight.ShortenReferences
|
import org.jetbrains.jet.plugin.codeInsight.ShortenReferences
|
||||||
import org.jetbrains.jet.lang.psi.psiUtil.getFqName
|
|
||||||
import org.jetbrains.jet.plugin.refactoring.changeQualifiedName
|
import org.jetbrains.jet.plugin.refactoring.changeQualifiedName
|
||||||
import org.jetbrains.jet.lang.psi.psiUtil.getQualifiedElementSelector
|
import org.jetbrains.jet.lang.psi.psiUtil.getQualifiedElementSelector
|
||||||
import org.jetbrains.jet.lang.psi.psiUtil.getOutermostNonInterleavingQualifiedElement
|
import org.jetbrains.jet.lang.psi.psiUtil.getOutermostNonInterleavingQualifiedElement
|
||||||
import org.jetbrains.jet.plugin.codeInsight.addToShorteningWaitSet
|
import org.jetbrains.jet.plugin.codeInsight.addToShorteningWaitSet
|
||||||
|
import org.jetbrains.jet.plugin.refactoring.getKotlinFqName
|
||||||
|
|
||||||
public class JetSimpleNameReference(
|
public class JetSimpleNameReference(
|
||||||
jetSimpleNameExpression: JetSimpleNameExpression
|
jetSimpleNameExpression: JetSimpleNameExpression
|
||||||
@@ -56,7 +56,7 @@ public class JetSimpleNameReference(
|
|||||||
|
|
||||||
// By default reference binding is delayed
|
// By default reference binding is delayed
|
||||||
override fun bindToElement(element: PsiElement): PsiElement {
|
override fun bindToElement(element: PsiElement): PsiElement {
|
||||||
return element.getFqName()?.let { fqName -> bindToFqName(fqName) } ?: expression
|
return element.getKotlinFqName()?.let { fqName -> bindToFqName(fqName) } ?: expression
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun bindToFqName(fqName: FqName, shorteningMode: ShorteningMode = ShorteningMode.DELAYED_SHORTENING): PsiElement {
|
public fun bindToFqName(fqName: FqName, shorteningMode: ShorteningMode = ShorteningMode.DELAYED_SHORTENING): PsiElement {
|
||||||
|
|||||||
Reference in New Issue
Block a user