");
if (first) {
- desc.append("| " + MavenUtil.formatHtmlImage(critical ? ERROR_ICON_URL : WARNING_ICON_URL) + " | ");
- desc.append("" + (critical ? "Errors" : "Warnings") + ": | ");
+ desc.append("" + MavenUtil.formatHtmlImage(ERROR_ICON_URL) + " | ");
+ desc.append("Problems: | ");
first = false;
}
else {
@@ -725,7 +711,7 @@ public class MavenProjectsStructure extends SimpleTreeStructure {
}
private String wrappedText(MavenProjectProblem each) {
- String text = each.getDescription();
+ String text = StringUtil.replace(each.getDescription(), new String[]{"<", ">"}, new String[]{"<", ">"});
StringBuffer result = new StringBuffer();
int count = 0;
for (int i = 0; i < text.length(); i++) {
@@ -742,14 +728,6 @@ public class MavenProjectsStructure extends SimpleTreeStructure {
return result.toString();
}
- private List collectProblems(boolean critical) {
- List result = new ArrayList();
- for (MavenProjectProblem each : myMavenProject.getProblems()) {
- if (critical == each.isCritical()) result.add(each);
- }
- return result;
- }
-
public void updateGoals() {
myLifecycleNode.updateGoals();
myPluginsNode.updateGoals();
@@ -1012,7 +990,7 @@ public class MavenProjectsStructure extends SimpleTreeStructure {
else {
setNameAndTooltip(myPluginInfo.getGoalPrefix(), null, myPlugin.getDisplayString());
}
- setNodeErrorLevel(myPluginInfo == null ? ErrorLevel.WARNING : ErrorLevel.NONE);
+ setNodeErrorLevel(myPluginInfo == null ? ErrorLevel.ERROR : ErrorLevel.NONE);
// there is no need to update goals since plugins do not change
if (hadPluginInfo || myPluginInfo == null) return;
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenId.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenId.java
index c10690507b01..929bcf1e5220 100644
--- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenId.java
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenId.java
@@ -16,6 +16,7 @@
package org.jetbrains.idea.maven.project;
import org.apache.maven.artifact.Artifact;
+import org.apache.maven.model.Model;
import java.io.Serializable;
@@ -32,6 +33,10 @@ public class MavenId implements Serializable {
this.myVersion = version;
}
+ public MavenId(Model model) {
+ this(model.getGroupId(), model.getArtifactId(), model.getVersion());
+ }
+
public MavenId(Artifact artifact) {
this(artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion());
}
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProject.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProject.java
index 8960ed7636eb..4060fabb74aa 100644
--- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProject.java
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProject.java
@@ -101,7 +101,6 @@ public class MavenProject {
if (updateLastReadStamp) newState.myLastReadStamp++;
- newState.myValid = readerResult.isValid;
newState.myActiveProfilesIds = readerResult.activeProfiles;
newState.myReadingProblems = readerResult.readingProblems;
newState.myLocalRepository = readerResult.localRepository;
@@ -346,8 +345,8 @@ public class MavenProject {
return MavenUtil.getProfilesXmlIoFile(myFile);
}
- public boolean hasErrors() {
- return !myState.myValid;
+ public boolean hasReadingProblems() {
+ return !myState.myReadingProblems.isEmpty();
}
public List getActiveProfilesIds() {
@@ -441,7 +440,7 @@ public class MavenProject {
getFile(),
getActiveProfilesIds(),
locator);
- MavenProjectChanges changes = set(result, false, result.isValid, false);
+ MavenProjectChanges changes = set(result, false, result.readingProblems.isEmpty(), false);
return Pair.create(changes, result.nativeMavenProject);
}
@@ -454,7 +453,7 @@ public class MavenProject {
getFile(),
getActiveProfilesIds(),
console);
- if (result == null || !result.isValid) return Pair.create(false, MavenProjectChanges.NONE);
+ if (result == null || !result.readingProblems.isEmpty()) return Pair.create(false, MavenProjectChanges.NONE);
MavenProjectChanges changes = setFolders(result);
return Pair.create(true, changes);
}
@@ -468,58 +467,62 @@ public class MavenProject {
if (state.myProblemsCache == null) {
synchronized (state) {
if (state.myProblemsCache == null) {
- state.myProblemsCache = collectProblems(state);
+ state.myProblemsCache = collectProblems(myFile, state);
}
}
}
return state.myProblemsCache;
}
- private static List collectProblems(State state) {
+ private static List collectProblems(VirtualFile file, State state) {
List result = new ArrayList();
- validateParent(state, result);
+ validateParent(file, state, result);
result.addAll(state.myReadingProblems);
for (Map.Entry each : state.myModulesPathsAndNames.entrySet()) {
if (LocalFileSystem.getInstance().findFileByPath(each.getKey()) == null) {
- result.add(new MavenProjectProblem(ProjectBundle.message("maven.project.problem.missingModule", each.getValue()), false));
+ result.add(createDependencyProblem(file, ProjectBundle.message("maven.project.problem.moduleNotFound", each.getValue())));
}
}
- validateDependencies(state, result);
- validateExtensions(state, result);
- validatePlugins(state, result);
+ validateDependencies(file, state, result);
+ validateExtensions(file, state, result);
+ validatePlugins(file, state, result);
return result;
}
- private static void validateParent(State state, List result) {
+ private static void validateParent(VirtualFile file, State state, List result) {
if (!isParentResolved(state)) {
- result.add(new MavenProjectProblem(ProjectBundle.message("maven.project.problem.parentNotFound", state.myParentId), true));
+ result.add(createDependencyProblem(file, ProjectBundle.message("maven.project.problem.parentNotFound", state.myParentId)));
}
}
- private static void validateDependencies(State state, List result) {
+ private static void validateDependencies(VirtualFile file, State state, List result) {
for (MavenArtifact each : getUnresolvedDependencies(state)) {
- result.add(new MavenProjectProblem(
- ProjectBundle.message("maven.project.problem.unresolvedDependency", each.getDisplayStringWithType()), false));
+ result.add(createDependencyProblem(file, ProjectBundle.message("maven.project.problem.unresolvedDependency",
+ each.getDisplayStringWithType())));
}
}
- private static void validateExtensions(State state, List result) {
+ private static void validateExtensions(VirtualFile file, State state, List result) {
for (MavenArtifact each : getUnresolvedExtensions(state)) {
- result.add(new MavenProjectProblem(
- ProjectBundle.message("maven.project.problem.unresolvedExtension", each.getDisplayStringSimple()), false));
+ result.add(createDependencyProblem(file, ProjectBundle.message("maven.project.problem.unresolvedExtension",
+ each.getDisplayStringSimple())));
}
}
- private static void validatePlugins(State state, List result) {
+ private static void validatePlugins(VirtualFile file, State state, List result) {
for (MavenPlugin each : getUnresolvedPlugins(state)) {
- result.add(new MavenProjectProblem(ProjectBundle.message("maven.project.problem.unresolvedPlugin", each), false));
+ result.add(createDependencyProblem(file, ProjectBundle.message("maven.project.problem.unresolvedPlugin", each)));
}
}
+ private static MavenProjectProblem createDependencyProblem(VirtualFile file, String description) {
+ return new MavenProjectProblem(file, description, MavenProjectProblem.ProblemType.DEPENDENCY);
+ }
+
private static boolean isParentResolved(State state) {
return !state.myUnresolvedArtifactIds.contains(state.myParentId);
}
@@ -817,8 +820,6 @@ public class MavenProject {
private static class State implements Cloneable, Serializable {
long myLastReadStamp = 0;
- boolean myValid;
-
MavenId myMavenId;
MavenId myParentId;
String myPackaging;
@@ -851,7 +852,7 @@ public class MavenProject {
List myRemoteRepositories;
List myActiveProfilesIds;
- List myReadingProblems;
+ Collection myReadingProblems;
Set myUnresolvedArtifactIds;
File myLocalRepository;
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectProblem.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectProblem.java
index 444de9d2e7ee..1c6636d9530b 100644
--- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectProblem.java
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectProblem.java
@@ -15,30 +15,67 @@
*/
package org.jetbrains.idea.maven.project;
+import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.openapi.vfs.VirtualFileManager;
+
import java.io.Serializable;
public class MavenProjectProblem implements Serializable {
+ public enum ProblemType {
+ SYNTAX, STRUCTURE, DEPENDENCY, PARENT, SETTINGS_OR_PROFILES;
+ }
+
+ private String myUrl;
private String myDescription;
- private boolean isCritical;
+ private ProblemType myType;
protected MavenProjectProblem() {
}
- public MavenProjectProblem(String description, boolean critical) {
+ public MavenProjectProblem(VirtualFile file, String description, ProblemType type) {
+ myUrl = file.getUrl();
myDescription = description;
- isCritical = critical;
+ myType = type;
+ }
+
+ public String getUrl() {
+ return myUrl;
}
public String getDescription() {
return myDescription;
}
- public boolean isCritical() {
- return isCritical;
+ public ProblemType getType() {
+ return myType;
+ }
+
+ public VirtualFile findFile() {
+ return VirtualFileManager.getInstance().findFileByUrl(myUrl);
}
@Override
public String toString() {
- return (isCritical ? "!!!" : "") + myDescription;
+ return myType + ":" + myDescription + ":" + myUrl;
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ MavenProjectProblem that = (MavenProjectProblem)o;
+
+ if (!myDescription.equals(that.myDescription)) return false;
+ if (myType != that.myType) return false;
+ if (!myUrl.equals(that.myUrl)) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ int result = myUrl.hashCode();
+ result = 31 * result + myDescription.hashCode();
+ result = 31 * result + myType.hashCode();
+ return result;
}
}
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectReader.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectReader.java
index a8fc06fde40e..e0289a658613 100644
--- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectReader.java
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectReader.java
@@ -17,7 +17,6 @@ package org.jetbrains.idea.maven.project;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.Pair;
-import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
@@ -57,17 +56,14 @@ import static com.intellij.openapi.util.text.StringUtil.isEmptyOrSpaces;
public class MavenProjectReader {
private static final String UNKNOWN = MavenId.UNKNOWN_VALUE;
- private final Map myRawModelsAndValidityCache = new THashMap();
+ private final Map myRawModelsAndProblemsCache = new THashMap();
public MavenProjectReaderResult readProject(MavenGeneralSettings generalSettings,
VirtualFile file,
List activeProfiles,
MavenProjectReaderProjectLocator locator) {
- Pair> readResult = doReadProjectModel(generalSettings,
- file,
- activeProfiles,
- new THashSet(),
- locator);
+ Pair> readResult =
+ doReadProjectModel(generalSettings, file, activeProfiles, new THashSet(), locator);
File basedir = getBaseDir(file);
Model model = expandProperties(readResult.first.model, basedir);
@@ -76,63 +72,55 @@ public class MavenProjectReader {
MavenProject mavenProject = new MavenProject(model);
mavenProject.setFile(new File(file.getPath()));
mavenProject.setActiveProfiles(readResult.second);
- JBMavenProjectHelper.setSourceRoots(mavenProject,
- Collections.singletonList(model.getBuild().getSourceDirectory()),
+ JBMavenProjectHelper.setSourceRoots(mavenProject, Collections.singletonList(model.getBuild().getSourceDirectory()),
Collections.singletonList(model.getBuild().getTestSourceDirectory()),
Collections.singletonList(model.getBuild().getScriptSourceDirectory()));
- boolean isValid = readResult.first.validity;
- List problems = new ArrayList();
- if (!isValid) {
- problems.add(new MavenProjectProblem(ProjectBundle.message("maven.project.problem.syntaxError"), true));
- }
- return new MavenProjectReaderResult(isValid,
- activeProfiles,
- problems,
- Collections.EMPTY_SET,
- generalSettings.getEffectiveLocalRepository(),
- mavenProject);
+ return new MavenProjectReaderResult(activeProfiles, readResult.first.problems, Collections.EMPTY_SET,
+ generalSettings.getEffectiveLocalRepository(), mavenProject);
}
private File getBaseDir(VirtualFile file) {
return new File(file.getParent().getPath());
}
- private Pair> doReadProjectModel(MavenGeneralSettings generalSettings,
+ private Pair> doReadProjectModel(MavenGeneralSettings generalSettings,
VirtualFile file,
List activeProfiles,
Set recursionGuard,
MavenProjectReaderProjectLocator locator) {
- ModelWithValidity modelWithValidity = myRawModelsAndValidityCache.get(file);
+ ModelWithProblems modelWithValidity = myRawModelsAndProblemsCache.get(file);
if (modelWithValidity == null) {
- modelWithValidity = doReadProjectModel(file, generalSettings);
- myRawModelsAndValidityCache.put(file, modelWithValidity);
+ modelWithValidity = doReadProjectModel(file, generalSettings, false);
+ myRawModelsAndProblemsCache.put(file, modelWithValidity);
}
Model model = modelWithValidity.model;
List activatedProfiles = applyProfiles(model, getBaseDir(file), activeProfiles);
repairModelHeader(model);
- if (!resolveInheritance(generalSettings, model, file, activeProfiles, recursionGuard, locator)) {
- modelWithValidity.validity = false; // todo ????????? changing cached value
- }
+ resolveInheritance(generalSettings, model, file, activeProfiles,
+ recursionGuard, locator, modelWithValidity.problems); // todo ????????? changing cached value
repairModelBody(model);
return Pair.create(modelWithValidity, activatedProfiles);
}
- private ModelWithValidity doReadProjectModel(VirtualFile file, MavenGeneralSettings generalSettings) {
+ private ModelWithProblems doReadProjectModel(VirtualFile file, MavenGeneralSettings generalSettings, boolean headerOnly) {
Model result = new Model();
+ LinkedHashSet problems = createProblemsList();
- Pair readXmlResult = readXml(file);
- Element xmlProject = readXmlResult.first.getChild("project");
+ Element xmlProject = readXml(file, problems, MavenProjectProblem.ProblemType.SYNTAX).getChild("project");
if (xmlProject == null) {
- return new ModelWithValidity(result, false);
+ return new ModelWithProblems(result, problems);
}
result.setModelVersion(findChildValueByPath(xmlProject, "modelVersion"));
result.setGroupId(findChildValueByPath(xmlProject, "groupId"));
result.setArtifactId(findChildValueByPath(xmlProject, "artifactId"));
result.setVersion(findChildValueByPath(xmlProject, "version"));
+
+ if (headerOnly) return new ModelWithProblems(result, problems);
+
result.setPackaging(findChildValueByPath(xmlProject, "packaging"));
result.setName(findChildValueByPath(xmlProject, "name"));
@@ -150,18 +138,14 @@ public class MavenProjectReader {
result.setParent(parent);
}
-
result.setBuild(new Build());
readModelAndBuild(result, result.getBuild(), xmlProject);
- Ref validity = new Ref(readXmlResult.second);
- result.setProfiles(collectProfiles(generalSettings, file, xmlProject, validity));
- return new ModelWithValidity(result, validity.get());
+ result.setProfiles(collectProfiles(generalSettings, file, xmlProject, problems));
+ return new ModelWithProblems(result, problems);
}
- private void readModelAndBuild(ModelBase mavenModelBase,
- BuildBase mavenBuildBase,
- Element xmlModel) {
+ private void readModelAndBuild(ModelBase mavenModelBase, BuildBase mavenBuildBase, Element xmlModel) {
mavenModelBase.setModules(findChildrenValuesByPath(xmlModel, "modules", "module"));
collectProperties(findChildByPath(xmlModel, "properties"), mavenModelBase);
@@ -199,15 +183,16 @@ public class MavenProjectReader {
return result;
}
- private List collectProfiles(MavenGeneralSettings generalSettings, VirtualFile file, Element xmlProject, Ref validity) {
+ private List collectProfiles(MavenGeneralSettings generalSettings,
+ VirtualFile projectFile,
+ Element xmlProject,
+ Collection problems) {
List result = new ArrayList();
collectProfiles(findChildrenByPath(xmlProject, "profiles", "profile"), result);
- VirtualFile profilesFile = MavenUtil.findProfilesXmlFile(file);
+ VirtualFile profilesFile = MavenUtil.findProfilesXmlFile(projectFile);
if (profilesFile != null) {
- Pair readResult = readXml(profilesFile);
- Element profilesFileElement = readResult.first;
- if (!readResult.second) validity.set(false);
+ Element profilesFileElement = readXml(profilesFile, problems, MavenProjectProblem.ProblemType.SETTINGS_OR_PROFILES);
Element rootElement = findChildByPath(profilesFileElement, "profiles");
if (rootElement == null) rootElement = findChildByPath(profilesFileElement, "profilesXml.profiles");
@@ -216,18 +201,18 @@ public class MavenProjectReader {
}
for (VirtualFile each : generalSettings.getEffectiveSettingsFiles()) {
- collectProfilesFromSettingsFile(each, result, validity);
+ collectProfilesFromSettingsFile(each, result, problems);
}
return result;
}
- private void collectProfilesFromSettingsFile(VirtualFile settingsFile, List result, Ref validity) {
+ private void collectProfilesFromSettingsFile(VirtualFile settingsFile,
+ List result,
+ Collection problems) {
if (settingsFile == null) return;
- Pair readResult = readXml(settingsFile);
- if (!readResult.second) validity.set(false);
-
- List xmlProfiles = findChildrenByPath(readResult.first, "settings.profiles", "profile");
+ Element readResult = readXml(settingsFile, problems, MavenProjectProblem.ProblemType.SETTINGS_OR_PROFILES);
+ List xmlProfiles = findChildrenByPath(readResult, "settings.profiles", "profile");
collectProfiles(xmlProfiles, result);
}
@@ -322,9 +307,9 @@ public class MavenProjectReader {
Profile eachExpandedProfile = expandedProfiles.get(i);
// todo hook for IDEADEV-38717
- assert eachExpandedProfile != null : "expanded profile not found";
- assert Comparing.equal(eachExpandedProfile.getId(), eachRawProfile.getId()) :
- "expected id: " + eachRawProfile.getId() + " was : " + eachExpandedProfile.getId();
+ MavenLog.LOG.assertTrue(eachExpandedProfile != null, "expanded profile not found");
+ MavenLog.LOG.assertTrue(Comparing.equal(eachExpandedProfile.getId(), eachRawProfile.getId()),
+ "expected id: " + eachRawProfile.getId() + " was : " + eachExpandedProfile.getId());
for (ProfileActivator eachActivator : getProfileActivators()) {
try {
@@ -360,12 +345,8 @@ public class MavenProjectReader {
return new ProfileActivator[0];
}
- return new ProfileActivator[]{
- new FileProfileActivator(),
- sysPropertyActivator,
- new JdkPrefixProfileActivator(),
- new OperatingSystemProfileActivator()
- };
+ return new ProfileActivator[]{new FileProfileActivator(), sysPropertyActivator, new JdkPrefixProfileActivator(),
+ new OperatingSystemProfileActivator()};
}
private void repairModelHeader(Model model) {
@@ -410,26 +391,19 @@ public class MavenProjectReader {
build.setFinalName("${project.artifactId}-${project.version}");
}
- build.setSourceDirectory(isEmptyOrSpaces(build.getSourceDirectory())
- ? "src/main/java"
- : build.getSourceDirectory());
- build.setTestSourceDirectory(isEmptyOrSpaces(build.getTestSourceDirectory())
- ? "src/test/java"
- : build.getTestSourceDirectory());
- build.setScriptSourceDirectory(isEmptyOrSpaces(build.getScriptSourceDirectory())
- ? "src/main/scripts"
- : build.getScriptSourceDirectory());
+ build.setSourceDirectory(isEmptyOrSpaces(build.getSourceDirectory()) ? "src/main/java" : build.getSourceDirectory());
+ build.setTestSourceDirectory(isEmptyOrSpaces(build.getTestSourceDirectory()) ? "src/test/java" : build.getTestSourceDirectory());
+ build
+ .setScriptSourceDirectory(isEmptyOrSpaces(build.getScriptSourceDirectory()) ? "src/main/scripts" : build.getScriptSourceDirectory());
build.setResources(repairResources(build.getResources(), "src/main/resources"));
build.setTestResources(repairResources(build.getTestResources(), "src/test/resources"));
build.setDirectory(isEmptyOrSpaces(build.getDirectory()) ? "target" : build.getDirectory());
- build.setOutputDirectory(isEmptyOrSpaces(build.getOutputDirectory())
- ? "${project.build.directory}/classes"
- : build.getOutputDirectory());
- build.setTestOutputDirectory(isEmptyOrSpaces(build.getTestOutputDirectory())
- ? "${project.build.directory}/test-classes"
- : build.getTestOutputDirectory());
+ build
+ .setOutputDirectory(isEmptyOrSpaces(build.getOutputDirectory()) ? "${project.build.directory}/classes" : build.getOutputDirectory());
+ build.setTestOutputDirectory(
+ isEmptyOrSpaces(build.getTestOutputDirectory()) ? "${project.build.directory}/test-classes" : build.getTestOutputDirectory());
}
private List repairResources(List resources, String defaultDir) {
@@ -453,68 +427,71 @@ public class MavenProjectReader {
return result;
}
- private boolean resolveInheritance(final MavenGeneralSettings generalSettings,
- final Model model,
- final VirtualFile file,
- final List activeProfiles,
- final Set recursionGuard,
- final MavenProjectReaderProjectLocator locator) {
- if (recursionGuard.contains(file)) return false;
+ private void resolveInheritance(final MavenGeneralSettings generalSettings,
+ final Model model,
+ final VirtualFile file,
+ final List activeProfiles,
+ final Set recursionGuard,
+ final MavenProjectReaderProjectLocator locator,
+ Collection problems) {
+ if (recursionGuard.contains(file)) {
+ problems.add(createProblem(file, ProjectBundle.message("maven.project.problem.recursiveInheritance"),
+ MavenProjectProblem.ProblemType.PARENT));
+ return;
+ }
recursionGuard.add(file);
try {
Parent parent = model.getParent();
final MavenParentDesc[] parentDesc = new MavenParentDesc[1];
if (parent != null) {
- MavenId parentId = new MavenId(parent.getGroupId(),
- parent.getArtifactId(),
- parent.getVersion());
+ MavenId parentId = new MavenId(parent.getGroupId(), parent.getArtifactId(), parent.getVersion());
if (parentId.equals(model.getGroupId(), model.getArtifactId(), model.getVersion())) {
- // self-inheritance protection
- return false;
+ problems.add(createProblem(file, ProjectBundle.message("maven.project.problem.selfInheritance"),
+ MavenProjectProblem.ProblemType.PARENT));
+ return;
}
parentDesc[0] = new MavenParentDesc(parentId, parent.getRelativePath());
}
- ModelWithValidity parentModelWithValidity = new MavenParentProjectFileProcessor() {
- @Nullable
- protected VirtualFile findManagedFile(@NotNull MavenId id) {
- return locator.findProjectFile(id);
- }
-
- @Override
- @Nullable
- protected ModelWithValidity processRelativeParent(VirtualFile parentFile) {
- ModelWithValidity result = super.processRelativeParent(parentFile);
- if (result == null) return null;
-
- MavenId parentId = parentDesc[0].getParentId();
- Model model = result.model;
- if (!(parentId.equals(model.getGroupId(), model.getArtifactId(), model.getVersion()))) {
- return null;
+ Pair parentModelWithProblems =
+ new MavenParentProjectFileProcessor>() {
+ @Nullable
+ protected VirtualFile findManagedFile(@NotNull MavenId id) {
+ return locator.findProjectFile(id);
}
- return result;
- }
- @Override
- protected ModelWithValidity processSuperParent(VirtualFile parentFile) {
- return null; // do not process superPom
- }
+ @Override
+ @Nullable
+ protected Pair processRelativeParent(VirtualFile parentFile) {
+ Model parentModel = doReadProjectModel(parentFile, generalSettings, true).model;
+ MavenId parentId = parentDesc[0].getParentId();
+ if (!parentId.equals(new MavenId(parentModel))) return null;
- @Override
- protected ModelWithValidity doProcessParent(VirtualFile parentFile) {
- return doReadProjectModel(generalSettings,
- parentFile,
- activeProfiles,
- recursionGuard,
- locator).first;
- }
- }.process(generalSettings, file, parentDesc[0]);
+ return super.processRelativeParent(parentFile);
+ }
- if (parentModelWithValidity == null) return true; // no parent or parent not found;
+ @Override
+ protected Pair processSuperParent(VirtualFile parentFile) {
+ return null; // do not process superPom
+ }
- new DefaultModelInheritanceAssembler().assembleModelInheritance(model, parentModelWithValidity.model);
- return parentModelWithValidity.validity;
+ @Override
+ protected Pair doProcessParent(VirtualFile parentFile) {
+ ModelWithProblems result = doReadProjectModel(generalSettings, parentFile, activeProfiles, recursionGuard, locator).first;
+ return Pair.create(parentFile, result);
+ }
+ }.process(generalSettings, file, parentDesc[0]);
+
+ if (parentModelWithProblems == null) return; // no parent or parent not found;
+ if (!parentModelWithProblems.second.problems.isEmpty()) {
+ problems.add(createProblem(parentModelWithProblems.first,
+ ProjectBundle.message("maven.project.problem.parentHasProblems",
+ new MavenId(parentModelWithProblems.second.model)),
+ MavenProjectProblem.ProblemType.PARENT));
+ }
+
+ new DefaultModelInheritanceAssembler().assembleModelInheritance(model, parentModelWithProblems.second.model);
}
finally {
recursionGuard.remove(file);
@@ -548,14 +525,29 @@ public class MavenProjectReader {
build.setScriptSourceDirectory(pathTranslator.alignToBaseDirectory(build.getScriptSourceDirectory(), basedir));
}
+ private MavenProjectProblem createStructureProblem(VirtualFile file, String description) {
+ return createProblem(file, description, MavenProjectProblem.ProblemType.STRUCTURE);
+ }
+
+ private MavenProjectProblem createSyntaxProblem(VirtualFile file, MavenProjectProblem.ProblemType type) {
+ return createProblem(file, ProjectBundle.message("maven.project.problem.syntaxError", file.getName()), type);
+ }
+
+ private MavenProjectProblem createProblem(VirtualFile file, String description, MavenProjectProblem.ProblemType type) {
+ return new MavenProjectProblem(file, description, type);
+ }
+
+ private LinkedHashSet createProblemsList() {
+ return new LinkedHashSet();
+ }
+
public MavenProjectReaderResult resolveProject(MavenGeneralSettings generalSettings,
MavenEmbedderWrapper embedder,
VirtualFile file,
List activeProfiles,
MavenProjectReaderProjectLocator locator) throws MavenProcessCanceledException {
MavenProject mavenProject = null;
- boolean isValid = true;
- List problems = new ArrayList();
+ Collection problems = createProblemsList();
Set unresolvedArtifactsIds = new THashSet();
try {
@@ -574,39 +566,32 @@ public class MavenProjectReader {
}
if (message != null) {
- problems.add(new MavenProjectProblem(message, true));
+ problems.add(createStructureProblem(file, message));
}
MavenLog.LOG.info(e);
MavenLog.printInTests(e); // print exception since we need to know if something wrong with our logic
}
if (mavenProject == null) {
- isValid = false;
-
if (problems.isEmpty()) {
- problems.add(new MavenProjectProblem(ProjectBundle.message("maven.project.problem.syntaxError"), true));
+ problems.add(createSyntaxProblem(file, MavenProjectProblem.ProblemType.SYNTAX));
}
mavenProject = readProject(generalSettings, file, activeProfiles, locator).nativeMavenProject;
}
- return new MavenProjectReaderResult(isValid,
- activeProfiles,
- problems,
- unresolvedArtifactsIds,
- embedder.getLocalRepositoryFile(),
- mavenProject);
+ return new MavenProjectReaderResult(activeProfiles, problems, unresolvedArtifactsIds, embedder.getLocalRepositoryFile(), mavenProject);
}
private Pair> doResolveProject(MavenEmbedderWrapper embedder,
VirtualFile file,
List profiles,
- List problems) throws MavenProcessCanceledException {
+ Collection problems) throws MavenProcessCanceledException {
MavenExecutionResult result = embedder.resolveProject(file, profiles);
- validate(result, problems);
+ validate(file, result, problems);
return Pair.create(result.getMavenProject(), result.getUnresolvedArtifactIds());
}
- private boolean validate(MavenExecutionResult r, List problems) {
+ private boolean validate(VirtualFile file, MavenExecutionResult r, Collection problems) {
for (Exception each : r.getExceptions()) {
MavenLog.LOG.info(each);
@@ -614,21 +599,19 @@ public class MavenProjectReader {
ModelValidationResult modelValidationResult = ((InvalidProjectModelException)each).getValidationResult();
if (modelValidationResult != null) {
for (Object eachValidationProblem : modelValidationResult.getMessages()) {
- problems.add(new MavenProjectProblem((String)eachValidationProblem, true));
+ problems.add(createStructureProblem(file, (String)eachValidationProblem));
}
}
else {
- problems.add(new MavenProjectProblem(each.getCause().getMessage(), true));
+ problems.add(createStructureProblem(file, each.getCause().getMessage()));
}
}
else if (each instanceof ProjectBuildingException) {
- String causeMessage = each.getCause() != null
- ? each.getCause().getMessage()
- : each.getMessage();
- problems.add(new MavenProjectProblem(causeMessage, true));
+ String causeMessage = each.getCause() != null ? each.getCause().getMessage() : each.getMessage();
+ problems.add(createStructureProblem(file, causeMessage));
}
else {
- problems.add(new MavenProjectProblem(each.getMessage(), true));
+ problems.add(createStructureProblem(file, each.getMessage()));
}
}
@@ -647,17 +630,13 @@ public class MavenProjectReader {
MavenConsoleHelper.printExecutionExceptions(console, result);
}
- List problems = new ArrayList();
- if (!validate(result, problems)) return null;
+ Collection problems = createProblemsList();
+ if (!validate(file, result, problems)) return null;
MavenProject project = result.getMavenProject();
if (project == null) return null;
- return new MavenProjectReaderResult(true,
- profiles,
- problems,
- result.getUnresolvedArtifactIds(),
- embedder.getLocalRepositoryFile(),
+ return new MavenProjectReaderResult(profiles, problems, result.getUnresolvedArtifactIds(), embedder.getLocalRepositoryFile(),
project);
}
catch (MavenProcessCanceledException e) {
@@ -670,7 +649,7 @@ public class MavenProjectReader {
}
}
- private Pair readXml(VirtualFile file) {
+ private Element readXml(final VirtualFile file, final Collection problems, final MavenProjectProblem.ProblemType type) {
final LinkedList stack = new LinkedList();
final Element root = new Element("root");
@@ -680,24 +659,16 @@ public class MavenProjectReader {
}
catch (IOException e) {
MavenLog.LOG.warn("Cannot read the pom file: " + e);
- return Pair.create(root, false);
+ problems.add(createProblem(file, e.getMessage(), type));
+ return root;
}
- final boolean[] validity = new boolean[]{true};
-
XmlBuilderDriver driver = new XmlBuilderDriver(text);
XmlBuilder builder = new XmlBuilder() {
- public void doctype(@Nullable CharSequence publicId,
- @Nullable CharSequence systemId,
- int startOffset,
- int endOffset) {
+ public void doctype(@Nullable CharSequence publicId, @Nullable CharSequence systemId, int startOffset, int endOffset) {
}
- public ProcessingOrder startTag(CharSequence localName,
- String namespace,
- int startoffset,
- int endoffset,
- int headerEndOffset) {
+ public ProcessingOrder startTag(CharSequence localName, String namespace, int startoffset, int endoffset, int headerEndOffset) {
String name = localName.toString();
if (StringUtil.isEmptyOrSpaces(name)) return ProcessingOrder.TAGS;
@@ -738,12 +709,12 @@ public class MavenProjectReader {
}
public void error(String message, int startOffset, int endOffset) {
- validity[0] = false;
+ problems.add(createSyntaxProblem(file, type));
}
};
driver.build(builder);
- return Pair.create(root, validity[0]);
+ return root;
}
private Element findChildByPath(Element element, String path) {
@@ -790,13 +761,13 @@ public class MavenProjectReader {
return result;
}
- private static class ModelWithValidity {
+ private static class ModelWithProblems {
public Model model;
- public boolean validity;
+ public Collection problems;
- private ModelWithValidity(Model model, boolean validity) {
+ private ModelWithProblems(Model model, Collection problems) {
this.model = model;
- this.validity = validity;
+ this.problems = problems;
}
}
}
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectReaderResult.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectReaderResult.java
index 7bc148c9ef6d..1563e8d19fa9 100644
--- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectReaderResult.java
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectReaderResult.java
@@ -16,27 +16,24 @@
package org.jetbrains.idea.maven.project;
import org.apache.maven.project.MavenProject;
-import org.jetbrains.idea.maven.project.MavenId;
import java.io.File;
+import java.util.Collection;
import java.util.List;
import java.util.Set;
public class MavenProjectReaderResult {
- public boolean isValid;
public List activeProfiles;
- public List readingProblems;
+ public Collection readingProblems;
public Set unresolvedArtifactIds;
public File localRepository;
public MavenProject nativeMavenProject;
- public MavenProjectReaderResult(boolean valid,
- List activeProfiles,
- List readingProblems,
+ public MavenProjectReaderResult(List activeProfiles,
+ Collection readingProblems,
Set unresolvedArtifactIds,
File localRepository,
MavenProject nativeMavenProject) {
- isValid = valid;
this.activeProfiles = activeProfiles;
this.readingProblems = readingProblems;
this.unresolvedArtifactIds = unresolvedArtifactIds;
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java
index c2123bd15039..ac2d361810fd 100644
--- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java
@@ -36,6 +36,7 @@ import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VirtualFileManager;
+import com.intellij.problems.WolfTheProblemSolver;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import com.intellij.util.EventDispatcher;
@@ -324,7 +325,7 @@ public class MavenProjectsManager extends SimpleProjectComponent implements Pers
Iterator it = toResolve.iterator();
while (it.hasNext()) {
MavenProject each = it.next();
- if (each.hasErrors()) it.remove();
+ if (each.hasReadingProblems()) it.remove();
}
if (haveChanges(toImport) || !deleted.isEmpty()) {
@@ -362,7 +363,7 @@ public class MavenProjectsManager extends SimpleProjectComponent implements Pers
}
private boolean shouldScheduleProject(Pair projectWithChanges) {
- return !projectWithChanges.first.hasErrors() && projectWithChanges.second.hasChanges();
+ return !projectWithChanges.first.hasReadingProblems() && projectWithChanges.second.hasChanges();
}
private void processMessage(Object message) {
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenProblemFileHighlighter.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenProblemFileHighlighter.java
new file mode 100644
index 000000000000..a659efb12e5b
--- /dev/null
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenProblemFileHighlighter.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2000-2009 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.utils;
+
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.util.Condition;
+import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.psi.PsiFile;
+import com.intellij.psi.PsiManager;
+import org.jetbrains.idea.maven.dom.MavenDomUtil;
+
+public class MavenProblemFileHighlighter implements Condition {
+ private final Project myProject;
+
+ public MavenProblemFileHighlighter(Project project) {
+ myProject = project;
+ }
+
+ public boolean value(VirtualFile file) {
+ PsiFile psiFile = PsiManager.getInstance(myProject).findFile(file);
+ return psiFile != null && MavenDomUtil.isMavenFile(psiFile);
+ }
+}
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenRehighlighter.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenRehighlighter.java
new file mode 100644
index 000000000000..f319b0cf4f8d
--- /dev/null
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenRehighlighter.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2000-2009 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.utils;
+
+import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer;
+import com.intellij.openapi.application.ApplicationManager;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.util.Pair;
+import com.intellij.psi.PsiManager;
+import com.intellij.psi.impl.PsiModificationTrackerImpl;
+import org.jetbrains.idea.maven.project.MavenProject;
+import org.jetbrains.idea.maven.project.MavenProjectChanges;
+import org.jetbrains.idea.maven.project.MavenProjectsManager;
+import org.jetbrains.idea.maven.project.MavenProjectsTree;
+import org.jetbrains.idea.maven.utils.MavenUtil;
+import org.jetbrains.idea.maven.utils.SimpleProjectComponent;
+
+import java.util.List;
+
+public class MavenRehighlighter extends SimpleProjectComponent {
+ protected MavenRehighlighter(Project project) {
+ super(project);
+ }
+
+ public void initComponent() {
+ MavenProjectsManager m = MavenProjectsManager.getInstance(myProject);
+ m.addManagerListener(new MavenProjectsManager.Listener() {
+ public void activated() {
+ rehighlight(myProject);
+ }
+
+ public void scheduledImportsChanged() {
+ }
+ });
+ m.addProjectsTreeListener(new MavenProjectsTree.ListenerAdapter() {
+ public void projectsUpdated(List> updated, List deleted, Object message) {
+ rehighlight(myProject);
+ }
+
+ public void projectResolved(Pair projectWithChanges,
+ org.apache.maven.project.MavenProject nativeMavenProject,
+ Object message) {
+ rehighlight(myProject);
+ }
+
+ public void pluginsResolved(MavenProject project) {
+ rehighlight(myProject);
+ }
+
+ public void foldersResolved(Pair projectWithChanges, Object message) {
+ rehighlight(myProject);
+ }
+
+ public void artifactsDownloaded(MavenProject project) {
+ rehighlight(myProject);
+ }
+ });
+ }
+
+ public static void rehighlight(final Project project) {
+ MavenUtil.invokeLater(project, new Runnable() {
+ public void run() {
+ ApplicationManager.getApplication().runWriteAction(new Runnable() {
+ public void run() {
+ ((PsiModificationTrackerImpl)PsiManager.getInstance(project).getModificationTracker()).incCounter();
+ DaemonCodeAnalyzer.getInstance(project).restart();
+ }
+ });
+ }
+ });
+ }
+}
diff --git a/plugins/maven/src/main/resources/DomBundle.properties b/plugins/maven/src/main/resources/DomBundle.properties
index 092a58d9b9af..d05b3c5fef93 100644
--- a/plugins/maven/src/main/resources/DomBundle.properties
+++ b/plugins/maven/src/main/resources/DomBundle.properties
@@ -4,4 +4,5 @@ fix.create.module=Create Module
fix.create.module.with.parent=Create Module with Parent
fix.update.indices=Update Maven Indices
fix.parent.path=Fix relative path
+fix.open.file=Open ''{0}''
intention.choose.file=Choose File
diff --git a/plugins/maven/src/main/resources/META-INF/plugin.xml b/plugins/maven/src/main/resources/META-INF/plugin.xml
index 38309d9df6ed..02897c9a24ba 100644
--- a/plugins/maven/src/main/resources/META-INF/plugin.xml
+++ b/plugins/maven/src/main/resources/META-INF/plugin.xml
@@ -34,6 +34,8 @@
+
+
@@ -120,6 +122,9 @@
org.jetbrains.idea.maven.utils.MavenImportNotifier
+
+ org.jetbrains.idea.maven.utils.MavenRehighlighter
+
diff --git a/plugins/maven/src/main/resources/ProjectBundle.properties b/plugins/maven/src/main/resources/ProjectBundle.properties
index d563458aeb77..1b43705f9190 100644
--- a/plugins/maven/src/main/resources/ProjectBundle.properties
+++ b/plugins/maven/src/main/resources/ProjectBundle.properties
@@ -65,12 +65,15 @@ maven.ignore.edit=Edit Ignored Files...
maven.profile.activate=Activate
maven.profile.deactivate=Deactivate
-maven.project.problem.syntaxError=Pom file has syntax errors.
-maven.project.problem.parentNotFound=Parent ''{0}'' not found.
-maven.project.problem.missingModule=Missing module: ''{0}''.
-maven.project.problem.unresolvedDependency=Unresolved dependency: ''{0}''.
-maven.project.problem.unresolvedExtension=Unresolved build extension: ''{0}''.
-maven.project.problem.unresolvedPlugin=Unresolved plugin: ''{0}''.
+maven.project.problem.syntaxError=''{0}'' has syntax errors
+maven.project.problem.recursiveInheritance=Recursive inheritance found
+maven.project.problem.selfInheritance=Self-inheritance found
+maven.project.problem.parentHasProblems=Parent ''{0}'' has problems
+maven.project.problem.parentNotFound=Parent ''{0}'' not found
+maven.project.problem.moduleNotFound=Module ''{0}'' not found
+maven.project.problem.unresolvedDependency=Unresolved dependency: ''{0}''
+maven.project.problem.unresolvedExtension=Unresolved build extension: ''{0}''
+maven.project.problem.unresolvedPlugin=Unresolved plugin: ''{0}''
maven.tab.general=General
diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenImportingTestCase.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenImportingTestCase.java
index f841899353a3..0b13a8d89153 100644
--- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenImportingTestCase.java
+++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenImportingTestCase.java
@@ -348,7 +348,7 @@ public abstract class MavenImportingTestCase extends MavenTestCase {
myProjectsManager.importProjects();
for (MavenProject each : myProjectsTree.getProjects()) {
- if (each.hasErrors()) {
+ if (each.hasReadingProblems()) {
System.out.println(each + " has problems: " + each.getProblems());
}
}
diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenDomTestCase.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenDomTestCase.java
index a758b1eb2575..4dc6ccd15164 100644
--- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenDomTestCase.java
+++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenDomTestCase.java
@@ -92,12 +92,17 @@ public abstract class MavenDomTestCase extends MavenImportingTestCase {
return PsiManager.getInstance(myProject).findFile(f);
}
- private void configTest(VirtualFile f) throws IOException {
+ protected void configTest(VirtualFile f) throws IOException {
if (Comparing.equal(myConfigTimestamps.get(f), f.getModificationStamp())) return;
myCodeInsightFixture.configureFromExistingVirtualFile(f);
myConfigTimestamps.put(f, f.getModificationStamp());
}
+ protected void type(VirtualFile f, char c) throws IOException {
+ configTest(f);
+ myCodeInsightFixture.type(c);
+ }
+
protected PsiReference getReferenceAtCaret(VirtualFile f) throws IOException {
configTest(f);
return findPsiFile(f).findReferenceAt(getEditorOffset(f));
diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenModelValidationTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenModelValidationTest.java
index b569aae77fbc..b2b9350842a7 100644
--- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenModelValidationTest.java
+++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenModelValidationTest.java
@@ -91,4 +91,184 @@ public class MavenModelValidationTest extends MavenDomWithIndicesTestCase {
"<version>");
checkHighlighting();
}
+
+ public void testAddingSettingsXmlReadingProblemsToProjectTag() throws Exception {
+ VfsUtil.saveText(myProjectPom,
+ "" +
+ " 4.0.0" +
+ " test" +
+ " project" +
+ " 1" +
+ "");
+ updateSettingsXml("<<<");
+
+ myProjectsManager.forceUpdateAllProjectsOrFindAllAvailablePomFiles();
+ waitForReadingCompletion();
+
+ VfsUtil.saveText(myProjectPom,
+ "<project>" +
+ " 4.0.0" +
+ " test" +
+ " project" +
+ " 1" +
+ "");
+ checkHighlighting();
+ }
+
+ public void testAddingProfilesXmlReadingProblemsToProjectTag() throws Exception {
+ VfsUtil.saveText(myProjectPom,
+ "" +
+ " 4.0.0" +
+ " test" +
+ " project" +
+ " 1" +
+ "");
+ createProfilesXml("<<<");
+
+ myProjectsManager.forceUpdateAllProjectsOrFindAllAvailablePomFiles();
+ waitForReadingCompletion();
+
+ VfsUtil.saveText(myProjectPom,
+ "<project>" +
+ " 4.0.0" +
+ " test" +
+ " project" +
+ " 1" +
+ "");
+ checkHighlighting();
+ }
+
+ public void testAddingStructureReadingProblemsToParentTag() throws Exception {
+ VfsUtil.saveText(myProjectPom,
+ "" +
+ " 4.0.0" +
+ " test" +
+ " project" +
+ " 1" +
+ " " +
+ " test" +
+ " project" +
+ " 1" +
+ " " +
+ "");
+ myProjectsManager.forceUpdateAllProjectsOrFindAllAvailablePomFiles();
+ waitForReadingCompletion();
+
+ VfsUtil.saveText(myProjectPom,
+ "" +
+ " 4.0.0" +
+ " test" +
+ " project" +
+ " 1" +
+ " <parent>" +
+ " test" +
+ " project" +
+ " 1" +
+ " " +
+ "");
+ checkHighlighting();
+ }
+
+ public void testAddingParentReadingProblemsToParentTag() throws Exception {
+ createModulePom("parent",
+ "test" +
+ "parent" +
+ "1" +
+ "<<<");
+
+ VfsUtil.saveText(myProjectPom,
+ "" +
+ " 4.0.0" +
+ " test" +
+ " project" +
+ " 1" +
+ " " +
+ " test" +
+ " parent" +
+ " 1" +
+ " parent/pom.xml" +
+ " " +
+ "");
+ myProjectsManager.forceUpdateAllProjectsOrFindAllAvailablePomFiles();
+ waitForReadingCompletion();
+
+ VfsUtil.saveText(myProjectPom,
+ "" +
+ " 4.0.0" +
+ " test" +
+ " project" +
+ " 1" +
+ " <parent>" +
+ " test" +
+ " parent" +
+ " 1" +
+ " parent/pom.xml" +
+ " " +
+ "");
+ checkHighlighting();
+ }
+
+ public void testDoNotAddReadingSyntaxProblemsToProjectTag() throws Exception {
+ VfsUtil.saveText(myProjectPom,
+ "" +
+ " 4.0.0" +
+ " test" +
+ " project" +
+ " 1" +
+ " <" +
+ "");
+ myProjectsManager.forceUpdateAllProjectsOrFindAllAvailablePomFiles();
+ waitForReadingCompletion();
+
+ VfsUtil.saveText(myProjectPom,
+ "" +
+ " 4.0.0" +
+ " test" +
+ " project" +
+ " 1" +
+ " <" +
+ "</project>");
+ checkHighlighting();
+ }
+
+ public void testDoNotAddDependencyAndModuleProblemsToProjectTag() throws Exception {
+ VfsUtil.saveText(myProjectPom,
+ "" +
+ " 4.0.0" +
+ " test" +
+ " project" +
+ " 1" +
+ " " +
+ " foo" +
+ " " +
+ " " +
+ " " +
+ " xxx" +
+ " yyy" +
+ " xxx" +
+ " " +
+ " " +
+ "");
+ myProjectsManager.forceUpdateAllProjectsOrFindAllAvailablePomFiles();
+ waitForReadingCompletion();
+
+ VfsUtil.saveText(myProjectPom,
+ "" +
+ " 4.0.0" +
+ " test" +
+ " project" +
+ " 1" +
+ " " +
+ " foo" +
+ " " +
+ " " +
+ " " +
+ " xxx" +
+ " yyy" +
+ " xxx" +
+ " " +
+ " " +
+ "");
+ checkHighlighting();
+ }
}
diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenParentCompletionAndResolutionTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenParentCompletionAndResolutionTest.java
index 451d589b11a0..c07216cbeab0 100644
--- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenParentCompletionAndResolutionTest.java
+++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenParentCompletionAndResolutionTest.java
@@ -260,13 +260,17 @@ public class MavenParentCompletionAndResolutionTest extends MavenDomWithIndicesT
public void testHighlightingUnknownValues() throws Throwable {
importProject("test" +
"project" +
- "1" +
+ "1");
- "" +
- " xxx" +
- " xxx" +
- " xxx" +
- "");
+ createProjectPom("test" +
+ "project" +
+ "1" +
+
+ "" +
+ " xxx" +
+ " xxx" +
+ " xxx" +
+ "");
checkHighlighting();
}
@@ -310,14 +314,18 @@ public class MavenParentCompletionAndResolutionTest extends MavenDomWithIndicesT
public void testHighlightingInvalidRelativePath() throws Throwable {
importProject("test" +
"project" +
- "1" +
+ "1");
- "" +
- " junit" +
- " junit" +
- " 4.0" +
- " parent/pom.xml" +
- "");
+ createProjectPom("test" +
+ "project" +
+ "1" +
+
+ "" +
+ " junit" +
+ " junit" +
+ " 4.0" +
+ " parent/pom.xml" +
+ "");
checkHighlighting();
}
diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenTypingTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenTypingTest.java
index 8c61187f7546..ec69af152676 100644
--- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenTypingTest.java
+++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenTypingTest.java
@@ -241,9 +241,7 @@ public class MavenTypingTest extends MavenDomTestCase {
}
private void assertTypeResultInRegularFile(VirtualFile f, char c, String expected) throws IOException {
- myCodeInsightFixture.configureFromExistingVirtualFile(f);
- myCodeInsightFixture.type(c);
-
+ type(f, c);
myCodeInsightFixture.checkResult(expected);
}
diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/AddingDependencyTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/AddingDependencyTest.java
similarity index 97%
rename from plugins/maven/src/test/java/org/jetbrains/idea/maven/AddingDependencyTest.java
rename to plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/AddingDependencyTest.java
index eaebec2a4eed..9ca0a037b7cc 100644
--- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/AddingDependencyTest.java
+++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/AddingDependencyTest.java
@@ -13,9 +13,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.jetbrains.idea.maven;
+package org.jetbrains.idea.maven.importing;
import com.intellij.util.io.ReadOnlyAttributeUtil;
+import org.jetbrains.idea.maven.MavenImportingTestCase;
import org.jetbrains.idea.maven.indices.MavenCustomRepositoryHelper;
import org.jetbrains.idea.maven.project.MavenArtifact;
import org.jetbrains.idea.maven.project.MavenId;
diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/ArchetypesTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/ArchetypesTest.java
similarity index 96%
rename from plugins/maven/src/test/java/org/jetbrains/idea/maven/ArchetypesTest.java
rename to plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/ArchetypesTest.java
index 211f8fb552a5..795174854eaa 100644
--- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/ArchetypesTest.java
+++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/ArchetypesTest.java
@@ -13,10 +13,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.jetbrains.idea.maven;
+package org.jetbrains.idea.maven.importing;
import com.intellij.openapi.progress.EmptyProgressIndicator;
import gnu.trove.THashMap;
+import org.jetbrains.idea.maven.MavenTestCase;
import org.jetbrains.idea.maven.execution.MavenExecutor;
import org.jetbrains.idea.maven.execution.MavenExternalExecutor;
import org.jetbrains.idea.maven.execution.MavenRunnerParameters;
diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/ArtifactsDownloadingTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/ArtifactsDownloadingTest.java
similarity index 97%
rename from plugins/maven/src/test/java/org/jetbrains/idea/maven/ArtifactsDownloadingTest.java
rename to plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/ArtifactsDownloadingTest.java
index ae3ded084790..dcf777d169b4 100644
--- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/ArtifactsDownloadingTest.java
+++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/ArtifactsDownloadingTest.java
@@ -13,8 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.jetbrains.idea.maven;
+package org.jetbrains.idea.maven.importing;
+import org.jetbrains.idea.maven.MavenImportingTestCase;
import org.jetbrains.idea.maven.indices.MavenCustomRepositoryHelper;
import java.io.File;
diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/DependenciesImportingTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/DependenciesImportingTest.java
similarity index 99%
rename from plugins/maven/src/test/java/org/jetbrains/idea/maven/DependenciesImportingTest.java
rename to plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/DependenciesImportingTest.java
index cf37de561928..6a484519697d 100644
--- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/DependenciesImportingTest.java
+++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/DependenciesImportingTest.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.jetbrains.idea.maven;
+package org.jetbrains.idea.maven.importing;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.roots.*;
@@ -23,6 +23,7 @@ import com.intellij.openapi.roots.libraries.LibraryTable;
import com.intellij.openapi.roots.libraries.LibraryTablesRegistrar;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VirtualFile;
+import org.jetbrains.idea.maven.MavenImportingTestCase;
import org.jetbrains.idea.maven.indices.MavenCustomRepositoryHelper;
import org.jetbrains.idea.maven.project.MavenProject;
diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/DependenciesManagementTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/DependenciesManagementTest.java
similarity index 98%
rename from plugins/maven/src/test/java/org/jetbrains/idea/maven/DependenciesManagementTest.java
rename to plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/DependenciesManagementTest.java
index 020b1f72b448..dd7d576b11e6 100644
--- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/DependenciesManagementTest.java
+++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/DependenciesManagementTest.java
@@ -13,9 +13,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.jetbrains.idea.maven;
+package org.jetbrains.idea.maven.importing;
import com.intellij.openapi.vfs.VirtualFile;
+import org.jetbrains.idea.maven.MavenImportingTestCase;
import java.io.File;
import java.util.Arrays;
@@ -128,7 +129,7 @@ public class DependenciesManagementTest extends MavenImportingTestCase {
// maven doesn't expect imported pom to be in the reactor,
// when it is fixed, let us know
- assertTrue(myProjectsManager.findProject(project).hasErrors());
+ assertTrue(myProjectsManager.findProject(project).hasReadingProblems());
assertModuleLibDeps("project");
// actually should be
diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/FoldersImportingTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/FoldersImportingTest.java
similarity index 99%
rename from plugins/maven/src/test/java/org/jetbrains/idea/maven/FoldersImportingTest.java
rename to plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/FoldersImportingTest.java
index bf664815f57c..4921cbd83d1e 100644
--- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/FoldersImportingTest.java
+++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/FoldersImportingTest.java
@@ -13,11 +13,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.jetbrains.idea.maven;
+package org.jetbrains.idea.maven.importing;
import com.intellij.openapi.roots.CompilerModuleExtension;
import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.vfs.VirtualFile;
+import org.jetbrains.idea.maven.MavenImportingTestCase;
import org.jetbrains.idea.maven.importing.MavenDefaultModifiableModelsProvider;
import org.jetbrains.idea.maven.importing.MavenRootModelAdapter;
import org.jetbrains.idea.maven.indices.MavenCustomRepositoryHelper;
diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/GroovyImporterTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/GroovyImporterTest.java
similarity index 99%
rename from plugins/maven/src/test/java/org/jetbrains/idea/maven/GroovyImporterTest.java
rename to plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/GroovyImporterTest.java
index e1fd98cb1e96..450aa150ff63 100644
--- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/GroovyImporterTest.java
+++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/GroovyImporterTest.java
@@ -2,10 +2,11 @@
* Copyright (c) 2000-2007 JetBrains s.r.o. All Rights Reserved.
*/
-package org.jetbrains.idea.maven;
+package org.jetbrains.idea.maven.importing;
import com.intellij.openapi.roots.OrderRootType;
import com.intellij.openapi.roots.libraries.Library;
+import org.jetbrains.idea.maven.MavenImportingTestCase;
import org.jetbrains.idea.maven.importing.MavenDefaultModifiableModelsProvider;
import org.jetbrains.idea.maven.importing.MavenRootModelAdapter;
import org.jetbrains.plugins.groovy.config.GroovyConfigUtils;
diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/IgnoresImportingTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/IgnoresImportingTest.java
similarity index 97%
rename from plugins/maven/src/test/java/org/jetbrains/idea/maven/IgnoresImportingTest.java
rename to plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/IgnoresImportingTest.java
index 7acf2aaae505..16f51f1e36b5 100644
--- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/IgnoresImportingTest.java
+++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/IgnoresImportingTest.java
@@ -13,9 +13,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.jetbrains.idea.maven;
+package org.jetbrains.idea.maven.importing;
import com.intellij.openapi.vfs.VirtualFile;
+import org.jetbrains.idea.maven.MavenImportingTestCase;
import java.util.Collections;
import java.util.concurrent.atomic.AtomicInteger;
diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/InvalidProjectImportingTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/InvalidProjectImportingTest.java
similarity index 93%
rename from plugins/maven/src/test/java/org/jetbrains/idea/maven/InvalidProjectImportingTest.java
rename to plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/InvalidProjectImportingTest.java
index 12ae0281ebad..5189db5dd78c 100644
--- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/InvalidProjectImportingTest.java
+++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/InvalidProjectImportingTest.java
@@ -13,8 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.jetbrains.idea.maven;
+package org.jetbrains.idea.maven.importing;
+import org.jetbrains.idea.maven.MavenImportingTestCase;
import org.jetbrains.idea.maven.indices.MavenCustomRepositoryHelper;
import org.jetbrains.idea.maven.project.MavenProject;
import org.jetbrains.idea.maven.project.MavenProjectProblem;
@@ -28,7 +29,7 @@ public class InvalidProjectImportingTest extends MavenImportingTestCase {
assertModules("project");
MavenProject root = getRootProjects().get(0);
- assertProblems(root, "Pom file has syntax errors.");
+ assertProblems(root, "'pom.xml' has syntax errors");
}
public void testUndefinedPropertyInHeader() throws Exception {
@@ -55,7 +56,7 @@ public class InvalidProjectImportingTest extends MavenImportingTestCase {
assertModules("project");
MavenProject root = getRootProjects().get(0);
- assertProblems(root, "Parent 'test:parent:1' not found.");
+ assertProblems(root, "Parent 'test:parent:1' not found");
}
public void testUnresolvedParentForInvalidProject() throws Exception {
@@ -76,9 +77,9 @@ public class InvalidProjectImportingTest extends MavenImportingTestCase {
MavenProject root = getRootProjects().get(0);
assertProblems(root,
- "Parent 'test:parent:1' not found.",
+ "Parent 'test:parent:1' not found",
"Packaging 'jar' is invalid. Aggregator projects require 'pom' as packaging.",
- "Missing module: 'foo'.");
+ "Module 'foo' not found");
}
public void testMissingModules() throws Exception {
@@ -94,7 +95,7 @@ public class InvalidProjectImportingTest extends MavenImportingTestCase {
assertModules("project");
MavenProject root = getRootProjects().get(0);
- assertProblems(root, "Missing module: 'foo'.");
+ assertProblems(root, "Module 'foo' not found");
}
public void testInvalidProjectModel() throws Exception {
@@ -137,8 +138,7 @@ public class InvalidProjectImportingTest extends MavenImportingTestCase {
MavenProject root = getRootProjects().get(0);
assertProblems(root);
- assertProblems(getModules(root).get(0),
- "Pom file has syntax errors.");
+ assertProblems(getModules(root).get(0), "'pom.xml' has syntax errors");
}
public void testSeveratInvalidModulesAndWithSameName() throws Exception {
@@ -316,10 +316,10 @@ public class InvalidProjectImportingTest extends MavenImportingTestCase {
assertProblems(root);
assertProblems(getModules(root).get(0),
- "Unresolved dependency: 'xxx:xxx:jar:1'.",
- "Unresolved dependency: 'yyy:yyy:jar:2'.");
+ "Unresolved dependency: 'xxx:xxx:jar:1'",
+ "Unresolved dependency: 'yyy:yyy:jar:2'");
assertProblems(getModules(root).get(1),
- "Unresolved dependency: 'zzz:zzz:jar:3'.");
+ "Unresolved dependency: 'zzz:zzz:jar:3'");
}
public void testUnresolvedPomTypeDependency() throws Exception {
@@ -341,7 +341,7 @@ public class InvalidProjectImportingTest extends MavenImportingTestCase {
assertModuleLibDeps("project");
MavenProject root = getRootProjects().get(0);
- assertProblems(root, "Unresolved dependency: 'xxx:yyy:pom:4.0'.");
+ assertProblems(root, "Unresolved dependency: 'xxx:yyy:pom:4.0'");
}
public void testDoesNotReportInterModuleDependenciesAsUnresolved() throws Exception {
@@ -454,7 +454,7 @@ public class InvalidProjectImportingTest extends MavenImportingTestCase {
"");
MavenProject root = getRootProjects().get(0);
- assertProblems(root, "Unresolved build extension: 'xxx:yyy:1'.");
+ assertProblems(root, "Unresolved build extension: 'xxx:yyy:1'");
}
public void testUnresolvedExtensionsAfterResolve() throws Exception {
@@ -474,7 +474,7 @@ public class InvalidProjectImportingTest extends MavenImportingTestCase {
resolveDependenciesAndImport();
MavenProject root = getRootProjects().get(0);
- assertProblems(root, "Unresolved build extension: 'xxx:yyy:1'.");
+ assertProblems(root, "Unresolved build extension: 'xxx:yyy:1'");
}
public void testDoesNotReportExtensionsThatWereNotTriedToBeResolved() throws Exception {
@@ -575,10 +575,10 @@ public class InvalidProjectImportingTest extends MavenImportingTestCase {
assertProblems(root);
assertProblems(getModules(root).get(0),
- "Unresolved build extension: 'xxx:xxx:1'.");
+ "Unresolved build extension: 'xxx:xxx:1'");
assertProblems(getModules(root).get(1),
- "Unresolved build extension: 'yyy:yyy:1'.",
- "Unresolved build extension: 'zzz:zzz:1'.");
+ "Unresolved build extension: 'yyy:yyy:1'",
+ "Unresolved build extension: 'zzz:zzz:1'");
}
public void testUnresolvedPlugins() throws Exception {
@@ -597,7 +597,7 @@ public class InvalidProjectImportingTest extends MavenImportingTestCase {
"");
MavenProject root = getRootProjects().get(0);
- assertProblems(root, "Unresolved plugin: 'xxx:yyy:1'.");
+ assertProblems(root, "Unresolved plugin: 'xxx:yyy:1'");
}
public void testDoNotReportResolvedPlugins() throws Exception {
@@ -641,7 +641,31 @@ public class InvalidProjectImportingTest extends MavenImportingTestCase {
assertModules("project");
MavenProject root = getRootProjects().get(0);
- assertProblems(root, "Unresolved plugin: 'xxx:yyy:1'.");
+ assertProblems(root, "Unresolved plugin: 'xxx:yyy:1'");
+ }
+
+ public void testInvalidSettingsXml() throws Exception {
+ updateSettingsXml("test" +
+ "project" +
+ "1");
+ assertModules("project");
+
+ MavenProject root = getRootProjects().get(0);
+ assertProblems(root, "'settings.xml' has syntax errors");
+ }
+
+ public void testInvalidProfilesXml() throws Exception {
+ createProfilesXml("test" +
+ "project" +
+ "1");
+ assertModules("project");
+
+ MavenProject root = getRootProjects().get(0);
+ assertProblems(root, "'profiles.xml' has syntax errors");
}
private void assertProblems(MavenProject project, String... expectedProblems) {
diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenPerformanceTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/MavenPerformanceTest.java
similarity index 96%
rename from plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenPerformanceTest.java
rename to plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/MavenPerformanceTest.java
index 6a40d8c425db..e40f2b544b30 100644
--- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenPerformanceTest.java
+++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/MavenPerformanceTest.java
@@ -13,11 +13,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.jetbrains.idea.maven;
+package org.jetbrains.idea.maven.importing;
import com.intellij.idea.Bombed;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
+import org.jetbrains.idea.maven.MavenImportingTestCase;
import org.jetbrains.idea.maven.project.MavenProject;
import java.util.Collections;
diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/MiscImportingTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/MiscImportingTest.java
similarity index 98%
rename from plugins/maven/src/test/java/org/jetbrains/idea/maven/MiscImportingTest.java
rename to plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/MiscImportingTest.java
index 81b978999a3d..0a25977b2e1b 100644
--- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/MiscImportingTest.java
+++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/MiscImportingTest.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.jetbrains.idea.maven;
+package org.jetbrains.idea.maven.importing;
import com.intellij.ProjectTopics;
import com.intellij.openapi.module.ModifiableModuleModel;
@@ -21,6 +21,7 @@ import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.roots.ModuleRootEvent;
import com.intellij.openapi.roots.ModuleRootListener;
+import org.jetbrains.idea.maven.MavenImportingTestCase;
import org.jetbrains.idea.maven.importing.MavenDefaultModifiableModelsProvider;
import org.jetbrains.idea.maven.indices.MavenCustomRepositoryHelper;
diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/ReimportingTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/ReimportingTest.java
similarity index 98%
rename from plugins/maven/src/test/java/org/jetbrains/idea/maven/ReimportingTest.java
rename to plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/ReimportingTest.java
index 5314c216340e..516c0373eb45 100644
--- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/ReimportingTest.java
+++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/ReimportingTest.java
@@ -13,11 +13,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.jetbrains.idea.maven;
+package org.jetbrains.idea.maven.importing;
import com.intellij.openapi.module.ModifiableModuleModel;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleManager;
+import org.jetbrains.idea.maven.MavenImportingTestCase;
import java.util.concurrent.atomic.AtomicInteger;
diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/SnapshotDependenciesImportingTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/SnapshotDependenciesImportingTest.java
similarity index 99%
rename from plugins/maven/src/test/java/org/jetbrains/idea/maven/SnapshotDependenciesImportingTest.java
rename to plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/SnapshotDependenciesImportingTest.java
index 63f0738369d4..60d1f366b55b 100644
--- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/SnapshotDependenciesImportingTest.java
+++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/SnapshotDependenciesImportingTest.java
@@ -13,10 +13,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.jetbrains.idea.maven;
+package org.jetbrains.idea.maven.importing;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VirtualFile;
+import org.jetbrains.idea.maven.MavenImportingTestCase;
import java.io.File;
import java.io.IOException;
diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/StructureImportingTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/StructureImportingTest.java
similarity index 99%
rename from plugins/maven/src/test/java/org/jetbrains/idea/maven/StructureImportingTest.java
rename to plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/StructureImportingTest.java
index b1f53e45acb9..06398ef7097e 100644
--- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/StructureImportingTest.java
+++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/StructureImportingTest.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.jetbrains.idea.maven;
+package org.jetbrains.idea.maven.importing;
import com.intellij.compiler.impl.javaCompiler.javac.JavacSettings;
import com.intellij.openapi.projectRoots.Sdk;
@@ -21,6 +21,7 @@ import com.intellij.openapi.roots.LanguageLevelModuleExtension;
import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.pom.java.LanguageLevel;
+import org.jetbrains.idea.maven.MavenImportingTestCase;
import org.jetbrains.idea.maven.project.MavenProject;
import java.io.File;
diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/WorkingWithOpenProjectTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/WorkingWithOpenProjectTest.java
similarity index 96%
rename from plugins/maven/src/test/java/org/jetbrains/idea/maven/WorkingWithOpenProjectTest.java
rename to plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/WorkingWithOpenProjectTest.java
index 6c1a16f07e48..3c83c9e43ce4 100644
--- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/WorkingWithOpenProjectTest.java
+++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/importing/WorkingWithOpenProjectTest.java
@@ -13,13 +13,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.jetbrains.idea.maven;
+package org.jetbrains.idea.maven.importing;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.testFramework.PsiTestUtil;
+import org.jetbrains.idea.maven.MavenImportingTestCase;
import java.io.File;
diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/project/MavenProjectReaderTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/project/MavenProjectReaderTest.java
index 69d7f012fd95..ddd09115d55a 100644
--- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/project/MavenProjectReaderTest.java
+++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/project/MavenProjectReaderTest.java
@@ -26,6 +26,7 @@ import org.jetbrains.idea.maven.embedder.MavenEmbedderFactory;
import org.jetbrains.idea.maven.utils.MavenUtil;
import java.io.File;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@@ -51,7 +52,7 @@ public class MavenProjectReaderTest extends MavenTestCase {
"project" +
"1");
- assertTrue(readProject(myProjectPom, new NullProjectLocator()).isValid);
+ assertProblems(readProject(myProjectPom, new NullProjectLocator()));
createProjectPom("" +
"" +
@@ -61,7 +62,7 @@ public class MavenProjectReaderTest extends MavenTestCase {
"1");
MavenProjectReaderResult result = readProject(myProjectPom, new NullProjectLocator());
- assertFalse(result.isValid);
+ assertProblems(result, "'pom.xml' has syntax errors");
org.apache.maven.project.MavenProject p = result.nativeMavenProject;
assertEquals(new File(myProjectPom.getPath()), p.getFile());
@@ -85,7 +86,7 @@ public class MavenProjectReaderTest extends MavenTestCase {
" 1" +
"");
- assertFalse(readProject(module, new NullProjectLocator()).isValid);
+ assertProblems(readProject(module, new NullProjectLocator()), "Parent 'test:parent:1' has problems");
}
public void testProjectWithAbsentParentXmlIsValid() throws Exception {
@@ -94,7 +95,7 @@ public class MavenProjectReaderTest extends MavenTestCase {
" parent" +
" 1" +
"");
- assertTrue(readProject(myProjectPom, new NullProjectLocator()).isValid);
+ assertProblems(readProject(myProjectPom, new NullProjectLocator()));
}
public void testProjectWithSelfParentIsInvalid() throws Exception {
@@ -106,7 +107,7 @@ public class MavenProjectReaderTest extends MavenTestCase {
"project" +
"pom");
- assertFalse(readProject(myProjectPom, new NullProjectLocator()).isValid);
+ assertProblems(readProject(myProjectPom, new NullProjectLocator()), "Self-inheritance found");
}
public void testInvalidProfilesXml() throws Exception {
@@ -116,7 +117,7 @@ public class MavenProjectReaderTest extends MavenTestCase {
createProfilesXml("foo");
MavenProjectReaderResult readResult = readProject(myProjectPom, new NullProjectLocator());
- assertFalse(readResult.isValid);
+ assertProblems(readResult, "'pom.xml' has syntax errors");
org.apache.maven.project.MavenProject p = readResult.nativeMavenProject;
assertEquals(new File(myProjectPom.getPath()), p.getFile());
@@ -157,7 +158,7 @@ public class MavenProjectReaderTest extends MavenTestCase {
"foo");
MavenProjectReaderResult readResult = readProject(myProjectPom, new NullProjectLocator());
- assertFalse(readResult.isValid);
+ assertProblems(readResult, "'pom.xml' has syntax errors");
org.apache.maven.project.MavenProject p = readResult.nativeMavenProject;
assertEquals(new File(myProjectPom.getPath()), p.getFile());
@@ -431,7 +432,7 @@ public class MavenProjectReaderTest extends MavenTestCase {
assertEquals("value12", p.getPackaging());
}
- public void testHandlingRecursionProprietly() throws Exception {
+ public void testHandlingRecursiveProperties() throws Exception {
createProjectPom("" +
" ${prop2}" +
" ${prop1}" +
@@ -445,7 +446,7 @@ public class MavenProjectReaderTest extends MavenTestCase {
assertEquals("${prop2}", p.getPackaging());
}
- public void testHandlingRecursionProprietlyAndDoNotForgetCoClearRecursionGuard() throws Exception {
+ public void testHandlingRecursionProprielyAndDoNotForgetCoClearRecursionGuard() throws Exception {
File repositoryPath = new File(myDir, "repository");
setRepositoryPath(repositoryPath.getPath());
@@ -477,7 +478,34 @@ public class MavenProjectReaderTest extends MavenTestCase {
"");
MavenProjectReaderResult readResult = readProject(child, new NullProjectLocator());
- assertTrue(readResult.isValid);
+ assertProblems(readResult);
+ }
+
+ public void testDoNotGoIntoRecursionWhenTryingToResolveParentInDefaultPath() throws Exception {
+ VirtualFile child = createModulePom("child",
+ "test" +
+ "child" +
+ "1" +
+
+ "" +
+ " test" +
+ " parent" +
+ " 1" +
+ "");
+
+ createProjectPom("test" +
+ "subChild" +
+ "1" +
+
+ "" +
+ " test" +
+ " child" +
+ " 1" +
+ " child/pom.xml" +
+ "");
+
+ MavenProjectReaderResult readResult = readProject(child, new NullProjectLocator());
+ assertProblems(readResult);
}
public void testExpandingSystemAndEnvProperties() throws Exception {
@@ -1098,7 +1126,7 @@ public class MavenProjectReaderTest extends MavenTestCase {
private org.apache.maven.project.MavenProject readProject(VirtualFile file, String... profiles) {
MavenProjectReaderResult readResult = readProject(file, new NullProjectLocator(), profiles);
- assertTrue(readResult.isValid);
+ assertProblems(readResult);
return readResult.nativeMavenProject;
}
@@ -1138,6 +1166,14 @@ public class MavenProjectReaderTest extends MavenTestCase {
assertOrderedElementsAreEqual(resource.getExcludes(), excludes);
}
+ private void assertProblems(MavenProjectReaderResult readerResult, String... expectedProblems) {
+ List actualProblems = new ArrayList();
+ for (MavenProjectProblem each : readerResult.readingProblems) {
+ actualProblems.add(each.getDescription());
+ }
+ assertOrderedElementsAreEqual(actualProblems, expectedProblems);
+ }
+
private static class NullProjectLocator implements MavenProjectReaderProjectLocator {
public VirtualFile findProjectFile(MavenId coordinates) {
return null;
diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/project/MavenProjectsTreeReadingTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/project/MavenProjectsTreeReadingTest.java
index 2476698bd29b..bd6497cc9194 100644
--- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/project/MavenProjectsTreeReadingTest.java
+++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/project/MavenProjectsTreeReadingTest.java
@@ -605,7 +605,7 @@ public class MavenProjectsTreeReadingTest extends MavenProjectsTreeTestCase {
assertEquals("resolved: project ", listener.log);
assertNotNull(nativeProject[0]);
- assertTrue(project.hasErrors());
+ assertTrue(project.hasReadingProblems());
}
public void testDoNotUpdateChildAfterParentWasResolved() throws Exception {
diff --git a/plugins/spellchecker/src/com/intellij/spellchecker/SpellCheckerManager.java b/plugins/spellchecker/src/com/intellij/spellchecker/SpellCheckerManager.java
index 791ba6c02194..600b1d77111a 100644
--- a/plugins/spellchecker/src/com/intellij/spellchecker/SpellCheckerManager.java
+++ b/plugins/spellchecker/src/com/intellij/spellchecker/SpellCheckerManager.java
@@ -19,6 +19,7 @@ import com.intellij.codeHighlighting.HighlightDisplayLevel;
import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.components.ServiceManager;
+import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectManager;
@@ -32,13 +33,17 @@ import com.intellij.spellchecker.state.StateLoader;
import com.intellij.spellchecker.util.SPFileUtil;
import com.intellij.spellchecker.util.Strings;
import com.intellij.util.Consumer;
+import com.sun.net.ssl.internal.ssl.SSLEngineImpl;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import java.io.InputStream;
import java.util.*;
public class SpellCheckerManager {
+ private static final Logger LOG = Logger.getInstance("#com.intellij.spellchecker.SpellCheckerManager");
+
private static final int MAX_SUGGESTIONS_THRESHOLD = 5;
private static final int MAX_METRICS = 1;
@@ -87,7 +92,13 @@ public class SpellCheckerManager {
for (BundledDictionaryProvider provider : Extensions.getExtensions(BundledDictionaryProvider.EP_NAME)) {
for (String dictionary : provider.getBundledDictionaries()) {
if (this.settings == null || !this.settings.getBundledDisabledDictionariesPaths().contains(dictionary)) {
- loaders.add(new StreamLoader(provider.getClass().getResourceAsStream(dictionary)));
+ final Class extends BundledDictionaryProvider> loaderClass = provider.getClass();
+ final InputStream stream = loaderClass.getResourceAsStream(dictionary);
+ if (stream != null){
+ loaders.add(new StreamLoader(stream));
+ } else {
+ LOG.warn("Couldn't load dictionary '" + dictionary + "' for loader '" + loaderClass + "'");
+ }
}
}
}