case ProvisioningRuntimeBuilder.PKG_DEP_ALL: for(String pkgName : builder.pkgOrder) { tmpPackages.put(pkgName, builder.pkgBuilders.get(pkgName).build(this)); final String pkgName = builder.pkgOrder.get(i); final PackageRuntime.Builder pkgBuilder = builder.pkgBuilders.get(pkgName); if(pkgBuilder.isFlagOn(PackageRuntime.INCLUDED)) { included.add(pkgBuilder.build(this)); } else if ((pkgBuilder.isFlagOn(PackageRuntime.PARENT_INCLUDED) || pkgBuilder.isFlagOn(PackageRuntime.ROOT)) && (rt.includedPkgDeps == ProvisioningRuntimeBuilder.PKG_DEP_PASSIVE && pkgBuilder.isPassiveWithSatisfiedDeps() || rt.includedPkgDeps == ProvisioningRuntimeBuilder.PKG_DEP_PASSIVE_PLUS && ((pkgBuilder.type & PackageDependencySpec.OPTIONAL) > 0 && pkgBuilder.type != PackageDependencySpec.PASSIVE || pkgBuilder.isPassiveWithSatisfiedDeps()))) { pkgBuilder.include(); included.add(pkgBuilder.build(this)); for(String pkgName : builder.pkgOrder) { final PackageRuntime.Builder pkgBuilder = builder.pkgBuilders.get(pkgName); if(pkgBuilder.isFlagOn(PackageRuntime.INCLUDED)) { tmpPackages.put(pkgName, pkgBuilder.build(this));
pkgBuilder.referencedAs(type); if(parent == null) { pkgBuilder.setFlag(PackageRuntime.ROOT); if(type == PackageDependencySpec.REQUIRED) { pkgBuilder.include(); } else if(!parent.isFlagOn(PackageRuntime.SCHEDULED)) { parent.addPackageDep(pkgBuilder, type, rt.includedPkgDeps);
for (int i = resolvedPkgBranch.size() - 1; i >= 0; --i) { final PackageRuntime.Builder pkg = resolvedPkgBranch.get(i); pkg.schedule(); pkg.clearFlag(PackageRuntime.ON_DEP_BRANCH); int i = resolvedPkgBranch.size() - offset; while (i > 0) { resolvedPkgBranch.remove(offset + --i).clearFlag(PackageRuntime.ON_DEP_BRANCH);
void addPackageDep(PackageRuntime.Builder dep, int type, int includedOptionalDeps) { if(type == PackageDependencySpec.REQUIRED) { if (isFlagOn(INCLUDED)) { dep.include(); } else { requiredDeps = CollectionUtils.add(requiredDeps, dep); } return; } if(includedOptionalDeps == ProvisioningRuntimeBuilder.PKG_DEP_REQUIRED || // special case in FeaturePackRuntime includedOptionalDeps == ProvisioningRuntimeBuilder.PKG_DEP_ALL) { return; } if (includedOptionalDeps == ProvisioningRuntimeBuilder.PKG_DEP_PASSIVE_PLUS || type == PackageDependencySpec.PASSIVE /* redundant check && includedOptionalDeps != ProvisioningRuntimeBuilder.PKG_DEP_REQUIRED*/) { optionalDeps = CollectionUtils.add(optionalDeps, dep); if (isFlagOn(INCLUDED)) { dep.setFlag(PARENT_INCLUDED); } } }
boolean isPassiveWithSatisfiedDeps() { if(type != PackageDependencySpec.PASSIVE) { return false; } final int specRequiredDeps = spec.getRequiredPackageDepsTotal(); if(specRequiredDeps == 0 || !setFlag(VISITED)) { return true; } if(specRequiredDeps != requiredDeps.size()) { return false; } for(PackageRuntime.Builder dep : requiredDeps) { if(!dep.isFlagOn(INCLUDED)) { return false; } } clearFlag(VISITED); return true; }
static Builder builder(FeaturePackRuntimeBuilder fp, PackageSpec spec, Path dir, int id) { return new Builder(fp, spec, dir, id); }
void schedule() { if(setFlag(SCHEDULED)) { fp.pkgOrder.add(spec.getName()); } }
boolean addToPkgDepBranch(PackageRuntime.Builder pkg) { if(pkg.setFlag(PackageRuntime.ON_DEP_BRANCH)) { resolvedPkgBranch.add(pkg); return true; } return false; }