24
24
import java .util .List ;
25
25
import java .util .Map ;
26
26
import java .util .SortedSet ;
27
+ import java .util .function .BiPredicate ;
27
28
import java .util .stream .Collectors ;
28
29
29
- import org .apache .maven .artifact .versioning .DefaultArtifactVersion ;
30
30
import org .slf4j .Logger ;
31
31
import org .slf4j .LoggerFactory ;
32
32
33
33
import org .springframework .boot .build .bom .Library ;
34
34
import org .springframework .boot .build .bom .Library .Group ;
35
35
import org .springframework .boot .build .bom .Library .Module ;
36
- import org .springframework .boot .build .bom .Library .ProhibitedVersion ;
37
- import org .springframework .boot .build .bom .UpgradePolicy ;
38
36
import org .springframework .boot .build .bom .bomr .version .DependencyVersion ;
39
37
40
38
/**
@@ -48,15 +46,21 @@ class StandardLibraryUpdateResolver implements LibraryUpdateResolver {
48
46
49
47
private final VersionResolver versionResolver ;
50
48
51
- private final UpgradePolicy upgradePolicy ;
49
+ private final BiPredicate < Library , DependencyVersion > predicate ;
52
50
53
- private final boolean movingToSnapshots ;
54
-
55
- StandardLibraryUpdateResolver (VersionResolver versionResolver , UpgradePolicy upgradePolicy ,
56
- boolean movingToSnapshots ) {
51
+ StandardLibraryUpdateResolver (VersionResolver versionResolver ,
52
+ List <BiPredicate <Library , DependencyVersion >> predicates ) {
57
53
this .versionResolver = versionResolver ;
58
- this .upgradePolicy = upgradePolicy ;
59
- this .movingToSnapshots = movingToSnapshots ;
54
+ BiPredicate <Library , DependencyVersion > predicate = null ;
55
+ for (BiPredicate <Library , DependencyVersion > p : predicates ) {
56
+ if (predicate == null ) {
57
+ predicate = p ;
58
+ }
59
+ else {
60
+ predicate = predicate .and (p );
61
+ }
62
+ }
63
+ this .predicate = predicate ;
60
64
}
61
65
62
66
@ Override
@@ -87,26 +91,24 @@ protected List<VersionOption> getVersionOptions(Library library, Map<String, Lib
87
91
88
92
private List <VersionOption > determineResolvedVersionOptions (Library library ) {
89
93
Map <String , SortedSet <DependencyVersion >> moduleVersions = new LinkedHashMap <>();
90
- DependencyVersion libraryVersion = library .getVersion ().getVersion ();
91
94
for (Group group : library .getGroups ()) {
92
95
for (Module module : group .getModules ()) {
93
96
moduleVersions .put (group .getId () + ":" + module .getName (),
94
- getLaterVersionsForModule (group .getId (), module .getName (), libraryVersion ));
97
+ getLaterVersionsForModule (group .getId (), module .getName (), library ));
95
98
}
96
99
for (String bom : group .getBoms ()) {
97
- moduleVersions .put (group .getId () + ":" + bom ,
98
- getLaterVersionsForModule (group .getId (), bom , libraryVersion ));
100
+ moduleVersions .put (group .getId () + ":" + bom , getLaterVersionsForModule (group .getId (), bom , library ));
99
101
}
100
102
for (String plugin : group .getPlugins ()) {
101
103
moduleVersions .put (group .getId () + ":" + plugin ,
102
- getLaterVersionsForModule (group .getId (), plugin , libraryVersion ));
104
+ getLaterVersionsForModule (group .getId (), plugin , library ));
103
105
}
104
106
}
105
107
List <DependencyVersion > allVersions = moduleVersions .values ()
106
108
.stream ()
107
109
.flatMap (SortedSet ::stream )
108
110
.distinct ()
109
- .filter ((dependencyVersion ) -> isPermitted ( dependencyVersion , library . getProhibitedVersions () ))
111
+ .filter ((dependencyVersion ) -> this . predicate . test ( library , dependencyVersion ))
110
112
.toList ();
111
113
if (allVersions .isEmpty ()) {
112
114
return Collections .emptyList ();
@@ -117,32 +119,6 @@ private List<VersionOption> determineResolvedVersionOptions(Library library) {
117
119
.collect (Collectors .toList ());
118
120
}
119
121
120
- private boolean isPermitted (DependencyVersion dependencyVersion , List <ProhibitedVersion > prohibitedVersions ) {
121
- for (ProhibitedVersion prohibitedVersion : prohibitedVersions ) {
122
- String dependencyVersionToString = dependencyVersion .toString ();
123
- if (prohibitedVersion .getRange () != null && prohibitedVersion .getRange ()
124
- .containsVersion (new DefaultArtifactVersion (dependencyVersionToString ))) {
125
- return false ;
126
- }
127
- for (String startsWith : prohibitedVersion .getStartsWith ()) {
128
- if (dependencyVersionToString .startsWith (startsWith )) {
129
- return false ;
130
- }
131
- }
132
- for (String endsWith : prohibitedVersion .getEndsWith ()) {
133
- if (dependencyVersionToString .endsWith (endsWith )) {
134
- return false ;
135
- }
136
- }
137
- for (String contains : prohibitedVersion .getContains ()) {
138
- if (dependencyVersionToString .contains (contains )) {
139
- return false ;
140
- }
141
- }
142
- }
143
- return true ;
144
- }
145
-
146
122
private List <String > getMissingModules (Map <String , SortedSet <DependencyVersion >> moduleVersions ,
147
123
DependencyVersion version ) {
148
124
List <String > missingModules = new ArrayList <>();
@@ -154,12 +130,8 @@ private List<String> getMissingModules(Map<String, SortedSet<DependencyVersion>>
154
130
return missingModules ;
155
131
}
156
132
157
- private SortedSet <DependencyVersion > getLaterVersionsForModule (String groupId , String artifactId ,
158
- DependencyVersion currentVersion ) {
159
- SortedSet <DependencyVersion > versions = this .versionResolver .resolveVersions (groupId , artifactId );
160
- versions .removeIf ((candidate ) -> !this .upgradePolicy .test (candidate , currentVersion ));
161
- versions .removeIf ((candidate ) -> !currentVersion .isUpgrade (candidate , this .movingToSnapshots ));
162
- return versions ;
133
+ private SortedSet <DependencyVersion > getLaterVersionsForModule (String groupId , String artifactId , Library library ) {
134
+ return this .versionResolver .resolveVersions (groupId , artifactId );
163
135
}
164
136
165
137
}
0 commit comments