private static void collectChildrenProjects( @NotNull final MavenDomProjectModel model, @NotNull Set<MavenDomProjectModel> models) { MavenProject mavenProject = MavenDomUtil.findProject(model); if (mavenProject != null) { final Project project = model.getManager().getProject(); for (MavenProject inheritor : MavenProjectsManager.getInstance(project).findInheritors(mavenProject)) { MavenDomProjectModel inheritorProjectModel = MavenDomUtil.getMavenDomProjectModel(project, inheritor.getFile()); if (inheritorProjectModel != null && !models.contains(inheritorProjectModel)) { models.add(inheritorProjectModel); collectChildrenProjects(inheritorProjectModel, models); } } } }
public static boolean processDependenciesInDependencyManagement( @NotNull MavenDomProjectModel projectDom, @NotNull final Processor<MavenDomDependency> processor, @NotNull final Project project) { Processor<MavenDomDependencies> managedDependenciesListProcessor = dependencies -> { SmartList<MavenDomDependency> importDependencies = null; for (MavenDomDependency domDependency : dependencies.getDependencies()) { if ("import".equals(domDependency.getScope().getRawText())) { if (importDependencies == null) { importDependencies = new SmartList<MavenDomDependency>(); } importDependencies.add(domDependency); } else { if (processor.process(domDependency)) return true; } } if (importDependencies != null) { for (MavenDomDependency domDependency : importDependencies) { GenericDomValue<String> version = domDependency.getVersion(); if (version.getXmlElement() != null) { GenericDomValueReference reference = new GenericDomValueReference(version); PsiElement resolve = reference.resolve(); if (resolve instanceof XmlFile) { MavenDomProjectModel dependModel = MavenDomUtil.getMavenDomModel((PsiFile) resolve, MavenDomProjectModel.class); if (dependModel != null) { for (MavenDomDependency dep : dependModel.getDependencyManagement().getDependencies().getDependencies()) { if (processor.process(dep)) return true; } } } } } } return false; }; Function<MavenDomProjectModelBase, MavenDomDependencies> domFunction = mavenDomProfile -> mavenDomProfile.getDependencyManagement().getDependencies(); return process(projectDom, managedDependenciesListProcessor, project, domFunction, domFunction); }
private static <T> boolean processProfilesXml( VirtualFile projectFile, MavenProject mavenProjectOrNull, Processor<T> processor, Project project, Function<? super MavenDomProfile, T> f) { VirtualFile profilesFile = MavenUtil.findProfilesXmlFile(projectFile); if (profilesFile == null) return false; MavenDomProfiles profiles = MavenDomUtil.getMavenDomProfilesModel(project, profilesFile); if (profiles == null) return false; return processProfiles(profiles, mavenProjectOrNull, processor, f); }
public static void processChildrenRecursively( @Nullable MavenDomProjectModel model, @NotNull Processor<MavenDomProjectModel> processor, @NotNull Project project, @NotNull Set<MavenDomProjectModel> processedModels, boolean strict) { if (model != null && !processedModels.contains(model)) { processedModels.add(model); if (strict && processor.process(model)) return; MavenProject mavenProject = MavenDomUtil.findProject(model); if (mavenProject != null) { for (MavenProject childProject : MavenProjectsManager.getInstance(project).findInheritors(mavenProject)) { MavenDomProjectModel childProjectModel = MavenDomUtil.getMavenDomProjectModel(project, childProject.getFile()); processChildrenRecursively(childProjectModel, processor, project, processedModels, true); } } } }
@Nullable public static MavenDomProjectModel findParent( @NotNull MavenDomParent mavenDomParent, Project project) { if (!DomUtil.hasXml(mavenDomParent)) return null; MavenId id = new MavenId( mavenDomParent.getGroupId().getStringValue(), mavenDomParent.getArtifactId().getStringValue(), mavenDomParent.getVersion().getStringValue()); MavenProject mavenProject = MavenProjectsManager.getInstance(project).findProject(id); return mavenProject != null ? MavenDomUtil.getMavenDomProjectModel(project, mavenProject.getFile()) : null; }
@Nullable public T process(@NotNull MavenDomProjectModel projectDom) { MavenDomParent parent = projectDom.getMavenParent(); MavenParentDesc parentDesc = null; if (DomUtil.hasXml(parent)) { String parentGroupId = parent.getGroupId().getStringValue(); String parentArtifactId = parent.getArtifactId().getStringValue(); String parentVersion = parent.getVersion().getStringValue(); String parentRelativePath = parent.getRelativePath().getStringValue(); if (StringUtil.isEmptyOrSpaces(parentRelativePath)) parentRelativePath = "../pom.xml"; MavenId parentId = new MavenId(parentGroupId, parentArtifactId, parentVersion); parentDesc = new MavenParentDesc(parentId, parentRelativePath); } return process( myManager.getGeneralSettings(), MavenDomUtil.getVirtualFile(projectDom), parentDesc); }
private static <T> boolean processSettingsXml( @Nullable MavenProject mavenProject, @NotNull Processor<T> processor, @NotNull Project project, Function<? super MavenDomProfile, T> domProfileFunction) { MavenGeneralSettings settings = MavenProjectsManager.getInstance(project).getGeneralSettings(); for (VirtualFile each : settings.getEffectiveSettingsFiles()) { MavenDomSettingsModel settingsDom = MavenDomUtil.getMavenDomModel(project, each, MavenDomSettingsModel.class); if (settingsDom == null) continue; if (processProfiles(settingsDom.getProfiles(), mavenProject, processor, domProfileFunction)) return true; } return false; }
public static <T> boolean process( @NotNull MavenDomProjectModel projectDom, @NotNull final Processor<T> processor, @NotNull final Project project, @NotNull final Function<? super MavenDomProfile, T> domProfileFunction, @NotNull final Function<? super MavenDomProjectModel, T> projectDomFunction, final Set<MavenDomProjectModel> processed) { if (processed.contains(projectDom)) return true; processed.add(projectDom); MavenProject mavenProjectOrNull = MavenDomUtil.findProject(projectDom); if (processSettingsXml(mavenProjectOrNull, processor, project, domProfileFunction)) return true; if (processProject( projectDom, mavenProjectOrNull, processor, project, domProfileFunction, projectDomFunction)) return true; return processParentProjectFile( projectDom, processor, project, domProfileFunction, projectDomFunction, processed); }
private static <T> boolean processProject( MavenDomProjectModel projectDom, MavenProject mavenProjectOrNull, Processor<T> processor, Project project, Function<? super MavenDomProfile, T> domProfileFunction, Function<? super MavenDomProjectModel, T> projectDomFunction) { if (processProfilesXml( MavenDomUtil.getVirtualFile(projectDom), mavenProjectOrNull, processor, project, domProfileFunction)) { return true; } if (processProfiles( projectDom.getProfiles(), mavenProjectOrNull, processor, domProfileFunction)) return true; T t = projectDomFunction.fun(projectDom); return t == null ? false : processor.process(t); }