package org.jetbrains.android.inspections; import com.android.resources.ResourceType; import com.intellij.codeInsight.daemon.QuickFixActionRegistrar; import com.intellij.codeInsight.quickfix.UnresolvedReferenceQuickFixProvider; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleUtil; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiReferenceExpression; import org.jetbrains.android.dom.manifest.Manifest; import org.jetbrains.android.facet.AndroidFacet; import org.jetbrains.android.util.AndroidResourceUtil; import org.jetbrains.annotations.NotNull; /** * @author Eugene.Kudelevsky */ public class AndroidQuickFixProvider extends UnresolvedReferenceQuickFixProvider<PsiReferenceExpression> { @Override public void registerFixes(@NotNull PsiReferenceExpression exp, @NotNull QuickFixActionRegistrar registrar) { final Module contextModule = ModuleUtil.findModuleForPsiElement(exp); if (contextModule == null) { return; } final AndroidFacet facet = AndroidFacet.getInstance(contextModule); if (facet == null) { return; } final Manifest manifest = facet.getManifest(); if (manifest == null) { return; } final String aPackage = manifest.getPackage().getValue(); if (aPackage == null) { return; } final PsiFile contextFile = exp.getContainingFile(); if (contextFile == null) { return; } AndroidResourceUtil.MyReferredResourceFieldInfo info = AndroidResourceUtil.getReferredResourceOrManifestField(facet, exp, true); if (info == null) { final PsiElement parent = exp.getParent(); if (parent instanceof PsiReferenceExpression) { info = AndroidResourceUtil.getReferredResourceOrManifestField(facet, (PsiReferenceExpression)parent, true); } } if (info == null || info.isFromManifest()) { return; } final String resClassName = info.getClassName(); final String resFieldName = info.getFieldName(); ResourceType resourceType = ResourceType.getEnum(resClassName); if (AndroidResourceUtil.ALL_VALUE_RESOURCE_TYPES.contains(resourceType)) { registrar .register(new CreateValueResourceQuickFix(facet, resourceType, resFieldName, contextFile, true)); } if (AndroidResourceUtil.XML_FILE_RESOURCE_TYPES.contains(resourceType)) { registrar.register(new CreateFileResourceQuickFix(facet, resourceType, resFieldName, contextFile, true)); } } @NotNull @Override public Class<PsiReferenceExpression> getReferenceClass() { return PsiReferenceExpression.class; } }