This is an automated email from the ASF dual-hosted git repository. cstamas pushed a commit to branch MNG-6898-DefaultLifecyclePluginAnalyzer-hack in repository https://gitbox.apache.org/repos/asf/maven.git
commit 644c72418cfaf93afb356969081f5e0c2b24aec6 Author: Tamas Cservenak <[email protected]> AuthorDate: Wed Sep 22 15:19:03 2021 +0200 [MNG-6898] Convert DefaultLifecyclePluginAnalyzer to JSR330 https://issues.apache.org/jira/browse/MNG-6898 This is a hackish solution for the conversion. Issue is correct, w/o hack the MavenITmng4385LifecycleMappingFromExtensionInReactorTest IT fails, while with this hack all ITs pass. Still, I consider this hack, and probably could be solved on much better way as well. --- .../maven/internal/sisu/VisibleBeansHelper.java | 67 ++++++++++++++++++++++ .../internal/DefaultLifecyclePluginAnalyzer.java | 33 +++++++---- 2 files changed, 89 insertions(+), 11 deletions(-) diff --git a/maven-core/src/main/java/org/apache/maven/internal/sisu/VisibleBeansHelper.java b/maven-core/src/main/java/org/apache/maven/internal/sisu/VisibleBeansHelper.java new file mode 100644 index 0000000..9c16db1 --- /dev/null +++ b/maven-core/src/main/java/org/apache/maven/internal/sisu/VisibleBeansHelper.java @@ -0,0 +1,67 @@ +package org.apache.maven.internal.sisu; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +import javax.inject.Inject; +import javax.inject.Named; +import javax.inject.Singleton; + +import com.google.inject.Key; +import org.eclipse.sisu.inject.BeanLocator; +import org.eclipse.sisu.plexus.ClassRealmManager; + +import static java.util.Objects.requireNonNull; + +/** + * Helper class for artificial lookup filtered by "visibility" (Plexus realm visibility) but not using Plexus but + * pure Sisu. + */ +@Singleton +@Named +public final class VisibleBeansHelper +{ + private final BeanLocator beanLocator; + + @Inject + public VisibleBeansHelper( final BeanLocator beanLocator ) + { + this.beanLocator = requireNonNull( beanLocator ); + } + + public <T> Map<String, T> lookupMap( final Class<T> clazz ) + { + final Key<T> key = Key.get( clazz, com.google.inject.name.Named.class ); + final Set<String> realmNames = ClassRealmManager.visibleRealmNames( ClassRealmManager.contextRealm() ); + HashMap<String, T> result = new HashMap<>(); + beanLocator.locate( key ).forEach( b -> + { + final String source = String.valueOf( b.getSource() ); + if ( !source.startsWith( "ClassRealm" ) || realmNames == null || realmNames.contains( source ) ) + { + result.put( ( ( com.google.inject.name.Named ) b.getKey() ).value(), b.getProvider().get() ); + } + } ); + return result; + } +} diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecyclePluginAnalyzer.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecyclePluginAnalyzer.java index f1bb442..542041b 100644 --- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecyclePluginAnalyzer.java +++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecyclePluginAnalyzer.java @@ -27,6 +27,11 @@ import java.util.List; import java.util.Map; import java.util.Set; +import javax.inject.Inject; +import javax.inject.Named; +import javax.inject.Singleton; + +import org.apache.maven.internal.sisu.VisibleBeansHelper; import org.apache.maven.lifecycle.DefaultLifecycles; import org.apache.maven.lifecycle.LifeCyclePluginAnalyzer; import org.apache.maven.lifecycle.Lifecycle; @@ -37,12 +42,12 @@ import org.apache.maven.model.InputLocation; import org.apache.maven.model.InputSource; import org.apache.maven.model.Plugin; import org.apache.maven.model.PluginExecution; -import org.codehaus.plexus.component.annotations.Component; -import org.codehaus.plexus.component.annotations.Requirement; import org.codehaus.plexus.logging.Logger; import org.codehaus.plexus.util.StringUtils; import org.codehaus.plexus.util.xml.Xpp3Dom; +import static java.util.Objects.requireNonNull; + /** * <strong>NOTE:</strong> This class is not part of any public api and can be changed or deleted without prior notice. * @@ -52,24 +57,28 @@ import org.codehaus.plexus.util.xml.Xpp3Dom; * @author jdcasey * @author Kristian Rosenvold (extracted class only) */ -@Component( role = LifeCyclePluginAnalyzer.class ) +@Singleton +@Named public class DefaultLifecyclePluginAnalyzer implements LifeCyclePluginAnalyzer { public static final String DEFAULTLIFECYCLEBINDINGS_MODELID = "org.apache.maven:maven-core:" + DefaultLifecyclePluginAnalyzer.class.getPackage().getImplementationVersion() + ":default-lifecycle-bindings"; - @Requirement( role = LifecycleMapping.class ) - private Map<String, LifecycleMapping> lifecycleMappings; + private final VisibleBeansHelper visibleBeansHelper; - @Requirement - private DefaultLifecycles defaultLifeCycles; + private final DefaultLifecycles defaultLifeCycles; - @Requirement - private Logger logger; + private final Logger logger; - public DefaultLifecyclePluginAnalyzer() + @Inject + public DefaultLifecyclePluginAnalyzer( final VisibleBeansHelper visibleBeansHelper, + final DefaultLifecycles defaultLifeCycles, + final Logger logger ) { + this.visibleBeansHelper = requireNonNull( visibleBeansHelper ); + this.defaultLifeCycles = requireNonNull( defaultLifeCycles ); + this.logger = requireNonNull( logger ); } // These methods deal with construction intact Plugin object that look like they come from a standard @@ -82,6 +91,7 @@ public class DefaultLifecyclePluginAnalyzer // from the plugin.xml inside a plugin. // + @Override public Set<Plugin> getPluginsBoundByDefaultToAllLifecycles( String packaging ) { if ( logger.isDebugEnabled() ) @@ -90,7 +100,8 @@ public class DefaultLifecyclePluginAnalyzer + Thread.currentThread().getContextClassLoader() ); } - LifecycleMapping lifecycleMappingForPackaging = lifecycleMappings.get( packaging ); + LifecycleMapping lifecycleMappingForPackaging = + visibleBeansHelper.lookupMap( LifecycleMapping.class ).get( packaging ); if ( lifecycleMappingForPackaging == null ) {
