blob: 7e7f510e7d692af11e93daebbbc302ac76bd5f08 [file] [log] [blame]
/*
* Copyright 2000-2010 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.inspections;
import com.intellij.codeHighlighting.HighlightDisplayLevel;
import com.intellij.lang.annotation.HighlightSeverity;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.util.containers.MultiMap;
import com.intellij.util.containers.MultiMapBasedOnSet;
import com.intellij.util.xml.DomFileElement;
import com.intellij.util.xml.highlighting.BasicDomElementsInspection;
import com.intellij.util.xml.highlighting.DomElementAnnotationHolder;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.idea.maven.dom.MavenDomBundle;
import org.jetbrains.idea.maven.dom.model.MavenDomPlugin;
import org.jetbrains.idea.maven.dom.model.MavenDomProjectModel;
import java.util.Collection;
import java.util.Map;
public class MavenDuplicatePluginInspection extends BasicDomElementsInspection<MavenDomProjectModel> {
public MavenDuplicatePluginInspection() {
super(MavenDomProjectModel.class);
}
@Override
public void checkFileElement(DomFileElement<MavenDomProjectModel> domFileElement,
DomElementAnnotationHolder holder) {
MavenDomProjectModel projectModel = domFileElement.getRootElement();
MultiMap<Pair<String,String>, MavenDomPlugin> duplicates = new MultiMapBasedOnSet<Pair<String, String>, MavenDomPlugin>();
for (MavenDomPlugin plugin : projectModel.getBuild().getPlugins().getPlugins()) {
String groupId = plugin.getGroupId().getStringValue();
String artifactId = plugin.getArtifactId().getStringValue();
if (StringUtil.isEmptyOrSpaces(artifactId)) continue;
if ("".equals(groupId) || "org.apache.maven.plugins".equals(groupId) || "org.codehaus.mojo".equals(groupId)) {
groupId = null;
}
duplicates.putValue(Pair.create(groupId, artifactId), plugin);
}
for (Map.Entry<Pair<String,String>, Collection<MavenDomPlugin>> entry : duplicates.entrySet()) {
Collection<MavenDomPlugin> set = entry.getValue();
if (set.size() <= 1) continue;
for (MavenDomPlugin dependency : set) {
holder.createProblem(dependency, HighlightSeverity.WARNING, "Duplicated plugin declaration");
}
}
}
@NotNull
public String getGroupDisplayName() {
return MavenDomBundle.message("inspection.group");
}
@NotNull
public String getDisplayName() {
return MavenDomBundle.message("inspection.duplicate.plugin.declaration");
}
@NotNull
public String getShortName() {
return "MavenDuplicatePluginInspection";
}
@NotNull
public HighlightDisplayLevel getDefaultLevel() {
return HighlightDisplayLevel.WARNING;
}
}