package org.jetbrains.android.inspections.lint; import com.android.resources.ResourceType; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.xml.XmlAttribute; import com.intellij.psi.xml.XmlAttributeValue; import com.intellij.util.IncorrectOperationException; import org.jetbrains.android.intentions.AndroidAddStringResourceAction; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; /** * @author Eugene.Kudelevsky */ public class AndroidAddStringResourceQuickFix extends AndroidAddStringResourceAction { private final PsiElement myStartElement; public AndroidAddStringResourceQuickFix(@NotNull PsiElement startElement) { myStartElement = startElement; } @Override public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) { if (!myStartElement.isValid()) { return false; } final XmlAttributeValue value = getAttributeValue(myStartElement); return value != null && getStringLiteralValue(project, value, file, ResourceType.STRING) != null; } @Override public void invoke(@NotNull Project project, Editor editor, PsiFile file) throws IncorrectOperationException { invokeIntention(project, editor, file, null); } public void invokeIntention(Project project, Editor editor, PsiFile file, String resName) { final XmlAttributeValue attributeValue = getAttributeValue(myStartElement); if (attributeValue != null) { doInvoke(project, editor, file, resName, attributeValue, ResourceType.STRING); } } @Nullable private static XmlAttributeValue getAttributeValue(@NotNull PsiElement element) { final XmlAttribute attribute = PsiTreeUtil.getParentOfType(element, XmlAttribute.class); return attribute != null ? attribute.getValueElement() : null; } }