in src/main/java/org/apache/sling/feature/builder/FeatureBuilder.java [182:222]
public static Feature assemble(
final ArtifactId featureId,
final BuilderContext context,
final Feature... features) {
if ( featureId == null || features == null || context == null ) {
throw new IllegalArgumentException("Features and/or context must not be null");
}
final Feature target = new Feature(featureId);
final Feature[] assembledFeatures = FeatureBuilder.deduplicate(context, features);
// append feature list in extension
final Extension list = new Extension(ExtensionType.ARTIFACTS, Extension.EXTENSION_NAME_ASSEMBLED_FEATURES,
ExtensionState.TRANSIENT);
for(final Feature feature : assembledFeatures) {
list.getArtifacts().add(new Artifact(feature.getId()));
}
target.getExtensions().add(list);
// assemble feature
boolean targetIsComplete = true;
boolean firstMerge = true;
for(final Feature assembled : assembledFeatures) {
if (!assembled.isComplete()) {
targetIsComplete = false;
}
merge(target, assembled, context, context.getArtifactOverrides(), context.getConfigOverrides(), null, false, firstMerge);
firstMerge = false;
}
// check complete flag
if (targetIsComplete) {
target.setComplete(true);
}
target.setAssembled(true);
return target;
}