Search in sources :

Example 1 with AntChangeContextLocalFix

use of com.intellij.lang.ant.quickfix.AntChangeContextLocalFix in project intellij-community by JetBrains.

the class AntResolveInspection method checkReferences.

private static void checkReferences(final XmlElement xmlElement, @NonNls final DomElementAnnotationHolder holder, DomElement domElement) {
    if (xmlElement == null) {
        return;
    }
    Set<PsiReference> processed = null;
    // to be initialized lazily
    Collection<PropertiesFile> propertyFiles = null;
    for (final PsiReference ref : xmlElement.getReferences()) {
        if (!(ref instanceof AntDomReference)) {
            continue;
        }
        final AntDomReference antDomRef = (AntDomReference) ref;
        if (antDomRef.shouldBeSkippedByAnnotator()) {
            continue;
        }
        if (processed != null && processed.contains(ref)) {
            continue;
        }
        if (!isResolvable(ref)) {
            final List<LocalQuickFix> quickFixList = new SmartList<>();
            quickFixList.add(new AntChangeContextLocalFix());
            if (ref instanceof AntDomPropertyReference) {
                final String canonicalText = ref.getCanonicalText();
                quickFixList.add(new AntCreatePropertyFix(canonicalText, null));
                final PsiFile containingFile = xmlElement.getContainingFile();
                if (containingFile != null) {
                    if (propertyFiles == null) {
                        propertyFiles = getPropertyFiles(AntSupport.getAntDomProject(containingFile), xmlElement);
                    }
                    for (PropertiesFile propertyFile : propertyFiles) {
                        quickFixList.add(new AntCreatePropertyFix(canonicalText, propertyFile));
                    }
                }
            } else if (ref instanceof AntDomTargetReference) {
                quickFixList.add(new AntCreateTargetFix(ref.getCanonicalText()));
            }
            holder.createProblem(domElement, ProblemHighlightType.LIKE_UNKNOWN_SYMBOL, antDomRef.getUnresolvedMessagePattern(), ref.getRangeInElement(), quickFixList.toArray((new LocalQuickFix[quickFixList.size()])));
            if (ref instanceof AntDomFileReference) {
                if (processed == null) {
                    processed = new HashSet<>();
                }
                ContainerUtil.addAll(processed, ((AntDomFileReference) ref).getFileReferenceSet().getAllReferences());
            }
        }
    }
}
Also used : AntCreateTargetFix(com.intellij.lang.ant.quickfix.AntCreateTargetFix) AntChangeContextLocalFix(com.intellij.lang.ant.quickfix.AntChangeContextLocalFix) AntCreatePropertyFix(com.intellij.lang.ant.quickfix.AntCreatePropertyFix) PsiReference(com.intellij.psi.PsiReference) LocalQuickFix(com.intellij.codeInspection.LocalQuickFix) PropertiesFile(com.intellij.lang.properties.psi.PropertiesFile) PsiFile(com.intellij.psi.PsiFile) SmartList(com.intellij.util.SmartList)

Aggregations

LocalQuickFix (com.intellij.codeInspection.LocalQuickFix)1 AntChangeContextLocalFix (com.intellij.lang.ant.quickfix.AntChangeContextLocalFix)1 AntCreatePropertyFix (com.intellij.lang.ant.quickfix.AntCreatePropertyFix)1 AntCreateTargetFix (com.intellij.lang.ant.quickfix.AntCreateTargetFix)1 PropertiesFile (com.intellij.lang.properties.psi.PropertiesFile)1 PsiFile (com.intellij.psi.PsiFile)1 PsiReference (com.intellij.psi.PsiReference)1 SmartList (com.intellij.util.SmartList)1