Proposal to change abstract provider
Changes:
* validate input
* do not modify loop invariant within loop body
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/providers/packaging/AbstractLifecycleMappingProvider.java b/maven-core/src/main/java/org/apache/maven/lifecycle/providers/packaging/AbstractLifecycleMappingProvider.java
index f58f937..a1d8188 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/providers/packaging/AbstractLifecycleMappingProvider.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/providers/packaging/AbstractLifecycleMappingProvider.java
@@ -29,6 +29,8 @@
import org.apache.maven.lifecycle.mapping.LifecycleMapping;
import org.apache.maven.lifecycle.mapping.LifecyclePhase;
+import static java.util.Objects.requireNonNull;
+
/**
* Base lifecycle mapping provider, ie per-packaging plugin bindings for {@code default} lifecycle.
*/
@@ -39,11 +41,17 @@
protected AbstractLifecycleMappingProvider( String[] pluginBindings )
{
- HashMap<String, LifecyclePhase> lifecyclePhases = new HashMap<>();
- int len = pluginBindings.length;
- for ( int i = 0; i < len; i++ )
+ requireNonNull( pluginBindings );
+ final int len = pluginBindings.length;
+ if ( len < 1 || len % 2 != 0 )
{
- lifecyclePhases.put( pluginBindings[i++], new LifecyclePhase( pluginBindings[i] ) );
+ throw new IllegalArgumentException( "Plugin bindings must have more than 0, even count of elements" );
+ }
+
+ HashMap<String, LifecyclePhase> lifecyclePhases = new HashMap<>( len / 2 );
+ for ( int i = 0; i < len; i = i + 2 )
+ {
+ lifecyclePhases.put( pluginBindings[i], new LifecyclePhase( pluginBindings[i + 1] ) );
}
Lifecycle lifecycle = new Lifecycle();