fix R class field resolving
- resolve by class name and package defined in AndroidManifest.xml
This commit is contained in:
committed by
Yan Zhulanow
parent
adbe9afd4a
commit
f507857930
@@ -28,16 +28,19 @@ import org.jetbrains.jet.lang.psi.JetSimpleNameExpression
|
||||
import org.jetbrains.jet.lang.psi.JetProperty
|
||||
import com.intellij.psi.impl.light.LightElement
|
||||
import com.intellij.psi.xml.XmlAttribute
|
||||
import org.jetbrains.jet.lang.resolve.android.isRClassField
|
||||
import com.intellij.psi.PsiField
|
||||
|
||||
public class AndroidGotoDeclarationHandler : GotoDeclarationHandler {
|
||||
override fun getGotoDeclarationTargets(sourceElement: PsiElement?, offset: Int, editor: Editor?): Array<PsiElement>? {
|
||||
if (sourceElement is LeafPsiElement && sourceElement.getParent() is JetSimpleNameExpression) {
|
||||
val resolved = JetSimpleNameReference(sourceElement.getParent() as JetSimpleNameExpression).resolve()
|
||||
if (resolved == null) return null
|
||||
val name = if (resolved is JetProperty) {
|
||||
resolved.getName()
|
||||
}
|
||||
else if (resolved is LightElement && resolved.getParent().toString() == "AndroidRClass") {
|
||||
resolved.getName()
|
||||
else if (isRClassField(resolved)) {
|
||||
(resolved as PsiField).getName()
|
||||
}
|
||||
else null
|
||||
if (name != null) {
|
||||
|
||||
@@ -29,13 +29,14 @@ import org.jetbrains.android.dom.wrappers.LazyValueResourceElementWrapper
|
||||
import org.jetbrains.android.util.AndroidResourceUtil
|
||||
import com.intellij.psi.xml.XmlAttribute
|
||||
import com.intellij.psi.impl.light.LightElement
|
||||
import org.jetbrains.jet.lang.resolve.android.isRClassField
|
||||
|
||||
public class AndroidRenameProcessor : RenamePsiElementProcessor() {
|
||||
override fun canProcessElement(element: PsiElement): Boolean {
|
||||
// either renaming synthetic property, or value in ui xml, or R light class field
|
||||
return (element.namedUnwrappedElement is JetProperty &&
|
||||
isAndroidSyntheticElement(element.namedUnwrappedElement)) || element is XmlAttributeValue ||
|
||||
element is LightElement
|
||||
isRClassField(element)
|
||||
}
|
||||
|
||||
override fun prepareRenaming(element: PsiElement?, newName: String?, allRenames: MutableMap<PsiElement, String>, scope: SearchScope) {
|
||||
|
||||
Reference in New Issue
Block a user