Search in sources :

Example 1 with WebDirectoryUtil

use of com.intellij.psi.impl.source.jsp.WebDirectoryUtil in project intellij-plugins by JetBrains.

the class Struts2TilesModelProvider method computeModels.

@NotNull
public Collection<TilesModel> computeModels(@NotNull final Module module) {
    final Project project = module.getProject();
    final JavaPsiFacade facade = JavaPsiFacade.getInstance(project);
    final GlobalSearchScope moduleScope = GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(module, false);
    // struts2-tiles plugin must be available
    final PsiClass strutsTilesListenerClass = facade.findClass(STRUTS_TILES_LISTENER_CLASS, moduleScope);
    if (strutsTilesListenerClass == null) {
        return Collections.emptyList();
    }
    final PsiClass tilesListenerClass = facade.findClass(TilesConstants.TILES_LISTENER, moduleScope);
    final StrutsPluginDomFactory<TilesDefinitions, TilesModel> factory = StrutsProjectComponent.getInstance(project).getTilesFactory();
    final Set<TilesModel> struts2TilesModels = new HashSet<>();
    final Consumer<Set<XmlFile>> consumer = definitions -> {
        final DomFileElement<TilesDefinitions> domFileElement = factory.createMergedModelRoot(definitions);
        if (domFileElement != null) {
            struts2TilesModels.add(new TilesModelImpl(definitions, domFileElement, STRUTS2_TILES_MODEL));
        }
    };
    final WebDirectoryUtil webDirectoryUtil = WebDirectoryUtil.getWebDirectoryUtil(project);
    final Collection<WebFacet> webFacets = WebFacet.getInstances(module);
    for (final WebFacet webFacet : webFacets) {
        final WebApp webApp = webFacet.getRoot();
        if (webApp == null) {
            continue;
        }
        // determine configured tiles config files
        @NonNls final Set<String> tilesConfigNames = findConfiguredTilesPaths(webApp);
        // no configured paths? use default
        if (tilesConfigNames.isEmpty()) {
            tilesConfigNames.add(DEFAULT_TILES_XML);
        }
        // resolve to XmlFile
        final Set<XmlFile> tilesFileSet = new HashSet<>();
        for (final String tilesPath : tilesConfigNames) {
            final PsiElement tilesXmlFile = webDirectoryUtil.findFileByPath(tilesPath, webFacet);
            if (tilesXmlFile instanceof XmlFile) {
                tilesFileSet.add((XmlFile) tilesXmlFile);
            }
        }
        final List<Listener> listenerList = webApp.getListeners();
        for (final Listener listener : listenerList) {
            final PsiClass listenerClass = listener.getListenerClass().getValue();
            if (strutsTilesListenerClass.equals(listenerClass) || Comparing.equal(tilesListenerClass, listenerClass)) {
                consumer.consume(tilesFileSet);
            }
        }
    }
    return struts2TilesModels;
}
Also used : JavaPsiFacade(com.intellij.psi.JavaPsiFacade) WebFacet(com.intellij.javaee.web.facet.WebFacet) XmlFile(com.intellij.psi.xml.XmlFile) JavaPsiFacade(com.intellij.psi.JavaPsiFacade) HashSet(com.intellij.util.containers.HashSet) NonNls(org.jetbrains.annotations.NonNls) THashSet(gnu.trove.THashSet) ContainerUtil(com.intellij.util.containers.ContainerUtil) StrutsProjectComponent(com.intellij.struts.StrutsProjectComponent) PsiClass(com.intellij.psi.PsiClass) Comparing(com.intellij.openapi.util.Comparing) PsiElement(com.intellij.psi.PsiElement) Project(com.intellij.openapi.project.Project) Module(com.intellij.openapi.module.Module) TilesModelProvider(com.intellij.struts.TilesModelProvider) WebDirectoryUtil(com.intellij.psi.impl.source.jsp.WebDirectoryUtil) TilesDefinitions(com.intellij.struts.dom.tiles.TilesDefinitions) TilesModel(com.intellij.struts.TilesModel) TilesConstants(com.intellij.tiles.TilesConstants) StringUtil(com.intellij.openapi.util.text.StringUtil) TilesModelImpl(com.intellij.struts.psi.TilesModelImpl) Collection(java.util.Collection) DomFileElement(com.intellij.util.xml.DomFileElement) GlobalSearchScope(com.intellij.psi.search.GlobalSearchScope) Set(java.util.Set) List(java.util.List) WebApp(com.intellij.javaee.model.xml.web.WebApp) ParamValue(com.intellij.javaee.model.xml.ParamValue) Listener(com.intellij.javaee.model.xml.Listener) NotNull(org.jetbrains.annotations.NotNull) StrutsPluginDomFactory(com.intellij.struts.StrutsPluginDomFactory) Collections(java.util.Collections) Consumer(com.intellij.util.Consumer) Condition(com.intellij.openapi.util.Condition) HashSet(com.intellij.util.containers.HashSet) THashSet(gnu.trove.THashSet) Set(java.util.Set) Listener(com.intellij.javaee.model.xml.Listener) TilesModelImpl(com.intellij.struts.psi.TilesModelImpl) DomFileElement(com.intellij.util.xml.DomFileElement) WebDirectoryUtil(com.intellij.psi.impl.source.jsp.WebDirectoryUtil) GlobalSearchScope(com.intellij.psi.search.GlobalSearchScope) PsiElement(com.intellij.psi.PsiElement) HashSet(com.intellij.util.containers.HashSet) THashSet(gnu.trove.THashSet) NonNls(org.jetbrains.annotations.NonNls) XmlFile(com.intellij.psi.xml.XmlFile) PsiClass(com.intellij.psi.PsiClass) TilesDefinitions(com.intellij.struts.dom.tiles.TilesDefinitions) TilesModel(com.intellij.struts.TilesModel) Project(com.intellij.openapi.project.Project) WebFacet(com.intellij.javaee.web.facet.WebFacet) WebApp(com.intellij.javaee.model.xml.web.WebApp) NotNull(org.jetbrains.annotations.NotNull)

Example 2 with WebDirectoryUtil

use of com.intellij.psi.impl.source.jsp.WebDirectoryUtil in project intellij-plugins by JetBrains.

the class FileReferenceSetHelper method addWebDirectoryAndCurrentNamespaceAsRoots.

/**
   * Adds all {@link WebDirectoryElement}s as well as web-directory with name of given current namespace
   * (if not "root" namespace) as possible content roots.
   *
   * @param psiElement Current element.
   * @param namespace  Current namespace.
   * @param webFacet   Module.
   * @param set        FRS to patch.
   */
public static void addWebDirectoryAndCurrentNamespaceAsRoots(final PsiElement psiElement, final String namespace, final WebFacet webFacet, final FileReferenceSet set) {
    final WebDirectoryUtil directoryUtil = WebDirectoryUtil.getWebDirectoryUtil(psiElement.getProject());
    set.addCustomization(FileReferenceSet.DEFAULT_PATH_EVALUATOR_OPTION, file -> {
        final List<PsiFileSystemItem> basePathRoots = new ArrayList<>();
        final List<WebRoot> webRoots = webFacet.getWebRoots(true);
        for (final WebRoot webRoot : webRoots) {
            final String webRootPath = webRoot.getRelativePath();
            final WebDirectoryElement webRootBase = directoryUtil.findWebDirectoryElementByPath(webRootPath, webFacet);
            ContainerUtil.addIfNotNull(basePathRoots, webRootBase);
        }
        if (!Comparing.equal(namespace, StrutsPackage.DEFAULT_NAMESPACE)) {
            final WebDirectoryElement packageBase = directoryUtil.findWebDirectoryElementByPath(namespace, webFacet);
            ContainerUtil.addIfNotNull(basePathRoots, packageBase);
        }
        return basePathRoots;
    });
}
Also used : WebRoot(com.intellij.javaee.web.WebRoot) WebDirectoryUtil(com.intellij.psi.impl.source.jsp.WebDirectoryUtil) ArrayList(java.util.ArrayList) PsiFileSystemItem(com.intellij.psi.PsiFileSystemItem) WebDirectoryElement(com.intellij.psi.jsp.WebDirectoryElement)

Aggregations

WebDirectoryUtil (com.intellij.psi.impl.source.jsp.WebDirectoryUtil)2 Listener (com.intellij.javaee.model.xml.Listener)1 ParamValue (com.intellij.javaee.model.xml.ParamValue)1 WebApp (com.intellij.javaee.model.xml.web.WebApp)1 WebRoot (com.intellij.javaee.web.WebRoot)1 WebFacet (com.intellij.javaee.web.facet.WebFacet)1 Module (com.intellij.openapi.module.Module)1 Project (com.intellij.openapi.project.Project)1 Comparing (com.intellij.openapi.util.Comparing)1 Condition (com.intellij.openapi.util.Condition)1 StringUtil (com.intellij.openapi.util.text.StringUtil)1 JavaPsiFacade (com.intellij.psi.JavaPsiFacade)1 PsiClass (com.intellij.psi.PsiClass)1 PsiElement (com.intellij.psi.PsiElement)1 PsiFileSystemItem (com.intellij.psi.PsiFileSystemItem)1 WebDirectoryElement (com.intellij.psi.jsp.WebDirectoryElement)1 GlobalSearchScope (com.intellij.psi.search.GlobalSearchScope)1 XmlFile (com.intellij.psi.xml.XmlFile)1 StrutsPluginDomFactory (com.intellij.struts.StrutsPluginDomFactory)1 StrutsProjectComponent (com.intellij.struts.StrutsProjectComponent)1