15
15
*/
16
16
package org .springframework .sbm .build .impl ;
17
17
18
+ import com .fasterxml .jackson .core .JsonProcessingException ;
18
19
import lombok .extern .slf4j .Slf4j ;
19
20
import org .openrewrite .ExecutionContext ;
20
21
import org .openrewrite .Parser ;
24
25
import org .openrewrite .internal .lang .Nullable ;
25
26
import org .openrewrite .marker .Markers ;
26
27
import org .openrewrite .maven .*;
28
+ import org .openrewrite .maven .internal .MavenXmlMapper ;
27
29
import org .openrewrite .maven .tree .MavenResolutionResult ;
28
30
import org .openrewrite .maven .tree .Parent ;
29
31
import org .openrewrite .maven .tree .ResolvedDependency ;
30
32
import org .openrewrite .maven .tree .ResolvedManagedDependency ;
31
33
import org .openrewrite .maven .tree .Scope ;
34
+ import org .openrewrite .xml .ChangeTagValueVisitor ;
32
35
import org .openrewrite .xml .tree .Xml ;
36
+ import org .openrewrite .xml .tree .Xml .Tag ;
37
+
33
38
import org .springframework .context .ApplicationEventPublisher ;
34
39
import org .springframework .sbm .build .api .BuildFile ;
35
40
import org .springframework .sbm .build .api .DependenciesChangedEvent ;
70
75
public class OpenRewriteMavenBuildFile extends RewriteSourceFileHolder <Xml .Document > implements BuildFile {
71
76
72
77
private final ApplicationEventPublisher eventPublisher ;
73
- private PluginRepositoryHandler pluginRepositoryHandler = new PluginRepositoryHandler ();
78
+ private final PluginRepositoryHandler pluginRepositoryHandler = new PluginRepositoryHandler ();
79
+ private final MavenBuildFileRefactoring <Xml .Document > refactoring ;
74
80
75
81
// TODO: #7 clarify if RefreshPomModel is still required?
76
82
// Execute separately since RefreshPomModel caches the refreshed maven files after the first visit
@@ -105,7 +111,7 @@ protected List<SourceFile> visit(List<SourceFile> before, ExecutionContext ctx)
105
111
for (int i = 0 ; i < newMavenFiles .size (); i ++) {
106
112
Optional <MavenResolutionResult > mavenModels = MavenBuildFileUtil .findMavenResolution (mavenFiles .get (i ));
107
113
Optional <MavenResolutionResult > newMavenModels = MavenBuildFileUtil .findMavenResolution (newMavenFiles .get (i ));
108
- mavenFiles .get (i ).withMarkers (Markers .build (Arrays . asList (newMavenModels .get ())));
114
+ mavenFiles .get (i ).withMarkers (Markers .build (List . of (newMavenModels .get ())));
109
115
// FIXME: 497 verify correctness
110
116
mavenFiles .set (i , newMavenFiles .get (i ));
111
117
}
@@ -143,22 +149,23 @@ public OpenRewriteMavenBuildFile(Path absoluteProjectPath,
143
149
super (absoluteProjectPath , sourceFile );
144
150
this .eventPublisher = eventPublisher ;
145
151
this .executionContext = executionContext ;
152
+ this .refactoring = new MavenBuildFileRefactoring <>(this .getResource ());
146
153
}
147
154
148
155
public void apply (Recipe recipe ) {
149
156
// FIXME: #7 Make ExecutionContext a Spring Bean and caching configurable, also if the project root is used as workdir it must be added to .gitignore
150
- // FIXME: #7 this made it veeery slow
151
157
//executionContext.putMessage("org.openrewrite.maven.pomCache", new RocksdbMavenPomCache(this.getAbsoluteProjectDir()));
152
- List <Result > result = recipe .run (List .of (getSourceFile ()), executionContext ).getResults ();
153
- if (!result .isEmpty ()) {
154
- replaceWith ((Xml .Document ) result .get (0 ).getAfter ());
155
- }
158
+ refactoring .execute (recipe );
156
159
}
157
160
158
161
public MavenResolutionResult getPom () {
159
162
return MavenBuildFileUtil .findMavenResolution (getSourceFile ()).get ();
160
163
}
161
164
165
+ public RewriteSourceFileHolder <Xml .Document > getResource () {
166
+ return this ;
167
+ }
168
+
162
169
@ Override
163
170
public void addDependency (Dependency dependency ) {
164
171
if (!containsDependency (dependency )) {
@@ -263,7 +270,6 @@ public List<Dependency> getDeclaredDependencies(Scope... scopes) {
263
270
@ Override
264
271
public List <Dependency > getRequestedDependencies () {
265
272
List <org .openrewrite .maven .tree .Dependency > requestedDependencies = getPom ().getPom ().getRequestedDependencies ();
266
-
267
273
// FIXME: #7 use getPom().getDependencies() instead ?
268
274
List <Dependency > declaredDependenciesWithEffectiveVersions = requestedDependencies .stream ()
269
275
.map (d -> mapDependency (d ))
@@ -312,6 +318,8 @@ public List<Dependency> getRequestedDependencies() {
312
318
313
319
/**
314
320
* {@inheritDoc}
321
+ *
322
+ * TODO: #497 Test with declared and transitive dependencies
315
323
*/
316
324
@ Override
317
325
public Set <Dependency > getEffectiveDependencies (Scope scope ) {
@@ -574,22 +582,22 @@ public boolean hasPlugin(Plugin plugin) {
574
582
575
583
@ Override
576
584
public void addPlugin (Plugin plugin ) {
577
- apply (new AddMavenPlugin (plugin ));
585
+ apply (new AddMavenPlugin (( OpenRewriteMavenPlugin ) plugin ));
578
586
}
579
587
580
588
@ Override
581
589
public List <Path > getSourceFolders () {
582
- return Arrays . asList (getAbsolutePath ().getParent ().resolve (JAVA_SOURCE_FOLDER ));
590
+ return List . of (getAbsolutePath ().getParent ().resolve (JAVA_SOURCE_FOLDER ));
583
591
}
584
592
585
593
@ Override
586
594
public List <Path > getResourceFolders () {
587
- return Arrays . asList (getAbsolutePath ().getParent ().resolve (RESOURCE_FOLDER ));
595
+ return List . of (getAbsolutePath ().getParent ().resolve (RESOURCE_FOLDER ));
588
596
}
589
597
590
598
@ Override
591
599
public List <Path > getTestResourceFolders () {
592
- return Arrays . asList (getAbsolutePath ().getParent ().resolve (RESOURCE_TEST_FOLDER ));
600
+ return List . of (getAbsolutePath ().getParent ().resolve (RESOURCE_TEST_FOLDER ));
593
601
}
594
602
595
603
@ Override
@@ -602,21 +610,23 @@ public List<Path> getClasspath() {
602
610
603
611
@ Override
604
612
public List <Path > getTestSourceFolders () {
605
- return Arrays . asList (getAbsolutePath ().getParent ().resolve (JAVA_TEST_SOURCE_FOLDER ));
613
+ return List . of (getAbsolutePath ().getParent ().resolve (JAVA_TEST_SOURCE_FOLDER ));
606
614
}
607
615
608
616
final public String getProperty (String key ) {
609
- return getPom ().getPom ().getProperties ().get (key );
617
+ return getPom ().getPom ().getRequested (). getProperties ().get (key );
610
618
}
611
619
620
+ @ Override
621
+ final public void deleteProperty (String key ){
622
+ apply (new RemoveProperty (key ));
623
+ apply (new RefreshPomModel ());
624
+ }
625
+
612
626
final public void setProperty (String key , String value ) {
613
- if (value == null ) {
614
- apply (new RemoveProperty (key ));
615
- } else {
616
- String current = getProperty (key );
617
- apply (current == null ? new AddProperty (key , value ) : new ChangePropertyValue (key , value , false ));
618
- }
619
- apply (new RefreshPomModel ());
627
+ String current = getProperty (key );
628
+ apply (current == null ? new ChangePropertyValue (key , value , true ) : new ChangePropertyValue (key , value , false ));
629
+ apply (new RefreshPomModel ());
620
630
}
621
631
622
632
@ Override
@@ -654,6 +664,7 @@ public String getArtifactId() {
654
664
public String getVersion () {
655
665
return resolve (getPom ().getPom ().getVersion ());
656
666
}
667
+
657
668
@ Override
658
669
public String getCoordinates () {
659
670
return getGroupId () + ":" + getArtifactId () + ":" + getVersion ();
@@ -754,45 +765,9 @@ private boolean anyRegexMatchesCoordinate(Plugin p, String... regex) {
754
765
755
766
@ Override
756
767
public List <Plugin > getPlugins () {
757
-
758
- List <Plugin > plugins = new ArrayList <>();
759
-
760
- MavenVisitor mavenVisitor = new MavenVisitor <ExecutionContext >() {
761
-
762
- @ Override
763
- public Xml .Document visitDocument (Xml .Document maven , ExecutionContext ctx ) {
764
- Xml .Tag mavenRoot = maven .getRoot ();
765
- Optional <Xml .Tag > build = mavenRoot .getChild ("build" );
766
- if (build .isPresent ()) {
767
- Xml .Tag buildTag = build .get ();
768
- Optional <Xml .Tag > pluginTags = buildTag .getChild ("plugins" );
769
- if (pluginTags .isPresent ()) {
770
- List <Xml .Tag > plugin = pluginTags .get ().getChildren ("plugin" );
771
- List <Plugin > pluginList = plugin .stream ()
772
- .map (this ::mapToPlugin )
773
- .collect (Collectors .toList ());
774
- plugins .addAll (pluginList );
775
- }
776
- }
777
- return null ;
778
- }
779
-
780
- private Plugin mapToPlugin (Xml .Tag tag ) {
781
- String groupId = tag .getChild ("groupId" ).get ().getValue ().get ();
782
- String artifactId = tag .getChild ("artifactId" ).get ().getValue ().get ();
783
- Optional <Xml .Tag > versionTag = tag .getChild ("version" );
784
- String version = null ;
785
- if (versionTag .isPresent ()) {
786
- version = versionTag .get ().getValue ().get ();
787
- }
788
- Plugin plugin = new Plugin (groupId , artifactId , version , List .of (), "" , "" );
789
- return plugin ;
790
- }
791
- };
792
-
793
- mavenVisitor .visitDocument (getSourceFile (), executionContext );
794
-
795
- return plugins ;
768
+ return getPom ().getPom ().getRequested ().getPlugins ().stream ()
769
+ .map (p -> new OpenRewriteMavenPlugin (p , getResource (), refactoring ))
770
+ .collect (Collectors .toList ());
796
771
}
797
772
798
773
/**
@@ -830,6 +805,14 @@ public void removePlugins(String... coordinates) {
830
805
}
831
806
}
832
807
808
+ @ Override
809
+ public Optional <Plugin > findPlugin (String groupId , String artifactId ){
810
+ return getPlugins ()
811
+ .stream ()
812
+ .filter (plugin -> plugin .getGroupId ().equals (groupId ) &&
813
+ plugin .getArtifactId ().equals (artifactId ))
814
+ .findAny ();
815
+ }
833
816
834
817
private String resolve (String expression ) {
835
818
return getPom ().getPom ().getValue (expression );
0 commit comments