mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-70035 maven: report duplicate dependencies inside dependencyManagement block
This commit is contained in:
+38
-16
@@ -26,11 +26,14 @@ import com.intellij.util.containers.hash.HashSet;
|
||||
import com.intellij.util.xml.DomFileElement;
|
||||
import com.intellij.util.xml.highlighting.BasicDomElementsInspection;
|
||||
import com.intellij.util.xml.highlighting.DomElementAnnotationHolder;
|
||||
import gnu.trove.THashMap;
|
||||
import gnu.trove.THashSet;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.idea.maven.dom.DependencyConflictId;
|
||||
import org.jetbrains.idea.maven.dom.MavenDomBundle;
|
||||
import org.jetbrains.idea.maven.dom.MavenDomProjectProcessorUtils;
|
||||
import org.jetbrains.idea.maven.dom.MavenDomUtil;
|
||||
import org.jetbrains.idea.maven.dom.model.MavenDomDependencies;
|
||||
import org.jetbrains.idea.maven.dom.model.MavenDomDependency;
|
||||
import org.jetbrains.idea.maven.dom.model.MavenDomProjectModel;
|
||||
import org.jetbrains.idea.maven.project.MavenProject;
|
||||
@@ -47,11 +50,12 @@ public class MavenDuplicateDependenciesInspection extends BasicDomElementsInspec
|
||||
DomElementAnnotationHolder holder) {
|
||||
MavenDomProjectModel projectModel = domFileElement.getRootElement();
|
||||
|
||||
checkMavenProjectModel(projectModel, holder);
|
||||
checkManagedDependencies(projectModel, holder);
|
||||
checkDependencies(projectModel, holder);
|
||||
}
|
||||
|
||||
private static void checkMavenProjectModel(@NotNull MavenDomProjectModel projectModel,
|
||||
@NotNull DomElementAnnotationHolder holder) {
|
||||
private static void checkDependencies(@NotNull MavenDomProjectModel projectModel,
|
||||
@NotNull DomElementAnnotationHolder holder) {
|
||||
final Map<DependencyConflictId, Set<MavenDomDependency>> allDuplicates = getDuplicateDependenciesMap(projectModel);
|
||||
|
||||
for (MavenDomDependency dependency : projectModel.getDependencies().getDependencies()) {
|
||||
@@ -152,19 +156,7 @@ public class MavenDuplicateDependenciesInspection extends BasicDomElementsInspec
|
||||
|
||||
Processor<MavenDomProjectModel> collectProcessor = new Processor<MavenDomProjectModel>() {
|
||||
public boolean process(MavenDomProjectModel model) {
|
||||
for (MavenDomDependency dependency : model.getDependencies().getDependencies()) {
|
||||
DependencyConflictId mavenId = DependencyConflictId.create(dependency);
|
||||
if (mavenId != null) {
|
||||
if (allDependencies.containsKey(mavenId)) {
|
||||
allDependencies.get(mavenId).add(dependency);
|
||||
}
|
||||
else {
|
||||
Set<MavenDomDependency> dependencies = new HashSet<MavenDomDependency>();
|
||||
dependencies.add(dependency);
|
||||
allDependencies.put(mavenId, dependencies);
|
||||
}
|
||||
}
|
||||
}
|
||||
collect(allDependencies, model.getDependencies());
|
||||
return false;
|
||||
}
|
||||
};
|
||||
@@ -175,6 +167,36 @@ public class MavenDuplicateDependenciesInspection extends BasicDomElementsInspec
|
||||
return allDependencies;
|
||||
}
|
||||
|
||||
private static void collect(Map<DependencyConflictId, Set<MavenDomDependency>> duplicates, @NotNull MavenDomDependencies dependencies) {
|
||||
for (MavenDomDependency dependency : dependencies.getDependencies()) {
|
||||
DependencyConflictId mavenId = DependencyConflictId.create(dependency);
|
||||
if (mavenId == null) continue;
|
||||
|
||||
Set<MavenDomDependency> set = duplicates.get(mavenId);
|
||||
if (set == null) {
|
||||
set = new THashSet<MavenDomDependency>();
|
||||
duplicates.put(mavenId, set);
|
||||
}
|
||||
|
||||
set.add(dependency);
|
||||
}
|
||||
}
|
||||
|
||||
private static void checkManagedDependencies(@NotNull MavenDomProjectModel projectModel,
|
||||
@NotNull DomElementAnnotationHolder holder) {
|
||||
final Map<DependencyConflictId, Set<MavenDomDependency>> duplicates = new THashMap<DependencyConflictId, Set<MavenDomDependency>>();
|
||||
collect(duplicates, projectModel.getDependencyManagement().getDependencies());
|
||||
|
||||
for (Map.Entry<DependencyConflictId, Set<MavenDomDependency>> entry : duplicates.entrySet()) {
|
||||
Set<MavenDomDependency> set = entry.getValue();
|
||||
if (set.size() <= 1) continue;
|
||||
|
||||
for (MavenDomDependency dependency : set) {
|
||||
holder.createProblem(dependency, HighlightSeverity.WARNING, "Duplicated dependency");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public String getGroupDisplayName() {
|
||||
return MavenDomBundle.message("inspection.group");
|
||||
|
||||
+36
@@ -216,4 +216,40 @@ class MavenDuplicatedInspectionTest extends MavenDomTestCase {
|
||||
checkHighlighting(myProjectPom, true, false, true)
|
||||
}
|
||||
|
||||
public void testDuplicatedInManagedDependencies() {
|
||||
myFixture.enableInspections(MavenDuplicateDependenciesInspection)
|
||||
|
||||
createProjectPom("""
|
||||
<groupId>mavenParent</groupId>
|
||||
<artifactId>childA</artifactId>
|
||||
<version>1.0</version>
|
||||
|
||||
<dependencyManagement>
|
||||
<dependencies>
|
||||
<<warning>dependency</warning>>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>3.8.2</version>
|
||||
<type>jar</type>
|
||||
</dependency>
|
||||
|
||||
<<warning>dependency</warning>>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.0</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.0</version>
|
||||
<classifier>sources</classifier>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
""")
|
||||
|
||||
checkHighlighting()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user