diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/psiUtil/jetPsiUtil.kt b/compiler/frontend/src/org/jetbrains/jet/lang/psi/psiUtil/jetPsiUtil.kt index 3a5f179f3a2..883e247b4ae 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/psiUtil/jetPsiUtil.kt +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/psiUtil/jetPsiUtil.kt @@ -49,14 +49,11 @@ import com.intellij.psi.PsiParameterList import com.intellij.psi.PsiParameter import org.jetbrains.jet.lang.psi.JetQualifiedExpression import org.jetbrains.jet.lang.psi.JetUserType -import org.jetbrains.jet.lang.resolve.name.FqName import org.jetbrains.jet.lang.psi.JetCallExpression 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.PsiDirectory +import org.jetbrains.jet.lang.psi.JetModifierListOwner public fun PsiElement.getParentByTypesAndPredicate( strict : Boolean = false, vararg parentClasses : Class, 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) \ No newline at end of file diff --git a/idea/src/org/jetbrains/jet/plugin/refactoring/jetRefactoringUtil.kt b/idea/src/org/jetbrains/jet/plugin/refactoring/jetRefactoringUtil.kt index 8ea27c4c485..ddbc7a529b1 100644 --- a/idea/src/org/jetbrains/jet/plugin/refactoring/jetRefactoringUtil.kt +++ b/idea/src/org/jetbrains/jet/plugin/refactoring/jetRefactoringUtil.kt @@ -28,11 +28,15 @@ import com.intellij.psi.PsiElement import com.intellij.openapi.util.Key import com.intellij.psi.PsiDirectory 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 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 @@ -74,4 +78,21 @@ fun createKotlinFile(fileName: String, targetDir: PsiDirectory): 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 + } } \ No newline at end of file diff --git a/idea/src/org/jetbrains/jet/plugin/references/JetSimpleNameReference.kt b/idea/src/org/jetbrains/jet/plugin/references/JetSimpleNameReference.kt index bfea856bab4..f0dc65384b1 100644 --- a/idea/src/org/jetbrains/jet/plugin/references/JetSimpleNameReference.kt +++ b/idea/src/org/jetbrains/jet/plugin/references/JetSimpleNameReference.kt @@ -23,11 +23,11 @@ import org.jetbrains.jet.lang.psi.* import org.jetbrains.jet.lang.resolve.name.FqName import org.jetbrains.jet.lexer.JetTokens 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.lang.psi.psiUtil.getQualifiedElementSelector import org.jetbrains.jet.lang.psi.psiUtil.getOutermostNonInterleavingQualifiedElement import org.jetbrains.jet.plugin.codeInsight.addToShorteningWaitSet +import org.jetbrains.jet.plugin.refactoring.getKotlinFqName public class JetSimpleNameReference( jetSimpleNameExpression: JetSimpleNameExpression @@ -56,7 +56,7 @@ public class JetSimpleNameReference( // By default reference binding is delayed 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 {