fix R class field resolving

- resolve by class name and package defined in AndroidManifest.xml
This commit is contained in:
Mikhail Mutcianko
2014-09-01 12:19:12 +04:00
committed by Yan Zhulanow
parent adbe9afd4a
commit f507857930
3 changed files with 22 additions and 3 deletions
@@ -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) {