Search in sources :

Example 1 with AntDomElement

use of com.intellij.lang.ant.dom.AntDomElement in project intellij-community by JetBrains.

the class AntBuildTargetImpl method findTask.

@Nullable
public BuildTask findTask(final String taskName) {
    final PsiFile psiFile = PsiManager.getInstance(myProject).findFile(myFile);
    final AntDomProject domProject = AntSupport.getAntDomProject(psiFile);
    if (domProject != null) {
        final AntDomTarget antTarget = domProject.findDeclaredTarget(myName);
        if (antTarget != null) {
            final Ref<AntDomElement> result = new Ref<>(null);
            antTarget.accept(new AntDomRecursiveVisitor() {

                public void visitAntDomElement(AntDomElement element) {
                    if (result.get() != null) {
                        return;
                    }
                    if (element.isTask() && taskName.equals(element.getXmlElementName())) {
                        result.set(element);
                        return;
                    }
                    super.visitAntDomElement(element);
                }
            });
            final AntDomElement task = result.get();
            if (task != null) {
                return new BuildTask(this, task);
            }
        }
    }
    return null;
}
Also used : Ref(com.intellij.openapi.util.Ref) AntDomElement(com.intellij.lang.ant.dom.AntDomElement) AntDomRecursiveVisitor(com.intellij.lang.ant.dom.AntDomRecursiveVisitor) PsiFile(com.intellij.psi.PsiFile) AntDomTarget(com.intellij.lang.ant.dom.AntDomTarget) AntDomProject(com.intellij.lang.ant.dom.AntDomProject) Nullable(org.jetbrains.annotations.Nullable)

Example 2 with AntDomElement

use of com.intellij.lang.ant.dom.AntDomElement in project intellij-community by JetBrains.

the class AntDomDocumentationProvider method getHelpFile.

@Nullable
private static VirtualFile getHelpFile(final PsiElement element) {
    final XmlTag xmlTag = PsiTreeUtil.getParentOfType(element, XmlTag.class);
    if (xmlTag == null) {
        return null;
    }
    final AntDomElement antElement = AntSupport.getAntDomElement(xmlTag);
    if (antElement == null) {
        return null;
    }
    final AntDomProject antProject = antElement.getAntProject();
    if (antProject == null) {
        return null;
    }
    final AntInstallation installation = antProject.getAntInstallation();
    if (installation == null) {
        // not configured properly and bundled installation missing
        return null;
    }
    final String antHomeDir = AntInstallation.HOME_DIR.get(installation.getProperties());
    if (antHomeDir == null) {
        return null;
    }
    @NonNls String path = antHomeDir + "/docs/manual";
    String url;
    if (new File(path).exists()) {
        url = VirtualFileManager.constructUrl(LocalFileSystem.PROTOCOL, FileUtil.toSystemIndependentName(path));
    } else {
        path = antHomeDir + "/docs.zip";
        if (new File(path).exists()) {
            url = VirtualFileManager.constructUrl(JarFileSystem.PROTOCOL, FileUtil.toSystemIndependentName(path) + JarFileSystem.JAR_SEPARATOR + "docs/manual");
        } else {
            return null;
        }
    }
    final VirtualFile documentationRoot = VirtualFileManager.getInstance().findFileByUrl(url);
    if (documentationRoot == null) {
        return null;
    }
    return getHelpFile(antElement, documentationRoot);
}
Also used : NonNls(org.jetbrains.annotations.NonNls) AntDomElement(com.intellij.lang.ant.dom.AntDomElement) AntInstallation(com.intellij.lang.ant.config.impl.AntInstallation) PsiFile(com.intellij.psi.PsiFile) File(java.io.File) XmlTag(com.intellij.psi.xml.XmlTag) AntDomProject(com.intellij.lang.ant.dom.AntDomProject) Nullable(org.jetbrains.annotations.Nullable)

Example 3 with AntDomElement

use of com.intellij.lang.ant.dom.AntDomElement in project intellij-community by JetBrains.

the class AntDomDocumentationProvider method getAdditionalDocumentation.

@Nullable
private static String getAdditionalDocumentation(PsiElement elem) {
    final XmlTag xmlTag = PsiTreeUtil.getParentOfType(elem, XmlTag.class);
    if (xmlTag == null) {
        return null;
    }
    final AntDomElement antElement = AntSupport.getAntDomElement(xmlTag);
    if (antElement instanceof AntFilesProvider) {
        final List<File> list = ((AntFilesProvider) antElement).getFiles(new HashSet<>());
        if (list.size() > 0) {
            @NonNls final StringBuilder builder = StringBuilderSpinAllocator.alloc();
            try {
                final XmlTag tag = antElement.getXmlTag();
                if (tag != null) {
                    builder.append("<b>");
                    builder.append(tag.getName());
                    builder.append(":</b>");
                }
                for (File file : list) {
                    if (builder.length() > 0) {
                        builder.append("<br>");
                    }
                    builder.append(file.getPath());
                }
                return builder.toString();
            } finally {
                StringBuilderSpinAllocator.dispose(builder);
            }
        }
    }
    return null;
}
Also used : NonNls(org.jetbrains.annotations.NonNls) AntFilesProvider(com.intellij.lang.ant.AntFilesProvider) AntDomElement(com.intellij.lang.ant.dom.AntDomElement) PsiFile(com.intellij.psi.PsiFile) File(java.io.File) XmlTag(com.intellij.psi.xml.XmlTag) Nullable(org.jetbrains.annotations.Nullable)

Example 4 with AntDomElement

use of com.intellij.lang.ant.dom.AntDomElement in project intellij-community by JetBrains.

the class CustomTypesTest method doTest.

protected void doTest() throws Exception {
    String name = getTestName(false);
    String text = loadFile(name + ".ant");
    PsiFile file = myFixture.addFileToProject(name + ".ant", text);
    final AntDomProject antProject = AntSupport.getAntDomProject(file);
    final Ref<Boolean> found = new Ref<>(false);
    antProject.accept(new AntDomRecursiveVisitor() {

        @Override
        public void visitAntDomElement(AntDomElement element) {
            if (!found.get()) {
                super.visitAntDomElement(element);
            }
        }

        @Override
        public void visitAntDomCustomElement(AntDomCustomElement element) {
            final Class clazz = element.getDefinitionClass();
            if (clazz != null && AntCustomTask.class.getName().equals(clazz.getName())) {
                found.set(true);
            } else {
                super.visitAntDomElement(element);
            }
        }
    });
    assertTrue(found.get());
}
Also used : Ref(com.intellij.openapi.util.Ref) AntDomCustomElement(com.intellij.lang.ant.dom.AntDomCustomElement) AntDomElement(com.intellij.lang.ant.dom.AntDomElement) AntCustomTask(com.intellij.lang.ant.typedefs.AntCustomTask) AntDomRecursiveVisitor(com.intellij.lang.ant.dom.AntDomRecursiveVisitor) PsiFile(com.intellij.psi.PsiFile) AntDomProject(com.intellij.lang.ant.dom.AntDomProject)

Aggregations

AntDomElement (com.intellij.lang.ant.dom.AntDomElement)4 PsiFile (com.intellij.psi.PsiFile)4 AntDomProject (com.intellij.lang.ant.dom.AntDomProject)3 Nullable (org.jetbrains.annotations.Nullable)3 AntDomRecursiveVisitor (com.intellij.lang.ant.dom.AntDomRecursiveVisitor)2 Ref (com.intellij.openapi.util.Ref)2 XmlTag (com.intellij.psi.xml.XmlTag)2 File (java.io.File)2 NonNls (org.jetbrains.annotations.NonNls)2 AntFilesProvider (com.intellij.lang.ant.AntFilesProvider)1 AntInstallation (com.intellij.lang.ant.config.impl.AntInstallation)1 AntDomCustomElement (com.intellij.lang.ant.dom.AntDomCustomElement)1 AntDomTarget (com.intellij.lang.ant.dom.AntDomTarget)1 AntCustomTask (com.intellij.lang.ant.typedefs.AntCustomTask)1