MartinKanters commented on a change in pull request #373: URL: https://github.com/apache/maven/pull/373#discussion_r487408369
########## File path: maven-core/src/main/java/org/apache/maven/graph/DefaultGraphBuilder.java ########## @@ -361,76 +406,35 @@ private File getReactorDirectory( MavenExecutionRequest request ) throws ProjectBuildingException { MavenExecutionRequest request = session.getRequest(); - request.getProjectBuildingRequest().setRepositorySession( session.getRepositorySession() ); - List<MavenProject> projects = new ArrayList<>(); + List<ProjectCollectionStrategy> projectCollectionStrategies = Arrays.asList( + projectlessCollectionStrategy, // 1. Collect project for invocation without a POM. + multiModuleCollectionStrategy, // 2. Collect projects for all modules in the multi-module project. + requestPomCollectionStrategy // 3. Collect projects for explicitly requested POM. + ); - // We have no POM file. - // - if ( request.getPom() == null ) + for ( ProjectCollectionStrategy strategy : projectCollectionStrategies ) { - ModelSource modelSource = new UrlModelSource( DefaultMaven.class.getResource( "project/standalone.xml" ) ); - MavenProject project = projectBuilder.build( modelSource, request.getProjectBuildingRequest() ) - .getProject(); - project.setExecutionRoot( true ); - projects.add( project ); - request.setProjectPresent( false ); - return projects; - } + List<MavenProject> projects = strategy.collectProjects( request ); - List<File> files = Arrays.asList( request.getPom().getAbsoluteFile() ); - collectProjects( projects, files, request ); - return projects; - } - - private void collectProjects( List<MavenProject> projects, List<File> files, MavenExecutionRequest request ) - throws ProjectBuildingException - { - ProjectBuildingRequest projectBuildingRequest = request.getProjectBuildingRequest(); - - List<ProjectBuildingResult> results = projectBuilder.build( files, request.isRecursive(), - projectBuildingRequest ); - - boolean problems = false; - - for ( ProjectBuildingResult result : results ) - { - projects.add( result.getProject() ); - - if ( !result.getProblems().isEmpty() && logger.isWarnEnabled() ) + if ( !projects.isEmpty() ) { - logger.warn( "" ); - logger.warn( "Some problems were encountered while building the effective model for " - + result.getProject().getId() ); - - for ( ModelProblem problem : result.getProblems() ) - { - String loc = ModelProblemUtils.formatLocation( problem, result.getProjectId() ); - logger.warn( problem.getMessage() + ( StringUtils.isNotEmpty( loc ) ? " @ " + loc : "" ) ); - } - - problems = true; + logger.debug( "Successfully collected projects using the " + strategy.getClass().getSimpleName() ); Review comment: I think it does (although the diff looks terrible in GitHub..). This change introduces three strategies of collecting projects. This debug log would be the only way to find out which strategy was used in the end (without attaching a debugger). ########## File path: maven-core/src/main/java/org/apache/maven/graph/DefaultGraphBuilder.java ########## @@ -361,76 +406,35 @@ private File getReactorDirectory( MavenExecutionRequest request ) throws ProjectBuildingException { MavenExecutionRequest request = session.getRequest(); - request.getProjectBuildingRequest().setRepositorySession( session.getRepositorySession() ); - List<MavenProject> projects = new ArrayList<>(); + List<ProjectCollectionStrategy> projectCollectionStrategies = Arrays.asList( + projectlessCollectionStrategy, // 1. Collect project for invocation without a POM. + multiModuleCollectionStrategy, // 2. Collect projects for all modules in the multi-module project. + requestPomCollectionStrategy // 3. Collect projects for explicitly requested POM. + ); - // We have no POM file. - // - if ( request.getPom() == null ) + for ( ProjectCollectionStrategy strategy : projectCollectionStrategies ) { - ModelSource modelSource = new UrlModelSource( DefaultMaven.class.getResource( "project/standalone.xml" ) ); - MavenProject project = projectBuilder.build( modelSource, request.getProjectBuildingRequest() ) - .getProject(); - project.setExecutionRoot( true ); - projects.add( project ); - request.setProjectPresent( false ); - return projects; - } + List<MavenProject> projects = strategy.collectProjects( request ); - List<File> files = Arrays.asList( request.getPom().getAbsoluteFile() ); - collectProjects( projects, files, request ); - return projects; - } - - private void collectProjects( List<MavenProject> projects, List<File> files, MavenExecutionRequest request ) - throws ProjectBuildingException - { - ProjectBuildingRequest projectBuildingRequest = request.getProjectBuildingRequest(); - - List<ProjectBuildingResult> results = projectBuilder.build( files, request.isRecursive(), - projectBuildingRequest ); - - boolean problems = false; - - for ( ProjectBuildingResult result : results ) - { - projects.add( result.getProject() ); - - if ( !result.getProblems().isEmpty() && logger.isWarnEnabled() ) + if ( !projects.isEmpty() ) { - logger.warn( "" ); - logger.warn( "Some problems were encountered while building the effective model for " - + result.getProject().getId() ); - - for ( ModelProblem problem : result.getProblems() ) - { - String loc = ModelProblemUtils.formatLocation( problem, result.getProjectId() ); - logger.warn( problem.getMessage() + ( StringUtils.isNotEmpty( loc ) ? " @ " + loc : "" ) ); - } - - problems = true; + logger.debug( "Successfully collected projects using the " + strategy.getClass().getSimpleName() ); Review comment: I think it does (although the diff looks terrible in GitHub..). This change introduces three strategies of collecting projects. This debug log would be the only way to find out which strategy was used in the end (without attaching a debugger). ########## File path: maven-core/src/main/java/org/apache/maven/graph/DefaultGraphBuilder.java ########## @@ -361,76 +406,35 @@ private File getReactorDirectory( MavenExecutionRequest request ) throws ProjectBuildingException { MavenExecutionRequest request = session.getRequest(); - request.getProjectBuildingRequest().setRepositorySession( session.getRepositorySession() ); - List<MavenProject> projects = new ArrayList<>(); + List<ProjectCollectionStrategy> projectCollectionStrategies = Arrays.asList( + projectlessCollectionStrategy, // 1. Collect project for invocation without a POM. + multiModuleCollectionStrategy, // 2. Collect projects for all modules in the multi-module project. + requestPomCollectionStrategy // 3. Collect projects for explicitly requested POM. + ); - // We have no POM file. - // - if ( request.getPom() == null ) + for ( ProjectCollectionStrategy strategy : projectCollectionStrategies ) { - ModelSource modelSource = new UrlModelSource( DefaultMaven.class.getResource( "project/standalone.xml" ) ); - MavenProject project = projectBuilder.build( modelSource, request.getProjectBuildingRequest() ) - .getProject(); - project.setExecutionRoot( true ); - projects.add( project ); - request.setProjectPresent( false ); - return projects; - } + List<MavenProject> projects = strategy.collectProjects( request ); - List<File> files = Arrays.asList( request.getPom().getAbsoluteFile() ); - collectProjects( projects, files, request ); - return projects; - } - - private void collectProjects( List<MavenProject> projects, List<File> files, MavenExecutionRequest request ) - throws ProjectBuildingException - { - ProjectBuildingRequest projectBuildingRequest = request.getProjectBuildingRequest(); - - List<ProjectBuildingResult> results = projectBuilder.build( files, request.isRecursive(), - projectBuildingRequest ); - - boolean problems = false; - - for ( ProjectBuildingResult result : results ) - { - projects.add( result.getProject() ); - - if ( !result.getProblems().isEmpty() && logger.isWarnEnabled() ) + if ( !projects.isEmpty() ) { - logger.warn( "" ); - logger.warn( "Some problems were encountered while building the effective model for " - + result.getProject().getId() ); - - for ( ModelProblem problem : result.getProblems() ) - { - String loc = ModelProblemUtils.formatLocation( problem, result.getProjectId() ); - logger.warn( problem.getMessage() + ( StringUtils.isNotEmpty( loc ) ? " @ " + loc : "" ) ); - } - - problems = true; + logger.debug( "Successfully collected projects using the " + strategy.getClass().getSimpleName() ); Review comment: I think it does (although the diff looks terrible in GitHub..). This change introduces three strategies of collecting projects. This debug log would be the only way to find out which strategy was used in the end (without attaching a debugger). ########## File path: maven-core/src/main/java/org/apache/maven/graph/DefaultGraphBuilder.java ########## @@ -361,76 +406,35 @@ private File getReactorDirectory( MavenExecutionRequest request ) throws ProjectBuildingException { MavenExecutionRequest request = session.getRequest(); - request.getProjectBuildingRequest().setRepositorySession( session.getRepositorySession() ); - List<MavenProject> projects = new ArrayList<>(); + List<ProjectCollectionStrategy> projectCollectionStrategies = Arrays.asList( + projectlessCollectionStrategy, // 1. Collect project for invocation without a POM. + multiModuleCollectionStrategy, // 2. Collect projects for all modules in the multi-module project. + requestPomCollectionStrategy // 3. Collect projects for explicitly requested POM. + ); - // We have no POM file. - // - if ( request.getPom() == null ) + for ( ProjectCollectionStrategy strategy : projectCollectionStrategies ) { - ModelSource modelSource = new UrlModelSource( DefaultMaven.class.getResource( "project/standalone.xml" ) ); - MavenProject project = projectBuilder.build( modelSource, request.getProjectBuildingRequest() ) - .getProject(); - project.setExecutionRoot( true ); - projects.add( project ); - request.setProjectPresent( false ); - return projects; - } + List<MavenProject> projects = strategy.collectProjects( request ); - List<File> files = Arrays.asList( request.getPom().getAbsoluteFile() ); - collectProjects( projects, files, request ); - return projects; - } - - private void collectProjects( List<MavenProject> projects, List<File> files, MavenExecutionRequest request ) - throws ProjectBuildingException - { - ProjectBuildingRequest projectBuildingRequest = request.getProjectBuildingRequest(); - - List<ProjectBuildingResult> results = projectBuilder.build( files, request.isRecursive(), - projectBuildingRequest ); - - boolean problems = false; - - for ( ProjectBuildingResult result : results ) - { - projects.add( result.getProject() ); - - if ( !result.getProblems().isEmpty() && logger.isWarnEnabled() ) + if ( !projects.isEmpty() ) { - logger.warn( "" ); - logger.warn( "Some problems were encountered while building the effective model for " - + result.getProject().getId() ); - - for ( ModelProblem problem : result.getProblems() ) - { - String loc = ModelProblemUtils.formatLocation( problem, result.getProjectId() ); - logger.warn( problem.getMessage() + ( StringUtils.isNotEmpty( loc ) ? " @ " + loc : "" ) ); - } - - problems = true; + logger.debug( "Successfully collected projects using the " + strategy.getClass().getSimpleName() ); Review comment: I think it does (although the diff looks terrible in GitHub..). This change introduces three strategies of collecting projects. This debug log would be the only way to find out which strategy was used in the end (without attaching a debugger). ########## File path: maven-core/src/main/java/org/apache/maven/graph/DefaultGraphBuilder.java ########## @@ -361,76 +406,35 @@ private File getReactorDirectory( MavenExecutionRequest request ) throws ProjectBuildingException { MavenExecutionRequest request = session.getRequest(); - request.getProjectBuildingRequest().setRepositorySession( session.getRepositorySession() ); - List<MavenProject> projects = new ArrayList<>(); + List<ProjectCollectionStrategy> projectCollectionStrategies = Arrays.asList( + projectlessCollectionStrategy, // 1. Collect project for invocation without a POM. + multiModuleCollectionStrategy, // 2. Collect projects for all modules in the multi-module project. + requestPomCollectionStrategy // 3. Collect projects for explicitly requested POM. + ); - // We have no POM file. - // - if ( request.getPom() == null ) + for ( ProjectCollectionStrategy strategy : projectCollectionStrategies ) { - ModelSource modelSource = new UrlModelSource( DefaultMaven.class.getResource( "project/standalone.xml" ) ); - MavenProject project = projectBuilder.build( modelSource, request.getProjectBuildingRequest() ) - .getProject(); - project.setExecutionRoot( true ); - projects.add( project ); - request.setProjectPresent( false ); - return projects; - } + List<MavenProject> projects = strategy.collectProjects( request ); - List<File> files = Arrays.asList( request.getPom().getAbsoluteFile() ); - collectProjects( projects, files, request ); - return projects; - } - - private void collectProjects( List<MavenProject> projects, List<File> files, MavenExecutionRequest request ) - throws ProjectBuildingException - { - ProjectBuildingRequest projectBuildingRequest = request.getProjectBuildingRequest(); - - List<ProjectBuildingResult> results = projectBuilder.build( files, request.isRecursive(), - projectBuildingRequest ); - - boolean problems = false; - - for ( ProjectBuildingResult result : results ) - { - projects.add( result.getProject() ); - - if ( !result.getProblems().isEmpty() && logger.isWarnEnabled() ) + if ( !projects.isEmpty() ) { - logger.warn( "" ); - logger.warn( "Some problems were encountered while building the effective model for " - + result.getProject().getId() ); - - for ( ModelProblem problem : result.getProblems() ) - { - String loc = ModelProblemUtils.formatLocation( problem, result.getProjectId() ); - logger.warn( problem.getMessage() + ( StringUtils.isNotEmpty( loc ) ? " @ " + loc : "" ) ); - } - - problems = true; + logger.debug( "Successfully collected projects using the " + strategy.getClass().getSimpleName() ); Review comment: I think it does (although the diff looks terrible in GitHub..). This change introduces three strategies of collecting projects. This debug log would be the only way to find out which strategy was used in the end (without attaching a debugger). ########## File path: maven-core/src/main/java/org/apache/maven/graph/DefaultGraphBuilder.java ########## @@ -361,76 +406,35 @@ private File getReactorDirectory( MavenExecutionRequest request ) throws ProjectBuildingException { MavenExecutionRequest request = session.getRequest(); - request.getProjectBuildingRequest().setRepositorySession( session.getRepositorySession() ); - List<MavenProject> projects = new ArrayList<>(); + List<ProjectCollectionStrategy> projectCollectionStrategies = Arrays.asList( + projectlessCollectionStrategy, // 1. Collect project for invocation without a POM. + multiModuleCollectionStrategy, // 2. Collect projects for all modules in the multi-module project. + requestPomCollectionStrategy // 3. Collect projects for explicitly requested POM. + ); - // We have no POM file. - // - if ( request.getPom() == null ) + for ( ProjectCollectionStrategy strategy : projectCollectionStrategies ) { - ModelSource modelSource = new UrlModelSource( DefaultMaven.class.getResource( "project/standalone.xml" ) ); - MavenProject project = projectBuilder.build( modelSource, request.getProjectBuildingRequest() ) - .getProject(); - project.setExecutionRoot( true ); - projects.add( project ); - request.setProjectPresent( false ); - return projects; - } + List<MavenProject> projects = strategy.collectProjects( request ); - List<File> files = Arrays.asList( request.getPom().getAbsoluteFile() ); - collectProjects( projects, files, request ); - return projects; - } - - private void collectProjects( List<MavenProject> projects, List<File> files, MavenExecutionRequest request ) - throws ProjectBuildingException - { - ProjectBuildingRequest projectBuildingRequest = request.getProjectBuildingRequest(); - - List<ProjectBuildingResult> results = projectBuilder.build( files, request.isRecursive(), - projectBuildingRequest ); - - boolean problems = false; - - for ( ProjectBuildingResult result : results ) - { - projects.add( result.getProject() ); - - if ( !result.getProblems().isEmpty() && logger.isWarnEnabled() ) + if ( !projects.isEmpty() ) { - logger.warn( "" ); - logger.warn( "Some problems were encountered while building the effective model for " - + result.getProject().getId() ); - - for ( ModelProblem problem : result.getProblems() ) - { - String loc = ModelProblemUtils.formatLocation( problem, result.getProjectId() ); - logger.warn( problem.getMessage() + ( StringUtils.isNotEmpty( loc ) ? " @ " + loc : "" ) ); - } - - problems = true; + logger.debug( "Successfully collected projects using the " + strategy.getClass().getSimpleName() ); Review comment: I think it does (although the diff looks terrible in GitHub..). This change introduces three strategies of collecting projects. This debug log would be the only way to find out which strategy was used in the end (without attaching a debugger). ########## File path: maven-core/src/main/java/org/apache/maven/graph/DefaultGraphBuilder.java ########## @@ -361,76 +406,35 @@ private File getReactorDirectory( MavenExecutionRequest request ) throws ProjectBuildingException { MavenExecutionRequest request = session.getRequest(); - request.getProjectBuildingRequest().setRepositorySession( session.getRepositorySession() ); - List<MavenProject> projects = new ArrayList<>(); + List<ProjectCollectionStrategy> projectCollectionStrategies = Arrays.asList( + projectlessCollectionStrategy, // 1. Collect project for invocation without a POM. + multiModuleCollectionStrategy, // 2. Collect projects for all modules in the multi-module project. + requestPomCollectionStrategy // 3. Collect projects for explicitly requested POM. + ); - // We have no POM file. - // - if ( request.getPom() == null ) + for ( ProjectCollectionStrategy strategy : projectCollectionStrategies ) { - ModelSource modelSource = new UrlModelSource( DefaultMaven.class.getResource( "project/standalone.xml" ) ); - MavenProject project = projectBuilder.build( modelSource, request.getProjectBuildingRequest() ) - .getProject(); - project.setExecutionRoot( true ); - projects.add( project ); - request.setProjectPresent( false ); - return projects; - } + List<MavenProject> projects = strategy.collectProjects( request ); - List<File> files = Arrays.asList( request.getPom().getAbsoluteFile() ); - collectProjects( projects, files, request ); - return projects; - } - - private void collectProjects( List<MavenProject> projects, List<File> files, MavenExecutionRequest request ) - throws ProjectBuildingException - { - ProjectBuildingRequest projectBuildingRequest = request.getProjectBuildingRequest(); - - List<ProjectBuildingResult> results = projectBuilder.build( files, request.isRecursive(), - projectBuildingRequest ); - - boolean problems = false; - - for ( ProjectBuildingResult result : results ) - { - projects.add( result.getProject() ); - - if ( !result.getProblems().isEmpty() && logger.isWarnEnabled() ) + if ( !projects.isEmpty() ) { - logger.warn( "" ); - logger.warn( "Some problems were encountered while building the effective model for " - + result.getProject().getId() ); - - for ( ModelProblem problem : result.getProblems() ) - { - String loc = ModelProblemUtils.formatLocation( problem, result.getProjectId() ); - logger.warn( problem.getMessage() + ( StringUtils.isNotEmpty( loc ) ? " @ " + loc : "" ) ); - } - - problems = true; + logger.debug( "Successfully collected projects using the " + strategy.getClass().getSimpleName() ); Review comment: I think it does (although the diff looks terrible in GitHub..). This change introduces three strategies of collecting projects. This debug log would be the only way to find out which strategy was used in the end (without attaching a debugger). ########## File path: maven-core/src/main/java/org/apache/maven/graph/DefaultGraphBuilder.java ########## @@ -361,76 +406,35 @@ private File getReactorDirectory( MavenExecutionRequest request ) throws ProjectBuildingException { MavenExecutionRequest request = session.getRequest(); - request.getProjectBuildingRequest().setRepositorySession( session.getRepositorySession() ); - List<MavenProject> projects = new ArrayList<>(); + List<ProjectCollectionStrategy> projectCollectionStrategies = Arrays.asList( + projectlessCollectionStrategy, // 1. Collect project for invocation without a POM. + multiModuleCollectionStrategy, // 2. Collect projects for all modules in the multi-module project. + requestPomCollectionStrategy // 3. Collect projects for explicitly requested POM. + ); - // We have no POM file. - // - if ( request.getPom() == null ) + for ( ProjectCollectionStrategy strategy : projectCollectionStrategies ) { - ModelSource modelSource = new UrlModelSource( DefaultMaven.class.getResource( "project/standalone.xml" ) ); - MavenProject project = projectBuilder.build( modelSource, request.getProjectBuildingRequest() ) - .getProject(); - project.setExecutionRoot( true ); - projects.add( project ); - request.setProjectPresent( false ); - return projects; - } + List<MavenProject> projects = strategy.collectProjects( request ); - List<File> files = Arrays.asList( request.getPom().getAbsoluteFile() ); - collectProjects( projects, files, request ); - return projects; - } - - private void collectProjects( List<MavenProject> projects, List<File> files, MavenExecutionRequest request ) - throws ProjectBuildingException - { - ProjectBuildingRequest projectBuildingRequest = request.getProjectBuildingRequest(); - - List<ProjectBuildingResult> results = projectBuilder.build( files, request.isRecursive(), - projectBuildingRequest ); - - boolean problems = false; - - for ( ProjectBuildingResult result : results ) - { - projects.add( result.getProject() ); - - if ( !result.getProblems().isEmpty() && logger.isWarnEnabled() ) + if ( !projects.isEmpty() ) { - logger.warn( "" ); - logger.warn( "Some problems were encountered while building the effective model for " - + result.getProject().getId() ); - - for ( ModelProblem problem : result.getProblems() ) - { - String loc = ModelProblemUtils.formatLocation( problem, result.getProjectId() ); - logger.warn( problem.getMessage() + ( StringUtils.isNotEmpty( loc ) ? " @ " + loc : "" ) ); - } - - problems = true; + logger.debug( "Successfully collected projects using the " + strategy.getClass().getSimpleName() ); Review comment: I think it does (although the diff looks terrible in GitHub..). This change introduces three strategies of collecting projects. This debug log would be the only way to find out which strategy was used in the end (without attaching a debugger). ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org