Skip to content

Commit 2803db0

Browse files
authored
Merge pull request #28948 from cbridgha/FixNPEFeatureDef
Skipping features that don't resolve or can't be found
2 parents 2dd0b0d + 39344ae commit 2803db0

File tree

1 file changed

+32
-29
lines changed

1 file changed

+32
-29
lines changed

dev/com.ibm.ws.kernel.feature.core/src/com/ibm/ws/kernel/feature/internal/FeatureResolverImpl.java

Lines changed: 32 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -528,7 +528,7 @@ public Result doResolve(Repository repository,
528528
Collection<String> rootPlatforms) {
529529

530530
if (isBeta) {
531-
if(hasVersionlessFeatures(repository, rootFeatures)){
531+
if (hasVersionlessFeatures(repository, rootFeatures)) {
532532
Collection<String> serverPlatforms = collectPlatformCompatibilityFeatures(repository, rootPlatforms);
533533
if (serverPlatforms != null) {
534534
rootPlatforms = serverPlatforms;
@@ -557,7 +557,7 @@ public Result doResolve(Repository repository,
557557

558558
//add versionless after normal resolution for packaging
559559
List<String> filteredVersionless = new ArrayList<>();
560-
if(allowedMultipleVersions != null){
560+
if (allowedMultipleVersions != null) {
561561
filteredVersionless = filterVersionless(rootFeaturesList, selectionContext);
562562
}
563563

@@ -586,19 +586,22 @@ public Result doResolve(Repository repository,
586586
}
587587
resolved = doResolveFeatures(rootFeaturesList, preResolved, selectionContext);
588588
} while (!!!(autoFeaturesToInstall = processAutoFeatures(kernelFeatures, resolved, seenAutoFeatures, selectionContext)).isEmpty());
589-
590-
if(allowedMultipleVersions != null && !filteredVersionless.isEmpty()){
589+
590+
if (allowedMultipleVersions != null && !filteredVersionless.isEmpty()) {
591591
addBackVersionless(filteredVersionless, selectionContext);
592592
}
593593

594594
// Finally return the selected result
595595
return selectionContext.getResult();
596596
}
597597

598-
private boolean hasVersionlessFeatures(Repository repo, Collection<String> featureList){
599-
for(String s : featureList){
598+
private boolean hasVersionlessFeatures(Repository repo, Collection<String> featureList) {
599+
for (String s : featureList) {
600600
ProvisioningFeatureDefinition feature = repo.getFeature(s);
601-
if(feature.getSymbolicName().startsWith("io.openliberty.versionless.")){
601+
if (feature == null)
602+
//Can't find the feature of that name - just skip for now....
603+
continue;
604+
if (feature.getSymbolicName().startsWith("io.openliberty.versionless.")) {
602605
return true;
603606
}
604607
// after apis are implemented
@@ -637,12 +640,12 @@ private List<String> checkRootsAreAccessibleAndSetFullName(List<String> rootFeat
637640
return rootFeatures;
638641
}
639642

640-
private List<String> filterVersionless(Collection<String> rootFeatures, SelectionContext selectionContext){
643+
private List<String> filterVersionless(Collection<String> rootFeatures, SelectionContext selectionContext) {
641644
List<String> versionless = new ArrayList<String>();
642645

643-
for(String feature : rootFeatures){
646+
for (String feature : rootFeatures) {
644647
ProvisioningFeatureDefinition featureDef = selectionContext.getRepository().getFeature(feature);
645-
if(featureDef.getSymbolicName().startsWith("io.openliberty.versionless")){
648+
if (featureDef.getSymbolicName().startsWith("io.openliberty.versionless")) {
646649
versionless.add(feature);
647650
}
648651
}
@@ -652,57 +655,57 @@ private List<String> filterVersionless(Collection<String> rootFeatures, Selectio
652655
return versionless;
653656
}
654657

655-
private void addBackVersionless(List<String> versionlessFeatures, SelectionContext selectionContext){
658+
private void addBackVersionless(List<String> versionlessFeatures, SelectionContext selectionContext) {
656659
FeatureResolverResultImpl result = selectionContext.getResult();
657660
Set<String> addingFeatures = new HashSet<>();
658661

659662
//loop through all the versionless features we filtered out earlier
660-
for(String versionlessFeature : versionlessFeatures){
663+
for (String versionlessFeature : versionlessFeatures) {
661664
ProvisioningFeatureDefinition versionlessDef = selectionContext.getRepository().getFeature(versionlessFeature);
662665
Collection<FeatureResource> versionlessDeps = versionlessDef.getConstituents(SubsystemContentType.FEATURE_TYPE);
663666
List<String> features = new ArrayList<>();
664667
for (FeatureResource privateVersionless : versionlessDeps) { //versionlessDeps.size will always be 1, the private versionless feature
665668
String[] nav = parseNameAndVersion(privateVersionless.getSymbolicName());
666669
features.add(nav[0] + "-" + nav[1]);
667670

668-
if(privateVersionless.getTolerates() != null){
669-
for(String version : privateVersionless.getTolerates()) {
671+
if (privateVersionless.getTolerates() != null) {
672+
for (String version : privateVersionless.getTolerates()) {
670673
features.add(nav[0] + "-" + version);
671674
}
672675
}
673676
}
674677
// loops through the private features related to the versionless feature
675-
for(String feature : features){
678+
for (String feature : features) {
676679
ProvisioningFeatureDefinition featureDef = selectionContext.getRepository().getFeature(feature);
677-
if(featureDef != null){
680+
if (featureDef != null) {
678681
boolean addFeature = false;
679682
FeatureResource compatibleFeature = null;
680683
Collection<FeatureResource> featureDeps = featureDef.getConstituents(SubsystemContentType.FEATURE_TYPE);
681684
for (FeatureResource featureDep : featureDeps) { // could be multiple
682-
if(!!!featureDep.getSymbolicName().contains("noShip")){
685+
if (!!!featureDep.getSymbolicName().contains("noShip")) {
683686
ProvisioningFeatureDefinition versionedFeature = selectionContext.getRepository().getFeature(featureDep.getSymbolicName());
684-
if(versionedFeature == null){
687+
if (versionedFeature == null) {
685688
continue;
686689
}
687-
if(featureDep.getSymbolicName().startsWith("com.ibm.websphere.appserver.eeCompatible")
688-
|| featureDep.getSymbolicName().startsWith("io.openliberty.internal.mpVersion")){
689-
690+
if (featureDep.getSymbolicName().startsWith("com.ibm.websphere.appserver.eeCompatible")
691+
|| featureDep.getSymbolicName().startsWith("io.openliberty.internal.mpVersion")) {
692+
690693
compatibleFeature = featureDep;
691694
}
692695
// if we resolved the public versioned feature, add the private versionless linking feature
693-
if(versionedFeature.getIbmShortName() != null && result._resolved.contains(versionedFeature.getIbmShortName())){
696+
if (versionedFeature.getIbmShortName() != null && result._resolved.contains(versionedFeature.getIbmShortName())) {
694697
addFeature = true;
695698
}
696699
}
697700
}
698-
if(addFeature){
701+
if (addFeature) {
699702
addingFeatures.add(feature);
700-
if(compatibleFeature != null){
703+
if (compatibleFeature != null) {
701704
String[] nav = parseNameAndVersion(compatibleFeature.getSymbolicName());
702705
addingFeatures.add(nav[0] + "-" + nav[1]);
703706

704-
if(compatibleFeature.getTolerates() != null){
705-
for(String version : compatibleFeature.getTolerates()) {
707+
if (compatibleFeature.getTolerates() != null) {
708+
for (String version : compatibleFeature.getTolerates()) {
706709
addingFeatures.add(nav[0] + "-" + version);
707710
}
708711
}
@@ -717,7 +720,7 @@ private void addBackVersionless(List<String> versionlessFeatures, SelectionConte
717720
//for the environment variable
718721
addingFeatures.add(EE_COMPATIBLE_FEATURE_NAME);
719722
addingFeatures.add(MP_COMPATIBLE_FEATURE_NAME);
720-
723+
721724
result._resolved.addAll(addingFeatures);
722725
}
723726

@@ -802,7 +805,7 @@ Set<String> processCurrentPermutation(Collection<String> rootFeatures, Set<Strin
802805
(numBlocked != selectionContext.getBlockedCount()) ||
803806
selectionContext.hasTriedVersionlessResolution());
804807

805-
if(selectionContext.hasPostponedVersionless()){
808+
if (selectionContext.hasPostponedVersionless()) {
806809
selectionContext.addVersionlessConflicts();
807810
}
808811

@@ -1369,7 +1372,7 @@ boolean hasPostponedVersionless() {
13691372
}
13701373

13711374
void addVersionlessConflicts() {
1372-
for(String s : _current._postponedVersionless.keySet()){
1375+
for (String s : _current._postponedVersionless.keySet()) {
13731376
_current._result.addUnresolvedVersionless(_current._postponedVersionless.get(s).getChains().get(0).getChain().get(0));
13741377
}
13751378
}

0 commit comments

Comments
 (0)