From 9a8480fba167cf15ff2dfab3d693caca96e5e1d2 Mon Sep 17 00:00:00 2001 From: "Vladislav.Soroka" Date: Wed, 5 Oct 2016 11:09:20 +0300 Subject: [PATCH] EA-89353 - NPE: MavenProjectsTree.doResolve --- .../src/org/jetbrains/idea/maven/model/MavenModel.java | 10 ++++++++-- .../org/jetbrains/idea/maven/server/MavenServer.java | 2 ++ .../idea/maven/server/MavenServerExecutionResult.java | 9 +++++---- .../jetbrains/idea/maven/server/Maven2ServerImpl.java | 2 ++ .../maven/server/embedder/Maven2ModelConverter.java | 3 +++ .../server/embedder/Maven2ServerEmbedderImpl.java | 1 + .../idea/maven/server/MavenModelConverter.java | 4 ++++ .../idea/maven/server/Maven3AetherModelConverter.java | 2 ++ .../idea/maven/server/Maven3ServerEmbedderImpl.java | 6 ++++-- .../jetbrains/idea/maven/server/Maven3ServerImpl.java | 2 ++ .../idea/maven/server/Maven30AetherModelConverter.java | 3 ++- .../idea/maven/server/Maven30ServerEmbedderImpl.java | 3 ++- .../jetbrains/idea/maven/server/Maven30ServerImpl.java | 2 ++ .../idea/maven/project/MavenProjectReader.java | 2 -- .../idea/maven/project/MavenProjectReaderResult.java | 4 +++- .../idea/maven/server/MavenServerManager.java | 1 + 16 files changed, 43 insertions(+), 13 deletions(-) diff --git a/plugins/maven/maven-server-api/src/org/jetbrains/idea/maven/model/MavenModel.java b/plugins/maven/maven-server-api/src/org/jetbrains/idea/maven/model/MavenModel.java index 448230574be9..7db70d03de0f 100644 --- a/plugins/maven/maven-server-api/src/org/jetbrains/idea/maven/model/MavenModel.java +++ b/plugins/maven/maven-server-api/src/org/jetbrains/idea/maven/model/MavenModel.java @@ -25,9 +25,15 @@ public class MavenModel extends MavenModelBase { private String myPackaging; private String myName; - private List myProfiles = Collections.emptyList(); + private List myProfiles; - private final MavenBuild myBuild = new MavenBuild(); + private final MavenBuild myBuild; + + public MavenModel() { + myMavenId = new MavenId(MavenId.UNKNOWN_VALUE, MavenId.UNKNOWN_VALUE, MavenId.UNKNOWN_VALUE); + myProfiles = Collections.emptyList(); + myBuild = new MavenBuild(); + } public MavenId getMavenId() { return myMavenId; diff --git a/plugins/maven/maven-server-api/src/org/jetbrains/idea/maven/server/MavenServer.java b/plugins/maven/maven-server-api/src/org/jetbrains/idea/maven/server/MavenServer.java index 4fb3f781c621..c9c3bab7fdda 100644 --- a/plugins/maven/maven-server-api/src/org/jetbrains/idea/maven/server/MavenServer.java +++ b/plugins/maven/maven-server-api/src/org/jetbrains/idea/maven/server/MavenServer.java @@ -15,6 +15,7 @@ */ package org.jetbrains.idea.maven.server; +import org.jetbrains.annotations.NotNull; import org.jetbrains.idea.maven.model.MavenExplicitProfiles; import org.jetbrains.idea.maven.model.MavenModel; @@ -30,6 +31,7 @@ public interface MavenServer extends Remote { MavenServerIndexer createIndexer() throws RemoteException; + @NotNull MavenModel interpolateAndAlignModel(MavenModel model, File basedir) throws RemoteException; MavenModel assembleInheritance(MavenModel model, MavenModel parentModel) throws RemoteException; diff --git a/plugins/maven/maven-server-api/src/org/jetbrains/idea/maven/server/MavenServerExecutionResult.java b/plugins/maven/maven-server-api/src/org/jetbrains/idea/maven/server/MavenServerExecutionResult.java index bf0516238a9f..0de0d46543d2 100644 --- a/plugins/maven/maven-server-api/src/org/jetbrains/idea/maven/server/MavenServerExecutionResult.java +++ b/plugins/maven/maven-server-api/src/org/jetbrains/idea/maven/server/MavenServerExecutionResult.java @@ -31,21 +31,22 @@ public class MavenServerExecutionResult implements Serializable { @NotNull public final Collection problems; @NotNull public final Set unresolvedArtifacts; - public MavenServerExecutionResult(ProjectData projectData, - Collection problems, - Set unresolvedArtifacts) { + public MavenServerExecutionResult(@Nullable ProjectData projectData, + @NotNull Collection problems, + @NotNull Set unresolvedArtifacts) { this.projectData = projectData; this.problems = problems; this.unresolvedArtifacts = unresolvedArtifacts; } public static class ProjectData implements Serializable { + @NotNull public final MavenModel mavenModel; public final Map mavenModelMap; public final NativeMavenProjectHolder nativeMavenProject; public final Collection activatedProfiles; - public ProjectData(MavenModel mavenModel, + public ProjectData(@NotNull MavenModel mavenModel, Map mavenModelMap, NativeMavenProjectHolder nativeMavenProject, Collection activatedProfiles) { diff --git a/plugins/maven/maven2-server-impl/src/org/jetbrains/idea/maven/server/Maven2ServerImpl.java b/plugins/maven/maven2-server-impl/src/org/jetbrains/idea/maven/server/Maven2ServerImpl.java index a5d48667c1f3..9b1b6f58fab4 100644 --- a/plugins/maven/maven2-server-impl/src/org/jetbrains/idea/maven/server/Maven2ServerImpl.java +++ b/plugins/maven/maven2-server-impl/src/org/jetbrains/idea/maven/server/Maven2ServerImpl.java @@ -15,6 +15,7 @@ */ package org.jetbrains.idea.maven.server; +import org.jetbrains.annotations.NotNull; import org.jetbrains.idea.maven.model.MavenExplicitProfiles; import org.jetbrains.idea.maven.model.MavenModel; import org.jetbrains.idea.maven.server.embedder.Maven2ServerEmbedderImpl; @@ -57,6 +58,7 @@ public class Maven2ServerImpl extends MavenRemoteObject implements MavenServer { } } + @NotNull public MavenModel interpolateAndAlignModel(MavenModel model, File basedir) { try { return Maven2ServerEmbedderImpl.interpolateAndAlignModel(model, basedir); diff --git a/plugins/maven/maven2-server-impl/src/org/jetbrains/idea/maven/server/embedder/Maven2ModelConverter.java b/plugins/maven/maven2-server-impl/src/org/jetbrains/idea/maven/server/embedder/Maven2ModelConverter.java index 4642d0bc08f1..c942acad0db2 100644 --- a/plugins/maven/maven2-server-impl/src/org/jetbrains/idea/maven/server/embedder/Maven2ModelConverter.java +++ b/plugins/maven/maven2-server-impl/src/org/jetbrains/idea/maven/server/embedder/Maven2ModelConverter.java @@ -26,6 +26,7 @@ import org.apache.maven.shared.dependency.tree.DependencyNode; import org.codehaus.plexus.util.xml.Xpp3Dom; import org.jdom.Element; import org.jdom.IllegalNameException; +import org.jetbrains.annotations.NotNull; import org.jetbrains.idea.maven.model.*; import org.jetbrains.idea.maven.server.Maven2ServerGlobals; import org.sonatype.nexus.index.ArtifactInfo; @@ -36,6 +37,7 @@ import java.rmi.RemoteException; import java.util.*; public class Maven2ModelConverter { + @NotNull public static MavenModel convertModel(Model model, File localRepository) throws RemoteException { Build build = model.getBuild(); return convertModel(model, @@ -51,6 +53,7 @@ public class Maven2ModelConverter { return directory == null ? Collections.emptyList() : Collections.singletonList(directory); } + @NotNull public static MavenModel convertModel(Model model, List sources, List testSources, diff --git a/plugins/maven/maven2-server-impl/src/org/jetbrains/idea/maven/server/embedder/Maven2ServerEmbedderImpl.java b/plugins/maven/maven2-server-impl/src/org/jetbrains/idea/maven/server/embedder/Maven2ServerEmbedderImpl.java index 2604886d00f5..33fa797db4b6 100644 --- a/plugins/maven/maven2-server-impl/src/org/jetbrains/idea/maven/server/embedder/Maven2ServerEmbedderImpl.java +++ b/plugins/maven/maven2-server-impl/src/org/jetbrains/idea/maven/server/embedder/Maven2ServerEmbedderImpl.java @@ -155,6 +155,7 @@ public class Maven2ServerEmbedderImpl extends MavenRemoteObject implements Maven return result; } + @NotNull public static MavenModel interpolateAndAlignModel(MavenModel model, File basedir) throws RemoteException { Model result = Maven2ModelConverter.toNativeModel(model); result = doInterpolate(result, basedir); diff --git a/plugins/maven/maven3-server-common/src/org/jetbrains/idea/maven/server/MavenModelConverter.java b/plugins/maven/maven3-server-common/src/org/jetbrains/idea/maven/server/MavenModelConverter.java index 9ece625ffd81..6c689fda6f8c 100644 --- a/plugins/maven/maven3-server-common/src/org/jetbrains/idea/maven/server/MavenModelConverter.java +++ b/plugins/maven/maven3-server-common/src/org/jetbrains/idea/maven/server/MavenModelConverter.java @@ -25,6 +25,7 @@ import org.apache.maven.shared.dependency.tree.DependencyNode; import org.codehaus.plexus.util.xml.Xpp3Dom; import org.jdom.Element; import org.jdom.IllegalNameException; +import org.jetbrains.annotations.NotNull; import org.jetbrains.idea.maven.model.*; import org.jetbrains.idea.maven.server.embedder.CustomMaven3Artifact; import org.sonatype.nexus.index.ArtifactInfo; @@ -35,6 +36,7 @@ import java.rmi.RemoteException; import java.util.*; public class MavenModelConverter { + @NotNull public static MavenModel convertModel(Model model, File localRepository) throws RemoteException { if(model.getBuild() == null) { model.setBuild(new Build()); @@ -53,6 +55,7 @@ public class MavenModelConverter { return directory == null ? Collections.emptyList() : Collections.singletonList(directory); } + @NotNull public static MavenModel convertModel(Model model, List sources, List testSources, @@ -384,6 +387,7 @@ public class MavenModelConverter { || Xpp3Dom.class.isAssignableFrom(clazz); } + @NotNull public static Model toNativeModel(MavenModel model) { Model result = new Model(); result.setArtifactId(model.getMavenId().getArtifactId()); diff --git a/plugins/maven/maven3-server-impl/src/org/jetbrains/idea/maven/server/Maven3AetherModelConverter.java b/plugins/maven/maven3-server-impl/src/org/jetbrains/idea/maven/server/Maven3AetherModelConverter.java index 191b997dbdbc..f78c2f7b8565 100644 --- a/plugins/maven/maven3-server-impl/src/org/jetbrains/idea/maven/server/Maven3AetherModelConverter.java +++ b/plugins/maven/maven3-server-impl/src/org/jetbrains/idea/maven/server/Maven3AetherModelConverter.java @@ -25,6 +25,7 @@ import org.eclipse.aether.graph.Dependency; import org.eclipse.aether.graph.DependencyNode; import org.eclipse.aether.util.graph.manager.DependencyManagerUtils; import org.eclipse.aether.util.graph.transformer.ConflictResolver; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.idea.maven.model.*; @@ -40,6 +41,7 @@ import java.util.*; */ public class Maven3AetherModelConverter extends MavenModelConverter { + @NotNull public static MavenModel convertModelWithAetherDependencyTree(Model model, List sources, List testSources, diff --git a/plugins/maven/maven3-server-impl/src/org/jetbrains/idea/maven/server/Maven3ServerEmbedderImpl.java b/plugins/maven/maven3-server-impl/src/org/jetbrains/idea/maven/server/Maven3ServerEmbedderImpl.java index 8a9e002c4797..b683b433d4f9 100644 --- a/plugins/maven/maven3-server-impl/src/org/jetbrains/idea/maven/server/Maven3ServerEmbedderImpl.java +++ b/plugins/maven/maven3-server-impl/src/org/jetbrains/idea/maven/server/Maven3ServerEmbedderImpl.java @@ -330,6 +330,7 @@ public class Maven3ServerEmbedderImpl extends Maven3ServerEmbedder { return (List)((List)list); } + @NotNull public static MavenModel interpolateAndAlignModel(MavenModel model, File basedir) throws RemoteException { Model result = MavenModelConverter.toNativeModel(model); result = doInterpolate(result, basedir); @@ -418,7 +419,8 @@ public class Maven3ServerEmbedderImpl extends Maven3ServerEmbedder { ); } - private static Model doInterpolate(Model result, File basedir) throws RemoteException { + @NotNull + private static Model doInterpolate(@NotNull Model result, File basedir) throws RemoteException { try { AbstractStringBasedModelInterpolator interpolator = new CustomMaven3ModelInterpolator(new DefaultPathTranslator()); interpolator.initialize(); @@ -913,7 +915,7 @@ public class Maven3ServerEmbedderImpl extends Maven3ServerEmbedder { MavenProject mavenProject = result.getMavenProject(); if (mavenProject == null) return new MavenServerExecutionResult(null, problems, unresolvedArtifacts); - MavenModel model = null; + MavenModel model = new MavenModel(); try { if (USE_MVN2_COMPATIBLE_DEPENDENCY_RESOLVING) { //noinspection unchecked diff --git a/plugins/maven/maven3-server-impl/src/org/jetbrains/idea/maven/server/Maven3ServerImpl.java b/plugins/maven/maven3-server-impl/src/org/jetbrains/idea/maven/server/Maven3ServerImpl.java index 68ef06dc0400..4bde1a54770d 100644 --- a/plugins/maven/maven3-server-impl/src/org/jetbrains/idea/maven/server/Maven3ServerImpl.java +++ b/plugins/maven/maven3-server-impl/src/org/jetbrains/idea/maven/server/Maven3ServerImpl.java @@ -15,6 +15,7 @@ */ package org.jetbrains.idea.maven.server; +import org.jetbrains.annotations.NotNull; import org.jetbrains.idea.maven.model.MavenExplicitProfiles; import org.jetbrains.idea.maven.model.MavenModel; @@ -61,6 +62,7 @@ public class Maven3ServerImpl extends MavenRemoteObject implements MavenServer { } } + @NotNull public MavenModel interpolateAndAlignModel(MavenModel model, File basedir) { try { return Maven3ServerEmbedderImpl.interpolateAndAlignModel(model, basedir); diff --git a/plugins/maven/maven30-server-impl/src/org/jetbrains/idea/maven/server/Maven30AetherModelConverter.java b/plugins/maven/maven30-server-impl/src/org/jetbrains/idea/maven/server/Maven30AetherModelConverter.java index 695ddea3b8f7..a2fc821478f2 100644 --- a/plugins/maven/maven30-server-impl/src/org/jetbrains/idea/maven/server/Maven30AetherModelConverter.java +++ b/plugins/maven/maven30-server-impl/src/org/jetbrains/idea/maven/server/Maven30AetherModelConverter.java @@ -15,12 +15,12 @@ */ package org.jetbrains.idea.maven.server; -import com.intellij.openapi.util.text.StringUtil; import gnu.trove.THashMap; import org.apache.maven.RepositoryUtils; import org.apache.maven.artifact.Artifact; import org.apache.maven.model.Model; import org.apache.maven.model.Parent; +import org.jetbrains.annotations.NotNull; import org.jetbrains.idea.maven.model.*; import org.sonatype.aether.graph.DependencyNode; @@ -36,6 +36,7 @@ import java.util.*; */ public class Maven30AetherModelConverter extends MavenModelConverter { + @NotNull public static MavenModel convertModelWithAetherDependencyTree(Model model, List sources, List testSources, diff --git a/plugins/maven/maven30-server-impl/src/org/jetbrains/idea/maven/server/Maven30ServerEmbedderImpl.java b/plugins/maven/maven30-server-impl/src/org/jetbrains/idea/maven/server/Maven30ServerEmbedderImpl.java index 5c9cffd65599..97dfa02a6e08 100644 --- a/plugins/maven/maven30-server-impl/src/org/jetbrains/idea/maven/server/Maven30ServerEmbedderImpl.java +++ b/plugins/maven/maven30-server-impl/src/org/jetbrains/idea/maven/server/Maven30ServerEmbedderImpl.java @@ -294,6 +294,7 @@ public class Maven30ServerEmbedderImpl extends Maven3ServerEmbedder { return (List)((List)list); } + @NotNull public static MavenModel interpolateAndAlignModel(MavenModel model, File basedir) throws RemoteException { Model result = MavenModelConverter.toNativeModel(model); result = doInterpolate(result, basedir); @@ -836,7 +837,7 @@ public class Maven30ServerEmbedderImpl extends Maven3ServerEmbedder { MavenProject mavenProject = result.getMavenProject(); if (mavenProject == null) return new MavenServerExecutionResult(null, problems, unresolvedArtifacts); - MavenModel model = null; + MavenModel model = new MavenModel(); try { if (USE_MVN2_COMPATIBLE_DEPENDENCY_RESOLVING) { //noinspection unchecked diff --git a/plugins/maven/maven30-server-impl/src/org/jetbrains/idea/maven/server/Maven30ServerImpl.java b/plugins/maven/maven30-server-impl/src/org/jetbrains/idea/maven/server/Maven30ServerImpl.java index b41116d3769b..d2d6f425d413 100644 --- a/plugins/maven/maven30-server-impl/src/org/jetbrains/idea/maven/server/Maven30ServerImpl.java +++ b/plugins/maven/maven30-server-impl/src/org/jetbrains/idea/maven/server/Maven30ServerImpl.java @@ -15,6 +15,7 @@ */ package org.jetbrains.idea.maven.server; +import org.jetbrains.annotations.NotNull; import org.jetbrains.idea.maven.model.MavenExplicitProfiles; import org.jetbrains.idea.maven.model.MavenModel; @@ -61,6 +62,7 @@ public class Maven30ServerImpl extends MavenRemoteObject implements MavenServer } } + @NotNull public MavenModel interpolateAndAlignModel(MavenModel model, File basedir) { try { return Maven30ServerEmbedderImpl.interpolateAndAlignModel(model, basedir); 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 f259b2caa5c4..b7fe63c3b0b9 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 @@ -130,7 +130,6 @@ public class MavenProjectReader { if (result == null) { result = new MavenModel(); - result.setMavenId(new MavenId(UNKNOWN, UNKNOWN, UNKNOWN)); result.setPackaging(MavenConstants.TYPE_JAR); return new RawModelReadResult(result, problems, alwaysOnProfiles); } @@ -142,7 +141,6 @@ public class MavenProjectReader { result = new MavenModel(); Element xmlProject = readXml(file, problems, MavenProjectProblem.ProblemType.SYNTAX); if (xmlProject == null || !"project".equals(xmlProject.getName())) { - result.setMavenId(new MavenId(UNKNOWN, UNKNOWN, UNKNOWN)); result.setPackaging(MavenConstants.TYPE_JAR); return new RawModelReadResult(result, problems, alwaysOnProfiles); } 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 cbec80162fd0..9c6036b884c9 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 @@ -15,6 +15,7 @@ */ package org.jetbrains.idea.maven.project; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.idea.maven.model.MavenExplicitProfiles; import org.jetbrains.idea.maven.model.MavenId; @@ -27,6 +28,7 @@ import java.util.Map; import java.util.Set; public class MavenProjectReaderResult { + @NotNull public final MavenModel mavenModel; public final Map nativeModelMap; public final MavenExplicitProfiles activatedProfiles; @@ -34,7 +36,7 @@ public class MavenProjectReaderResult { public final Collection readingProblems; public final Set unresolvedArtifactIds; - public MavenProjectReaderResult(MavenModel mavenModel, + public MavenProjectReaderResult(@NotNull MavenModel mavenModel, Map nativeModelMap, MavenExplicitProfiles activatedProfiles, @Nullable NativeMavenProjectHolder nativeMavenProject, diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/server/MavenServerManager.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/server/MavenServerManager.java index 50e06722afb7..365fbb2a9daf 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/server/MavenServerManager.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/server/MavenServerManager.java @@ -496,6 +496,7 @@ public class MavenServerManager extends RemoteObjectWrapper impleme }; } + @NotNull public MavenModel interpolateAndAlignModel(final MavenModel model, final File basedir) { return perform(new Retriable() { @Override