aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope')
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/MojoExecutionScoped.java42
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/WeakMojoExecutionListener.java44
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/internal/MojoExecutionScope.java190
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/internal/MojoExecutionScopeCoreModule.java45
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/internal/MojoExecutionScopeModule.java56
5 files changed, 377 insertions, 0 deletions
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/MojoExecutionScoped.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/MojoExecutionScoped.java
new file mode 100644
index 00000000..0dcbd16f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/MojoExecutionScoped.java
@@ -0,0 +1,42 @@
+package org.apache.maven.execution.scope;
+
+/*
+ * 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 static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import com.google.inject.ScopeAnnotation;
+
+/**
+ * Indicates that annotated component should be instantiated before mojo execution starts and discarded after mojo
+ * execution completes.
+ *
+ * @author igor
+ * @since 3.1.2
+ */
+@Target( { TYPE } )
+@Retention( RUNTIME )
+@ScopeAnnotation
+public @interface MojoExecutionScoped
+{
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/WeakMojoExecutionListener.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/WeakMojoExecutionListener.java
new file mode 100644
index 00000000..94e7c104
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/WeakMojoExecutionListener.java
@@ -0,0 +1,44 @@
+package org.apache.maven.execution.scope;
+
+/*
+ * 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 org.apache.maven.execution.MojoExecutionEvent;
+import org.apache.maven.plugin.MojoExecutionException;
+
+/**
+ * Extension point that allows build extensions observe and possibly veto mojo executions.
+ * <p>
+ * Unlike {@link MojoExecutionListener}, this extension point does not trigger instantiation of the component, hence
+ * "weak" class name prefix. Only applies to mojo execution scoped components.
+ *
+ * @see org.apache.maven.execution.MojoExecutionListener
+ * @since 3.1.2
+ * @provisional This interface is part of work in progress and can be changed or removed without notice.
+ */
+public interface WeakMojoExecutionListener
+{
+ void beforeMojoExecution( MojoExecutionEvent event )
+ throws MojoExecutionException;
+
+ void afterMojoExecutionSuccess( MojoExecutionEvent event )
+ throws MojoExecutionException;
+
+ void afterExecutionFailure( MojoExecutionEvent event );
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/internal/MojoExecutionScope.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/internal/MojoExecutionScope.java
new file mode 100644
index 00000000..8a98daf0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/internal/MojoExecutionScope.java
@@ -0,0 +1,190 @@
+package org.apache.maven.execution.scope.internal;
+
+/*
+ * 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.Collection;
+import java.util.IdentityHashMap;
+import java.util.LinkedList;
+import java.util.Map;
+
+import org.apache.maven.execution.MojoExecutionEvent;
+import org.apache.maven.execution.MojoExecutionListener;
+import org.apache.maven.execution.scope.WeakMojoExecutionListener;
+import org.apache.maven.plugin.MojoExecutionException;
+
+import com.google.common.collect.Maps;
+import com.google.inject.Key;
+import com.google.inject.OutOfScopeException;
+import com.google.inject.Provider;
+import com.google.inject.Scope;
+import com.google.inject.util.Providers;
+
+public class MojoExecutionScope
+ implements Scope, MojoExecutionListener
+{
+ private static final Provider<Object> SEEDED_KEY_PROVIDER = new Provider<Object>()
+ {
+ public Object get()
+ {
+ throw new IllegalStateException();
+ }
+ };
+
+ private static final class ScopeState
+ {
+ public final Map<Key<?>, Provider<?>> seeded = Maps.newHashMap();
+
+ public final Map<Key<?>, Object> provided = Maps.newHashMap();
+ }
+
+ private final ThreadLocal<LinkedList<ScopeState>> values = new ThreadLocal<LinkedList<ScopeState>>();
+
+ public MojoExecutionScope()
+ {
+ }
+
+ public void enter()
+ {
+ LinkedList<ScopeState> stack = values.get();
+ if ( stack == null )
+ {
+ stack = new LinkedList<ScopeState>();
+ values.set( stack );
+ }
+ stack.addFirst( new ScopeState() );
+ }
+
+ private ScopeState getScopeState()
+ {
+ LinkedList<ScopeState> stack = values.get();
+ if ( stack == null || stack.isEmpty() )
+ {
+ throw new IllegalStateException();
+ }
+ return stack.getFirst();
+ }
+
+ public void exit()
+ throws MojoExecutionException
+ {
+ final LinkedList<ScopeState> stack = values.get();
+ if ( stack == null || stack.isEmpty() )
+ {
+ throw new IllegalStateException();
+ }
+ stack.removeFirst();
+ if ( stack.isEmpty() )
+ {
+ values.remove();
+ }
+ }
+
+ public <T> void seed( Class<T> clazz, Provider<T> value )
+ {
+ getScopeState().seeded.put( Key.get( clazz ), value );
+ }
+
+ public <T> void seed( Class<T> clazz, final T value )
+ {
+ getScopeState().seeded.put( Key.get( clazz ), Providers.of( value ) );
+ }
+
+ public <T> Provider<T> scope( final Key<T> key, final Provider<T> unscoped )
+ {
+ return new Provider<T>()
+ {
+ @SuppressWarnings( "unchecked" )
+ public T get()
+ {
+ LinkedList<ScopeState> stack = values.get();
+ if ( stack == null || stack.isEmpty() )
+ {
+ throw new OutOfScopeException( "Cannot access " + key + " outside of a scoping block" );
+ }
+
+ ScopeState state = stack.getFirst();
+
+ Provider<?> seeded = state.seeded.get( key );
+
+ if ( seeded != null )
+ {
+ return (T) seeded.get();
+ }
+
+ T provided = (T) state.provided.get( key );
+ if ( provided == null && unscoped != null )
+ {
+ provided = unscoped.get();
+ state.provided.put( key, provided );
+ }
+
+ return provided;
+ }
+ };
+ }
+
+ @SuppressWarnings( { "unchecked" } )
+ public static <T> Provider<T> seededKeyProvider()
+ {
+ return (Provider<T>) SEEDED_KEY_PROVIDER;
+ }
+
+ public void beforeMojoExecution( MojoExecutionEvent event )
+ throws MojoExecutionException
+ {
+ for ( WeakMojoExecutionListener provided : getProvidedListeners() )
+ {
+ provided.beforeMojoExecution( event );
+ }
+ }
+
+ public void afterMojoExecutionSuccess( MojoExecutionEvent event )
+ throws MojoExecutionException
+ {
+ for ( WeakMojoExecutionListener provided : getProvidedListeners() )
+ {
+ provided.afterMojoExecutionSuccess( event );
+ }
+ }
+
+ public void afterExecutionFailure( MojoExecutionEvent event )
+ {
+ for ( WeakMojoExecutionListener provided : getProvidedListeners() )
+ {
+ provided.afterExecutionFailure( event );
+ }
+ }
+
+ private Collection<WeakMojoExecutionListener> getProvidedListeners()
+ {
+ // the same instance can be provided multiple times under different Key's
+ // deduplicate instances to avoid redundant beforeXXX/afterXXX callbacks
+ IdentityHashMap<WeakMojoExecutionListener, Object> listeners =
+ new IdentityHashMap<WeakMojoExecutionListener, Object>();
+ for ( Object provided : getScopeState().provided.values() )
+ {
+ if ( provided instanceof WeakMojoExecutionListener )
+ {
+ listeners.put( (WeakMojoExecutionListener) provided, null );
+ }
+ }
+ return listeners.keySet();
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/internal/MojoExecutionScopeCoreModule.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/internal/MojoExecutionScopeCoreModule.java
new file mode 100644
index 00000000..8208c3c3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/internal/MojoExecutionScopeCoreModule.java
@@ -0,0 +1,45 @@
+package org.apache.maven.execution.scope.internal;
+
+/*
+ * 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 javax.inject.Inject;
+import javax.inject.Named;
+
+import org.apache.maven.execution.MojoExecutionListener;
+
+@Named
+public class MojoExecutionScopeCoreModule
+ extends MojoExecutionScopeModule
+{
+
+ @Inject
+ public MojoExecutionScopeCoreModule()
+ {
+ super( new MojoExecutionScope() );
+ }
+
+ @Override
+ protected void configure()
+ {
+ super.configure();
+ bind( MojoExecutionListener.class ).toInstance( scope );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/internal/MojoExecutionScopeModule.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/internal/MojoExecutionScopeModule.java
new file mode 100644
index 00000000..229a3c56
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/internal/MojoExecutionScopeModule.java
@@ -0,0 +1,56 @@
+package org.apache.maven.execution.scope.internal;
+
+/*
+ * 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 org.apache.maven.execution.scope.MojoExecutionScoped;
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+
+import com.google.inject.AbstractModule;
+
+public class MojoExecutionScopeModule
+ extends AbstractModule
+{
+ protected final MojoExecutionScope scope;
+
+ public MojoExecutionScopeModule( PlexusContainer container )
+ throws ComponentLookupException
+ {
+ this( container.lookup( MojoExecutionScope.class ) );
+ }
+
+ protected MojoExecutionScopeModule( MojoExecutionScope scope )
+ {
+ this.scope = scope;
+ }
+
+ @Override
+ protected void configure()
+ {
+ bindScope( MojoExecutionScoped.class, scope );
+ bind( MojoExecutionScope.class ).toInstance( scope );
+
+ bind( MavenProject.class ).toProvider( MojoExecutionScope.<MavenProject>seededKeyProvider() ).in( scope );
+ bind( MojoExecution.class ).toProvider( MojoExecutionScope.<MojoExecution>seededKeyProvider() ).in( scope );
+ }
+
+}