SLING-4970 : Potential NPE with transitive models

git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1698093 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java b/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java
index 692bc56..8a51986 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java
@@ -166,7 +166,7 @@
         // we have to create an effective model to add the dependencies
         final Model effectiveModel = ModelUtility.getEffectiveModel(info.localModel, resolverOptions);
 
-        final List<Model> dependencies = searchSlingstartDependencies(env, info, effectiveModel);
+        final List<Model> dependencies = searchSlingstartDependencies(env, info, info.localModel, effectiveModel);
         info.model = new Model();
         for(final Model d : dependencies) {
             ModelUtility.merge(info.model, d);
@@ -255,6 +255,7 @@
     private static List<Model> searchSlingstartDependencies(
             final Environment env,
             final ProjectInfo info,
+            final Model rawModel,
             final Model effectiveModel)
     throws MavenExecutionException {
         // slingstart or slingfeature
@@ -332,7 +333,16 @@
                     }
                     for(final org.apache.sling.provisioning.model.Artifact r : removeList) {
                         group.remove(r);
-                        info.localModel.getFeature(feature.getName()).getRunMode(runMode.getNames()).getArtifactGroup(group.getStartLevel()).remove(r);
+                        final Feature localModelFeature = rawModel.getFeature(feature.getName());
+                        if ( localModelFeature != null ) {
+                            final RunMode localRunMode = localModelFeature.getRunMode(runMode.getNames());
+                            if ( localRunMode != null ) {
+                                final ArtifactGroup localAG = localRunMode.getArtifactGroup(group.getStartLevel());
+                                if ( localAG != null ) {
+                                    localAG.remove(r);
+                                }
+                            }
+                        }
                     }
                 }
             }
@@ -348,7 +358,7 @@
         // we have to create an effective model to add the dependencies
         final Model effectiveModel = ModelUtility.getEffectiveModel(rawModel, new ResolverOptions());
 
-        final List<Model> dependencies = searchSlingstartDependencies(env, info, effectiveModel);
+        final List<Model> dependencies = searchSlingstartDependencies(env, info, rawModel, effectiveModel);
         Model mergingModel = new Model();
         for(final Model d : dependencies) {
             ModelUtility.merge(mergingModel, d);