| package org.jetbrains.android.resourceManagers; |
| |
| import com.android.resources.ResourceType; |
| import com.intellij.openapi.project.Project; |
| import com.intellij.openapi.util.Ref; |
| import com.intellij.openapi.vfs.VirtualFile; |
| import com.intellij.psi.PsiFile; |
| import com.intellij.psi.PsiManager; |
| import com.intellij.psi.XmlRecursiveElementVisitor; |
| import com.intellij.psi.xml.XmlAttributeValue; |
| import com.intellij.psi.xml.XmlFile; |
| import org.jetbrains.android.util.AndroidResourceUtil; |
| import org.jetbrains.annotations.NotNull; |
| |
| /** |
| * @author Eugene.Kudelevsky |
| */ |
| public class IdResourceInfo extends ValueResourceInfoBase { |
| private final Project myProject; |
| |
| IdResourceInfo(@NotNull String name, @NotNull VirtualFile file, @NotNull Project project) { |
| super(name, ResourceType.ID, file); |
| myProject = project; |
| } |
| |
| @Override |
| public XmlAttributeValue computeXmlElement() { |
| final PsiFile psiFile = PsiManager.getInstance(myProject).findFile(myFile); |
| |
| if (!(psiFile instanceof XmlFile)) { |
| return null; |
| } |
| final Ref<XmlAttributeValue> result = Ref.create(); |
| |
| psiFile.accept(new XmlRecursiveElementVisitor() { |
| @Override |
| public void visitXmlAttributeValue(XmlAttributeValue attributeValue) { |
| if (!result.isNull()) { |
| return; |
| } |
| |
| if (AndroidResourceUtil.isIdDeclaration(attributeValue)) { |
| final String idInAttr = AndroidResourceUtil.getResourceNameByReferenceText(attributeValue.getValue()); |
| |
| if (myName.equals(idInAttr)) { |
| result.set(attributeValue); |
| } |
| } |
| } |
| }); |
| return result.get(); |
| } |
| |
| @Override |
| protected int getSortingRank() { |
| return 0; |
| } |
| } |