Blob Blame History Raw
diff -ur '--exclude=pom.xml' '--exclude=MANIFEST.MF' --new-file m2e-core-8328691915d0e67544c97597b0ea02d559f0f4ea-new/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/builder/MavenBuilder.java m2e-core-c5392da6bab9893bcbf5b43f651abe48d5819bea-old-old/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/builder/MavenBuilder.java
--- m2e-core-8328691915d0e67544c97597b0ea02d559f0f4ea-new/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/builder/MavenBuilder.java	2020-03-05 13:08:51.000000000 +0000
+++ m2e-core-c5392da6bab9893bcbf5b43f651abe48d5819bea-old-old/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/builder/MavenBuilder.java	2019-03-05 15:19:21.000000000 +0000
@@ -36,6 +34,7 @@
 import org.apache.maven.project.MavenProject;
 
 import org.eclipse.m2e.core.MavenPlugin;
+import org.eclipse.m2e.core.embedder.ICallable;
 import org.eclipse.m2e.core.embedder.IMavenExecutionContext;
 import org.eclipse.m2e.core.internal.IMavenConstants;
 import org.eclipse.m2e.core.internal.M2EUtils;
@@ -85,34 +84,39 @@
 
       final MavenExecutionContext context = projectManager.createExecutionContext(pomResource, resolverConfiguration);
 
-      return context.execute((context2, monitor2) -> {
-        final IMavenProjectFacade projectFacade = getProjectFacade(project, monitor2);
-
-        if(projectFacade == null) {
-          return null;
-        }
-
-        MavenProject mavenProject;
-        try {
-          // make sure projectFacade has MavenProject instance loaded 
-          mavenProject = projectFacade.getMavenProject(monitor2);
-        } catch(CoreException ce) {
-          //unable to read the project facade
-          addErrorMarker(project, ce);
-          return null;
-        }
+      return context.execute(new ICallable<T>() {
+        @Override
+        public T call(IMavenExecutionContext context, IProgressMonitor monitor) throws CoreException {
+          final IMavenProjectFacade projectFacade = getProjectFacade(project, monitor);
 
-        return context2.execute(mavenProject, (context1, monitor1) -> {
-          ILifecycleMapping lifecycleMapping = configurationManager.getLifecycleMapping(projectFacade);
-          if(lifecycleMapping == null) {
+          if(projectFacade == null) {
             return null;
           }
 
-          Map<MojoExecutionKey, List<AbstractBuildParticipant>> buildParticipantsByMojoExecutionKey = lifecycleMapping
-              .getBuildParticipants(projectFacade, monitor1);
+          MavenProject mavenProject;
+          try {
+            // make sure projectFacade has MavenProject instance loaded 
+            mavenProject = projectFacade.getMavenProject(monitor);
+          } catch(CoreException ce) {
+            //unable to read the project facade
+            addErrorMarker(project, ce);
+            return null;
+          }
 
-          return method(context1, projectFacade, buildParticipantsByMojoExecutionKey, kind, args, monitor1);
-        }, monitor2);
+          return context.execute(mavenProject, new ICallable<T>() {
+            public T call(IMavenExecutionContext context, IProgressMonitor monitor) throws CoreException {
+              ILifecycleMapping lifecycleMapping = configurationManager.getLifecycleMapping(projectFacade);
+              if(lifecycleMapping == null) {
+                return null;
+              }
+
+              Map<MojoExecutionKey, List<AbstractBuildParticipant>> buildParticipantsByMojoExecutionKey = lifecycleMapping
+                  .getBuildParticipants(projectFacade, monitor);
+
+              return method(context, projectFacade, buildParticipantsByMojoExecutionKey, kind, args, monitor);
+            }
+          }, monitor);
+        }
       }, monitor);
     }
 
diff -ur '--exclude=pom.xml' '--exclude=MANIFEST.MF' --new-file m2e-core-8328691915d0e67544c97597b0ea02d559f0f4ea-new/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/ProjectRegistryManager.java m2e-core-c5392da6bab9893bcbf5b43f651abe48d5819bea-old-old/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/ProjectRegistryManager.java
--- m2e-core-8328691915d0e67544c97597b0ea02d559f0f4ea-new/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/ProjectRegistryManager.java	2020-03-05 13:08:51.000000000 +0000
+++ m2e-core-c5392da6bab9893bcbf5b43f651abe48d5819bea-old-old/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/ProjectRegistryManager.java	2019-03-05 15:19:21.000000000 +0000
@@ -27,13 +25,10 @@
 import java.util.List;
 import java.util.ListIterator;
 import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Objects;
 import java.util.Properties;
 import java.util.Set;
+import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutionException;
-import java.util.function.Consumer;
-import java.util.stream.Collectors;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -42,12 +37,10 @@
 import com.google.common.cache.CacheBuilder;
 import com.google.common.cache.RemovalCause;
 import com.google.common.cache.RemovalListener;
-import com.google.common.collect.LinkedHashMultimap;
-import com.google.common.collect.Multimap;
+import com.google.common.cache.RemovalNotification;
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
@@ -71,14 +64,11 @@
 import org.apache.maven.lifecycle.MavenExecutionPlan;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.Parent;
-import org.apache.maven.model.building.ModelProblem;
-import org.apache.maven.model.building.ModelProblem.Severity;
 import org.apache.maven.plugin.ExtensionRealmCache;
 import org.apache.maven.plugin.MojoExecution;
 import org.apache.maven.plugin.PluginArtifactsCache;
 import org.apache.maven.plugin.PluginRealmCache;
 import org.apache.maven.project.MavenProject;
-import org.apache.maven.project.ProjectBuildingException;
 import org.apache.maven.project.ProjectBuildingRequest;
 import org.apache.maven.project.ProjectRealmCache;
 import org.apache.maven.project.artifact.MavenMetadataCache;
@@ -164,11 +154,6 @@
 
   private final Cache<MavenProjectFacade, MavenProject> mavenProjectCache;
 
-  /**
-   * @noreference For tests only
-   */
-  Consumer<Map<MavenProjectFacade, MavenProject>> addContextProjectListener;
-
   public ProjectRegistryManager(MavenImpl maven, File stateLocationDir, boolean readState,
       IMavenMarkerManager mavenMarkerManager) {
     this.markerManager = mavenMarkerManager;
@@ -204,10 +189,9 @@
     MavenProjectFacade projectFacade = projectRegistry.getProjectFacade(pom);
     if(projectFacade == null && load) {
       ResolverConfiguration configuration = ResolverConfigurationIO.readResolverConfiguration(pom.getProject());
-      MavenExecutionResult executionResult = readProjectsWithDependencies(projectRegistry,
-          Collections.singletonList(pom), configuration, monitor).values().iterator().next();
+      MavenExecutionResult executionResult = readProjectWithDependencies(projectRegistry, pom, configuration, monitor);
       MavenProject mavenProject = executionResult.getProject();
-      if(mavenProject != null && mavenProject.getArtifact() != null) {
+      if(mavenProject != null) {
         projectFacade = new MavenProjectFacade(this, pom, mavenProject, configuration);
       } else {
         List<Throwable> exceptions = executionResult.getExceptions();
@@ -333,26 +317,30 @@
     // safety net -- do not force refresh of the same installed/resolved artifact more than once 
     final Set<ArtifactKey> installedArtifacts = new HashSet<ArtifactKey>();
 
-    ILocalRepositoryListener listener = (repositoryBasedir, baseArtifact, artifact, artifactFile) -> {
-      if(artifactFile == null) {
-        // resolution error
-        return;
-      }
-      // TODO remove=false?
-      Set<IFile> refresh = new LinkedHashSet<IFile>();
-      if(installedArtifacts.add(artifact)) {
-        refresh.addAll(newState.getVersionedDependents(MavenCapability.createMavenParent(artifact), true));
-        refresh.addAll(newState.getVersionedDependents(MavenCapability.createMavenArtifact(artifact), true));
-        refresh.addAll(newState.getVersionedDependents(MavenCapability.createMavenArtifactImport(artifact), true));
-      }
-      if(installedArtifacts.add(baseArtifact)) {
-        refresh.addAll(newState.getVersionedDependents(MavenCapability.createMavenParent(baseArtifact), true));
-        refresh.addAll(newState.getVersionedDependents(MavenCapability.createMavenArtifact(baseArtifact), true));
-        refresh.addAll(newState.getVersionedDependents(MavenCapability.createMavenArtifactImport(baseArtifact), true));
-      }
-      if(!refresh.isEmpty()) {
-        log.debug("Automatic refresh. artifact={}/{}. projects={}", new Object[] {baseArtifact, artifact, refresh});
-        context.forcePomFiles(refresh);
+    ILocalRepositoryListener listener = new ILocalRepositoryListener() {
+      public void artifactInstalled(File repositoryBasedir, ArtifactKey baseArtifact, ArtifactKey artifact,
+          File artifactFile) {
+        if(artifactFile == null) {
+          // resolution error
+          return;
+        }
+        // TODO remove=false?
+        Set<IFile> refresh = new LinkedHashSet<IFile>();
+        if(installedArtifacts.add(artifact)) {
+          refresh.addAll(newState.getVersionedDependents(MavenCapability.createMavenParent(artifact), true));
+          refresh.addAll(newState.getVersionedDependents(MavenCapability.createMavenArtifact(artifact), true));
+          refresh.addAll(newState.getVersionedDependents(MavenCapability.createMavenArtifactImport(artifact), true));
+        }
+        if(installedArtifacts.add(baseArtifact)) {
+          refresh.addAll(newState.getVersionedDependents(MavenCapability.createMavenParent(baseArtifact), true));
+          refresh.addAll(newState.getVersionedDependents(MavenCapability.createMavenArtifact(baseArtifact), true));
+          refresh
+              .addAll(newState.getVersionedDependents(MavenCapability.createMavenArtifactImport(baseArtifact), true));
+        }
+        if(!refresh.isEmpty()) {
+          log.debug("Automatic refresh. artifact={}/{}. projects={}", new Object[] {baseArtifact, artifact, refresh});
+          context.forcePomFiles(refresh);
+        }
       }
     };
 
@@ -368,111 +356,96 @@
 
   private void refresh(final MutableProjectRegistry newState, final DependencyResolutionContext context,
       IProgressMonitor monitor) throws CoreException {
-    Set<IFile> allProcessedPoms = new HashSet<>();
-    Set<IFile> allNewFacades = new HashSet<>();
+    Set<IFile> secondPhaseBacklog = new LinkedHashSet<IFile>();
 
-    final Map<IFile, Set<Capability>> originalCapabilities = new HashMap<>();
-    final Map<IFile, Set<RequiredCapability>> originalRequirements = new HashMap<>();
+    final Map<IFile, Set<Capability>> originalCapabilities = new HashMap<IFile, Set<Capability>>();
+    final Map<IFile, Set<RequiredCapability>> originalRequirements = new HashMap<IFile, Set<RequiredCapability>>();
 
     // phase 1: build projects without dependencies and populate workspace with known projects
-    while(!context.isEmpty()) { // context may be augmented, so we need to keep processing
-      List<IFile> toReadPomFiles = new ArrayList<>();
-      while(!context.isEmpty()) { // Group build of all current context
-        if(monitor.isCanceled()) {
-          throw new OperationCanceledException();
-        }
+    while(!context.isEmpty()) {
+      if(monitor.isCanceled()) {
+        throw new OperationCanceledException();
+      }
 
-        if(newState.isStale() || (syncRefreshThread != null && syncRefreshThread != Thread.currentThread())) {
-          throw new StaleMutableProjectRegistryException();
-        }
+      if(newState.isStale() || (syncRefreshThread != null && syncRefreshThread != Thread.currentThread())) {
+        throw new StaleMutableProjectRegistryException();
+      }
 
-        IFile pom = context.pop();
-        if(allNewFacades.contains(pom)) {
-          // pom was already in context and successfully read
-          continue;
-        }
-        allProcessedPoms.add(pom);
+      IFile pom = context.pop();
 
-        monitor.subTask(NLS.bind(Messages.ProjectRegistryManager_task_project, pom.getProject().getName()));
-        MavenProjectFacade oldFacade = newState.getProjectFacade(pom);
+      monitor.subTask(NLS.bind(Messages.ProjectRegistryManager_task_project, pom.getProject().getName()));
+      MavenProjectFacade oldFacade = newState.getProjectFacade(pom);
 
-        context.forcePomFiles(flushCaches(newState, pom, oldFacade, isForceDependencyUpdate()));
-        if(oldFacade != null) {
-          putMavenProject(oldFacade, null); // maintain maven project cache
-        }
-        if(pom.isAccessible() && pom.getProject().hasNature(IMavenConstants.NATURE_ID)) {
-          toReadPomFiles.add(pom);
-          if(oldFacade != null) {
-            // refresh old child modules
-            MavenCapability mavenParentCapability = MavenCapability.createMavenParent(oldFacade.getArtifactKey());
-            context.forcePomFiles(newState.getVersionedDependents(mavenParentCapability, true));
-
-            // refresh projects that import dependencyManagement from this one
-            MavenCapability mavenArtifactImportCapability = MavenCapability
-                .createMavenArtifactImport(oldFacade.getArtifactKey());
-            context.forcePomFiles(newState.getVersionedDependents(mavenArtifactImportCapability, true));
-          }
-        } else {
-          newState.setProject(pom, null); // discard closed/deleted pom in workspace
-          // refresh children of deleted/closed parent
-          if(oldFacade != null) {
-            MavenCapability mavenParentCapability = MavenCapability.createMavenParent(oldFacade.getArtifactKey());
-            context.forcePomFiles(newState.getDependents(mavenParentCapability, true));
-
-            MavenCapability mavenArtifactImportCapability = MavenCapability
-                .createMavenArtifactImport(oldFacade.getArtifactKey());
-            context.forcePomFiles(newState.getVersionedDependents(mavenArtifactImportCapability, true));
-          }
-        }
+      context.forcePomFiles(flushCaches(newState, pom, oldFacade, isForceDependencyUpdate()));
+      if(oldFacade != null) {
+        putMavenProject(oldFacade, null); // maintain maven project cache
       }
-      Map<IFile, MavenProjectFacade> newFacades = readMavenProjectFacades(toReadPomFiles, newState, monitor);
-      for(Entry<IFile, MavenProjectFacade> entry : newFacades.entrySet()) {
-        IFile pom = entry.getKey();
-        MavenProjectFacade newFacade = entry.getValue();
-        newState.setProject(pom, newFacade);
-        if(newFacade != null) {
-          // refresh new child modules
-          MavenCapability mavenParentCapability = MavenCapability.createMavenParent(newFacade.getArtifactKey());
+      MavenProjectFacade newFacade = null;
+      if(pom.isAccessible() && pom.getProject().hasNature(IMavenConstants.NATURE_ID)) {
+        if(oldFacade != null) {
+          // refresh old child modules
+          MavenCapability mavenParentCapability = MavenCapability.createMavenParent(oldFacade.getArtifactKey());
           context.forcePomFiles(newState.getVersionedDependents(mavenParentCapability, true));
 
           // refresh projects that import dependencyManagement from this one
           MavenCapability mavenArtifactImportCapability = MavenCapability
-              .createMavenArtifactImport(newFacade.getArtifactKey());
+              .createMavenArtifactImport(oldFacade.getArtifactKey());
           context.forcePomFiles(newState.getVersionedDependents(mavenArtifactImportCapability, true));
+        }
 
-          Set<Capability> capabilities = new LinkedHashSet<Capability>();
-          capabilities.add(mavenParentCapability);
-          capabilities.add(MavenCapability.createMavenArtifact(newFacade.getArtifactKey()));
-          Set<Capability> oldCapabilities = newState.setCapabilities(pom, capabilities);
-          if(!originalCapabilities.containsKey(pom)) {
-            originalCapabilities.put(pom, oldCapabilities);
-          }
+        newFacade = readMavenProjectFacade(pom, newState, monitor);
+      } else {
+        // refresh children of deleted/closed parent
+        if(oldFacade != null) {
+          MavenCapability mavenParentCapability = MavenCapability.createMavenParent(oldFacade.getArtifactKey());
+          context.forcePomFiles(newState.getDependents(mavenParentCapability, true));
 
-          MavenProject mavenProject = getMavenProject(newFacade);
-          Set<RequiredCapability> requirements = new LinkedHashSet<RequiredCapability>();
-          DefaultMavenDependencyResolver.addProjectStructureRequirements(requirements, mavenProject);
-          Set<RequiredCapability> oldRequirements = newState.setRequirements(pom, requirements);
-          if(!originalRequirements.containsKey(pom)) {
-            originalRequirements.put(pom, oldRequirements);
-          }
+          MavenCapability mavenArtifactImportCapability = MavenCapability
+              .createMavenArtifactImport(oldFacade.getArtifactKey());
+          context.forcePomFiles(newState.getVersionedDependents(mavenArtifactImportCapability, true));
         }
       }
-      allNewFacades.addAll(newFacades.keySet());
-      List<IFile> erroneousPoms = new ArrayList<IFile>(toReadPomFiles);
-      erroneousPoms.removeAll(newFacades.keySet());
-      erroneousPoms.forEach(pom -> newState.setProject(pom, null));
-      if(!newFacades.isEmpty()) { // progress did happen
-        // push files that could't be read back into context for a second pass.
-        // This can help if some read files are parent of other ones in the same
-        // request -> the child wouldn't be read immediately, but would be in a
-        // 2nd pass once parent was read.
-        context.forcePomFiles(new HashSet<IFile>(erroneousPoms));
+
+      newState.setProject(pom, newFacade);
+
+      if(newFacade != null) {
+        // refresh new child modules
+        MavenCapability mavenParentCapability = MavenCapability.createMavenParent(newFacade.getArtifactKey());
+        context.forcePomFiles(newState.getVersionedDependents(mavenParentCapability, true));
+
+        // refresh projects that import dependencyManagement from this one
+        MavenCapability mavenArtifactImportCapability = MavenCapability
+            .createMavenArtifactImport(newFacade.getArtifactKey());
+        context.forcePomFiles(newState.getVersionedDependents(mavenArtifactImportCapability, true));
+
+        Set<Capability> capabilities = new LinkedHashSet<Capability>();
+        capabilities.add(mavenParentCapability);
+        capabilities.add(MavenCapability.createMavenArtifact(newFacade.getArtifactKey()));
+        Set<Capability> oldCapabilities = newState.setCapabilities(pom, capabilities);
+        if(!originalCapabilities.containsKey(pom)) {
+          originalCapabilities.put(pom, oldCapabilities);
+        }
+
+        MavenProject mavenProject = getMavenProject(newFacade);
+        Set<RequiredCapability> requirements = new LinkedHashSet<RequiredCapability>();
+        DefaultMavenDependencyResolver.addProjectStructureRequirements(requirements, mavenProject);
+        Set<RequiredCapability> oldRequirements = newState.setRequirements(pom, requirements);
+        if(!originalRequirements.containsKey(pom)) {
+          originalRequirements.put(pom, oldRequirements);
+        }
+
       }
+
+      // at this point project facade and project capabilities/requirements are inconsistent in the state
+      // this will be reconciled during the second phase
+
+      secondPhaseBacklog.add(pom);
     }
 
-    context.forcePomFiles(allProcessedPoms);
+    context.forcePomFiles(secondPhaseBacklog);
 
     // phase 2: resolve project dependencies
+    Set<IFile> secondPhaseProcessed = new HashSet<IFile>();
     while(!context.isEmpty()) {
       if(monitor.isCanceled()) {
         throw new OperationCanceledException();
@@ -484,15 +457,20 @@
 
       final IFile pom = context.pop();
 
+      if(!secondPhaseProcessed.add(pom)) {
+        // because workspace contents is fully known at this point, each project needs to be resolved at most once 
+        continue;
+      }
+
       MavenProjectFacade newFacade = null;
       if(pom.isAccessible() && pom.getProject().hasNature(IMavenConstants.NATURE_ID)) {
         newFacade = newState.getProjectFacade(pom);
       }
       if(newFacade != null) {
         MavenProject mavenProject = getMavenProject(newFacade);
-        if(!allProcessedPoms.contains(newFacade.getPom())) {
+        if(mavenProject == null) {
           // facade from workspace state that has not been refreshed yet 
-          newFacade = readMavenProjectFacades(Collections.singletonList(pom), newState, monitor).get(pom);
+          newFacade = readMavenProjectFacade(pom, newState, monitor);
         } else {
           // recreate facade instance to trigger project changed event
           // this is only necessary for facades that are refreshed because their dependencies changed
@@ -505,12 +483,12 @@
 
       if(newFacade != null) {
         final MavenProjectFacade _newFacade = newFacade;
+        final MavenProject mavenProject = getMavenProject(newFacade);
         final ResolverConfiguration resolverConfiguration = _newFacade.getResolverConfiguration();
-        createExecutionContext(newState, pom, resolverConfiguration).execute(getMavenProject(newFacade),
-            (executionContext, pm) -> {
-              refreshPhase2(newState, context, originalCapabilities, originalRequirements, pom, _newFacade, pm);
-              return null;
-            }, monitor);
+        createExecutionContext(newState, pom, resolverConfiguration).execute(mavenProject, (executionContext, pm) -> {
+          refreshPhase2(newState, context, originalCapabilities, originalRequirements, pom, _newFacade, pm);
+          return null;
+        }, monitor);
       } else {
         refreshPhase2(newState, context, originalCapabilities, originalRequirements, pom, newFacade, monitor);
       }
@@ -706,58 +684,36 @@
     return new DefaultMavenDependencyResolver(this, markerManager);
   }
 
-  private Map<IFile, MavenProjectFacade> readMavenProjectFacades(final Collection<IFile> poms,
-      final MutableProjectRegistry state, final IProgressMonitor monitor)
-      throws CoreException {
-    for(IFile pom : poms) {
-      markerManager.deleteMarkers(pom, IMavenConstants.MARKER_POM_LOADING_ID);
-    }
+  private MavenProjectFacade readMavenProjectFacade(final IFile pom, final MutableProjectRegistry state,
+      final IProgressMonitor monitor) throws CoreException {
+    markerManager.deleteMarkers(pom, IMavenConstants.MARKER_POM_LOADING_ID);
+
+    final ResolverConfiguration resolverConfiguration = ResolverConfigurationIO
+        .readResolverConfiguration(pom.getProject());
+
+    return execute(state, pom, resolverConfiguration, (executionContext, pm) -> {
+        MavenProject mavenProject = null;
+        MavenExecutionResult mavenResult = null;
+        if(pom.isAccessible()) {
+        mavenResult = getMaven().readMavenProject(pom.getLocation().toFile(),
+            executionContext.newProjectBuildingRequest());
+          mavenProject = mavenResult.getProject();
+        }
 
-    final Map<IFile, ResolverConfiguration> resolverConfigurations = new HashMap<>(poms.size(), 1.f);
-    final Multimap<ResolverConfiguration, IFile> groupsToImport = LinkedHashMultimap.create();
-    for(IFile pom : poms) {
-      if(monitor.isCanceled()) {
-        return null;
-      }
-      ResolverConfiguration resolverConfiguration = ResolverConfigurationIO.readResolverConfiguration(pom.getProject());
-      resolverConfigurations.put(pom, resolverConfiguration);
-      groupsToImport.put(resolverConfiguration, pom);
-    }
-
-    Map<IFile, MavenProjectFacade> result = new HashMap<>(poms.size(), 1.f);
-    SubMonitor subMonitor = SubMonitor.convert(monitor, poms.size());
-    for(Entry<ResolverConfiguration, Collection<IFile>> entry : groupsToImport.asMap().entrySet()) {
-      ResolverConfiguration resolverConfiguration = entry.getKey();
-      Collection<IFile> pomFiles = entry.getValue();
-      result.putAll(execute(state, poms.size() == 1 ? pomFiles.iterator().next() : null, resolverConfiguration,
-          (executionContext, pm) -> {
-            Map<File, MavenExecutionResult> mavenResults = getMaven().readMavenProjects(pomFiles.stream()
-                .filter(IFile::isAccessible).map(pom -> pom.getLocation().toFile()).collect(Collectors.toList()),
-                executionContext.newProjectBuildingRequest());
-
-            Map<IFile, MavenProjectFacade> facades = new HashMap<>(mavenResults.size(), 1.f);
-            for (IFile pom : pomFiles) {
-              if (!pom.isAccessible()) {
-            	  continue;
-              }
-              MavenExecutionResult mavenResult = mavenResults.get(pom.getLocation().toFile());
-              MavenProject mavenProject = mavenResult.getProject();
-              MarkerUtils.addEditorHintMarkers(markerManager, pom, mavenProject,
-                      IMavenConstants.MARKER_POM_LOADING_ID);
-              markerManager.addMarkers(pom, IMavenConstants.MARKER_POM_LOADING_ID, mavenResult);
-              if(mavenProject != null && mavenProject.getArtifact() != null) {
-                MavenProjectFacade mavenProjectFacade = new MavenProjectFacade(ProjectRegistryManager.this, pom, mavenProject,
-                          resolverConfiguration);
-                putMavenProject(mavenProjectFacade, mavenProject); // maintain maven project cache
-                facades.put(pom, mavenProjectFacade);
-              }
-            }
+        MarkerUtils.addEditorHintMarkers(markerManager, pom, mavenProject, IMavenConstants.MARKER_POM_LOADING_ID);
+        markerManager.addMarkers(pom, IMavenConstants.MARKER_POM_LOADING_ID, mavenResult);
+        if(mavenProject == null) {
+          return null;
+        }
 
-            return facades;
-          }, subMonitor.split(pomFiles.size())
-      ));
-    }
-    return result;
+        // create and return new project facade
+        MavenProjectFacade mavenProjectFacade = new MavenProjectFacade(ProjectRegistryManager.this, pom, mavenProject,
+            resolverConfiguration);
+
+        putMavenProject(mavenProjectFacade, mavenProject); // maintain maven project cache
+
+        return mavenProjectFacade;
+    }, monitor);
   }
 
       /*package*/Map<String, List<MojoExecution>> calculateExecutionPlans(IFile pom, MavenProject mavenProject,
@@ -829,14 +785,9 @@
 
   MavenProject readProjectWithDependencies(IFile pomFile, ResolverConfiguration resolverConfiguration,
       IProgressMonitor monitor) throws CoreException {
-    Map<File, MavenExecutionResult> results = readProjectsWithDependencies(projectRegistry,
-        Collections.singletonList(pomFile), resolverConfiguration, monitor);
-    if(results.size() != 1) {
-      throw new IllegalStateException("Results should contain one entry.");
-    }
-    MavenExecutionResult result = results.values().iterator().next();
+    MavenExecutionResult result = readProjectWithDependencies(projectRegistry, pomFile, resolverConfiguration, monitor);
     MavenProject mavenProject = result.getProject();
-    if(mavenProject != null && !hasError(result)) {
+    if(mavenProject != null) {
       return mavenProject;
     }
     MultiStatus status = new MultiStatus(IMavenConstants.PLUGIN_ID, 0, Messages.MavenProjectFacade_error, null);
@@ -847,34 +798,21 @@
     throw new CoreException(status);
   }
 
-  private static boolean hasError(MavenExecutionResult mavenExecutionResult) {
-    return mavenExecutionResult.getExceptions().stream().anyMatch(ex -> !(ex instanceof ProjectBuildingException))
-        || mavenExecutionResult.getExceptions().stream()//
-            .map(ProjectBuildingException.class::cast)//
-            .flatMap(ex -> ex.getResults().stream())//
-            .flatMap(result -> result.getProblems().stream())//
-            .map(ModelProblem::getSeverity)// 
-            .anyMatch(severity -> severity != Severity.WARNING);
-  }
+  private MavenExecutionResult readProjectWithDependencies(IProjectRegistry state, final IFile pomFile,
+      ResolverConfiguration resolverConfiguration, final IProgressMonitor monitor) {
 
-  Map<File, MavenExecutionResult> readProjectsWithDependencies(IProjectRegistry state, Collection<IFile> pomFiles,
-      ResolverConfiguration resolverConfiguration, IProgressMonitor monitor) {
     try {
-      return execute(state, pomFiles.size() == 1 ? pomFiles.iterator().next() : null, resolverConfiguration,
-          (context, aMonitor) -> {
-        ProjectBuildingRequest configuration = context.newProjectBuildingRequest();
-        configuration.setResolveDependencies(true);
-        return getMaven().readMavenProjects(
-              pomFiles.stream().map(file -> file.getLocation().toFile()).collect(Collectors.toList()),
-              configuration);
+      return execute(state, pomFile, resolverConfiguration, (context, pm) -> {
+          ProjectBuildingRequest configuration = context.newProjectBuildingRequest();
+          configuration.setResolveDependencies(true);
+          return getMaven().readMavenProject(pomFile.getLocation().toFile(), configuration);
       }, monitor);
     } catch(CoreException ex) {
-      MavenExecutionResult result = new DefaultMavenExecutionResult();
+      DefaultMavenExecutionResult result = new DefaultMavenExecutionResult();
       result.addException(ex);
-      return pomFiles.stream().filter(IResource::isAccessible).map(IResource::getLocation).filter(Objects::nonNull)
-          .map(IPath::toFile).collect(HashMap::new, (map, pomFile) -> map.put(pomFile, result),
-              (container, toFold) -> container.putAll(toFold));
+      return result;
     }
+
   }
 
   public IMavenProjectFacade[] getProjects() {
@@ -1098,9 +1037,6 @@
     Map<MavenProjectFacade, MavenProject> mavenProjects = getContextProjects();
     if(mavenProject != null) {
       mavenProjects.put(facade, mavenProject);
-      if(this.addContextProjectListener != null) {
-        this.addContextProjectListener.accept(mavenProjects);
-      }
     } else {
       mavenProjects.remove(facade);
       synchronized(legacyMavenProjects) {