IDEA-96937 Unused Maven dependencies are not downloaded and shown in red

This commit is contained in:
Sergey Evdokimov
2013-02-12 18:52:11 +04:00
parent 4eb0fb8893
commit 8998043feb
2 changed files with 139 additions and 1 deletions
@@ -26,6 +26,7 @@ import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import com.intellij.util.ArrayUtil;
import com.intellij.util.xml.ConvertContext;
import com.intellij.util.xml.DomElement;
import com.intellij.util.xml.DomUtil;
import com.intellij.util.xml.ResolvingConverter;
import gnu.trove.THashSet;
@@ -45,7 +46,7 @@ import java.io.File;
import java.util.Collection;
import java.util.Set;
public abstract class MavenArtifactCoordinatesConverter extends ResolvingConverter<String> {
public abstract class MavenArtifactCoordinatesConverter extends ResolvingConverter<String> implements MavenDomSoftAwareConverter {
public String fromString(@Nullable @NonNls String s, ConvertContext context) {
if (s == null) return null;
@@ -96,6 +97,28 @@ public abstract class MavenArtifactCoordinatesConverter extends ResolvingConvert
return ArrayUtil.append(super.getQuickFixes(context), new MyUpdateIndicesFix());
}
public boolean isSoft(@NotNull DomElement element) {
DomElement dependencyOrPluginElement = element.getParent();
if (dependencyOrPluginElement instanceof MavenDomDependency) {
DomElement dependencies = dependencyOrPluginElement.getParent();
if (dependencies instanceof MavenDomDependencies) {
if (dependencies.getParent() instanceof MavenDomDependencyManagement) {
return true;
}
}
}
else if (dependencyOrPluginElement instanceof MavenDomPlugin) {
DomElement pluginsElement = dependencyOrPluginElement.getParent();
if (pluginsElement instanceof MavenDomPlugins) {
if (pluginsElement.getParent() instanceof MavenDomPluginManagement) {
return true;
}
}
}
return false;
}
private ConverterStrategy selectStrategy(ConvertContext context) {
if (MavenDomUtil.getImmediateParent(context, MavenDomProjectModel.class) != null) {
return new ProjectStrategy();
@@ -0,0 +1,115 @@
/*
* Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.idea.maven.dom
/**
* @author Sergey Evdokimov
*/
class MavenDontCheckDependencyInManagementSectionTest extends MavenDomTestCase {
public void testHighlighting() {
importProject("""
<groupId>test</groupId>
<artifactId>m1</artifactId>
<version>1</version>
<dependencies>
<dependency>
<groupId>xxxx</groupId>
<artifactId>yyyy</artifactId>
<version>zzzz</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>xxxx</groupId>
<artifactId>yyyy</artifactId>
<version>zzzz</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>xxxx</groupId>
<artifactId>yyyy</artifactId>
<version>zzzz</version>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<plugin>
<groupId>xxxx</groupId>
<artifactId>yyyy</artifactId>
<version>zzzz</version>
</plugin>
</plugins>
</pluginManagement>
</build>
""")
createProjectPom("""
<groupId>test</groupId>
<artifactId>m1</artifactId>
<version>1</version>
<dependencies>
<dependency>
<groupId><error>xxxx</error></groupId>
<artifactId><error>yyyy</error></artifactId>
<version><error>zzzz</error></version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>xxxx</groupId>
<artifactId>yyyy</artifactId>
<version>zzzz</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId><error>xxxx</error></groupId>
<artifactId><error>yyyy</error></artifactId>
<version><error>zzzz</error></version>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<plugin>
<groupId>xxxx</groupId>
<artifactId>yyyy</artifactId>
<version>zzzz</version>
</plugin>
</plugins>
</pluginManagement>
</build>
""")
checkHighlighting(myProjectPom, true, false, true)
}
}