diff --git a/compat/maven-model/src/main/java/org/apache/maven/model/io/xpp3/MavenXpp3Writer.java b/compat/maven-model/src/main/java/org/apache/maven/model/io/xpp3/MavenXpp3Writer.java index 66328256d9df..9826db17eef6 100644 --- a/compat/maven-model/src/main/java/org/apache/maven/model/io/xpp3/MavenXpp3Writer.java +++ b/compat/maven-model/src/main/java/org/apache/maven/model/io/xpp3/MavenXpp3Writer.java @@ -23,13 +23,14 @@ import java.io.IOException; import java.io.OutputStream; import java.io.Writer; +import java.util.function.Function; import org.apache.maven.model.InputLocation; import org.apache.maven.model.Model; import org.apache.maven.model.v4.MavenStaxWriter; /** - * @deprecated Use MavenStaxWriter instead + * @deprecated Use {@link MavenStaxWriter} instead */ @Deprecated public class MavenXpp3Writer { @@ -43,12 +44,10 @@ public class MavenXpp3Writer { // - Methods -/ // -----------/ - public MavenXpp3Writer() { - this(false); - } + public MavenXpp3Writer() {} - protected MavenXpp3Writer(boolean addLocationInformation) { - delegate.setAddLocationInformation(addLocationInformation); + protected MavenXpp3Writer(Function formatter) { + delegate.setStringFormatter(formatter); } /** diff --git a/compat/maven-model/src/main/java/org/apache/maven/model/io/xpp3/MavenXpp3WriterEx.java b/compat/maven-model/src/main/java/org/apache/maven/model/io/xpp3/MavenXpp3WriterEx.java index a9d8efab0484..f47dd6d2e47e 100644 --- a/compat/maven-model/src/main/java/org/apache/maven/model/io/xpp3/MavenXpp3WriterEx.java +++ b/compat/maven-model/src/main/java/org/apache/maven/model/io/xpp3/MavenXpp3WriterEx.java @@ -24,9 +24,10 @@ import org.apache.maven.model.InputLocation; import org.apache.maven.model.Model; +import org.apache.maven.model.v4.MavenStaxWriter; /** - * @deprecated Use MavenStaxWriter instead + * @deprecated Use {@link MavenStaxWriter} instead */ @Deprecated public class MavenXpp3WriterEx extends MavenXpp3Writer { @@ -36,7 +37,7 @@ public class MavenXpp3WriterEx extends MavenXpp3Writer { // -----------/ public MavenXpp3WriterEx() { - super(true); + super((inputLocation) -> inputLocation.toString()); } /** diff --git a/compat/maven-model/src/test/java/org/apache/maven/model/v4/ModelXmlTest.java b/compat/maven-model/src/test/java/org/apache/maven/model/v4/ModelXmlTest.java index b7d17e808d40..401ce41662f1 100644 --- a/compat/maven-model/src/test/java/org/apache/maven/model/v4/ModelXmlTest.java +++ b/compat/maven-model/src/test/java/org/apache/maven/model/v4/ModelXmlTest.java @@ -89,7 +89,6 @@ void testNamespaceInXmlNode() throws XMLStreamException { String toXml(Model model) throws IOException, XMLStreamException { StringWriter sw = new StringWriter(); MavenStaxWriter writer = new MavenStaxWriter(); - writer.setAddLocationInformation(false); writer.write(sw, model); return sw.toString(); } diff --git a/compat/maven-settings/src/main/java/org/apache/maven/settings/io/xpp3/SettingsXpp3Writer.java b/compat/maven-settings/src/main/java/org/apache/maven/settings/io/xpp3/SettingsXpp3Writer.java index ec189bc56760..5d87da15a3c0 100644 --- a/compat/maven-settings/src/main/java/org/apache/maven/settings/io/xpp3/SettingsXpp3Writer.java +++ b/compat/maven-settings/src/main/java/org/apache/maven/settings/io/xpp3/SettingsXpp3Writer.java @@ -38,7 +38,6 @@ public class SettingsXpp3Writer { public SettingsXpp3Writer() { delegate = new SettingsStaxWriter(); - delegate.setAddLocationInformation(false); } /** * Method setFileComment. diff --git a/compat/maven-toolchain-model/src/main/java/org/apache/maven/toolchain/model/io/xpp3/MavenToolchainsXpp3Writer.java b/compat/maven-toolchain-model/src/main/java/org/apache/maven/toolchain/model/io/xpp3/MavenToolchainsXpp3Writer.java index 48f87b95b0e4..f8ae6cea8d4d 100644 --- a/compat/maven-toolchain-model/src/main/java/org/apache/maven/toolchain/model/io/xpp3/MavenToolchainsXpp3Writer.java +++ b/compat/maven-toolchain-model/src/main/java/org/apache/maven/toolchain/model/io/xpp3/MavenToolchainsXpp3Writer.java @@ -41,7 +41,6 @@ public class MavenToolchainsXpp3Writer { public MavenToolchainsXpp3Writer() { delegate = new MavenToolchainsStaxWriter(); - delegate.setAddLocationInformation(false); } /** diff --git a/impl/maven-core/src/main/java/org/apache/maven/internal/transformation/impl/TransformerSupport.java b/impl/maven-core/src/main/java/org/apache/maven/internal/transformation/impl/TransformerSupport.java index 84e721225fc1..1656ea17d92e 100644 --- a/impl/maven-core/src/main/java/org/apache/maven/internal/transformation/impl/TransformerSupport.java +++ b/impl/maven-core/src/main/java/org/apache/maven/internal/transformation/impl/TransformerSupport.java @@ -80,7 +80,6 @@ protected void write(Model model, Path dest) throws IOException, XMLStreamExcept MavenStaxWriter writer = new MavenStaxWriter(); writer.setNamespace(String.format(NAMESPACE_FORMAT, version)); writer.setSchemaLocation(String.format(SCHEMA_LOCATION_FORMAT, version)); - writer.setAddLocationInformation(false); writer.write(w, model); } } diff --git a/impl/maven-impl/src/test/java/org/apache/maven/impl/DefaultModelXmlFactoryTest.java b/impl/maven-impl/src/test/java/org/apache/maven/impl/DefaultModelXmlFactoryTest.java index 436d7b979876..b2caba6cb2c5 100644 --- a/impl/maven-impl/src/test/java/org/apache/maven/impl/DefaultModelXmlFactoryTest.java +++ b/impl/maven-impl/src/test/java/org/apache/maven/impl/DefaultModelXmlFactoryTest.java @@ -19,10 +19,13 @@ package org.apache.maven.impl; import java.io.StringReader; +import java.io.StringWriter; +import org.apache.maven.api.model.InputLocation; import org.apache.maven.api.model.Model; import org.apache.maven.api.services.xml.XmlReaderException; import org.apache.maven.api.services.xml.XmlReaderRequest; +import org.apache.maven.api.services.xml.XmlWriterRequest; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -40,7 +43,7 @@ void setUp() { } @Test - void testValidNamespaceWithModelVersion400() throws Exception { + void testValidNamespaceWithModelVersion400() { String xml = """ @@ -56,7 +59,7 @@ void testValidNamespaceWithModelVersion400() throws Exception { } @Test - void testValidNamespaceWithModelVersion410() throws Exception { + void testValidNamespaceWithModelVersion410() { String xml = """ @@ -88,7 +91,7 @@ void testInvalidNamespaceWithModelVersion410() { } @Test - void testNoNamespaceWithModelVersion400() throws Exception { + void testNoNamespaceWithModelVersion400() { String xml = """ @@ -109,7 +112,7 @@ void testNullRequest() { } @Test - void testMalformedModelVersion() throws Exception { + void testMalformedModelVersion() { String xml = """ @@ -122,4 +125,91 @@ void testMalformedModelVersion() throws Exception { Model model = factory.read(request); assertEquals("invalid.version", model.getModelVersion()); } + + @Test + void testWriteModelWithoutInputLocationTracking() { + String model = + """ + + 4.0.0 + org.example + example-artifact + 1.0.0 + Example Project + + value + + """; + + String expected = + """ + + + 4.0.0 + org.example + example-artifact + 1.0.0 + Example Project + + value + + """; + + final StringWriter writer = new StringWriter(); + XmlWriterRequest request = XmlWriterRequest.builder() + .content(factory.read(XmlReaderRequest.builder() + .reader(new StringReader(model)) + .build())) + .writer(writer) + .build(); + + factory.write(request); + + final String processedPomAsString = writer.toString(); + assertEquals(expected, processedPomAsString); + } + + @Test + void testWriteModelWithInputLocationTracking() { + String model = + """ + + 4.0.0 + org.example + example-artifact + 1.0.0 + Example Project + + value + + """; + + String expected = + """ + + + 4.0.0 + org.example + example-artifact + 1.0.0 + Example Project + + value + + """; + + final StringWriter writer = new StringWriter(); + XmlWriterRequest request = XmlWriterRequest.builder() + .content(factory.read(XmlReaderRequest.builder() + .reader(new StringReader(model)) + .build())) + .writer(writer) + .inputLocationFormatter((x) -> "some formatter: " + (InputLocation) x) + .build(); + + factory.write(request); + + final String processedPomAsString = writer.toString(); + assertEquals(expected, processedPomAsString); + } } diff --git a/its/run-its.bat b/its/run-its.bat index 14810407bf6d..9ab175e5897b 100644 --- a/its/run-its.bat +++ b/its/run-its.bat @@ -22,9 +22,9 @@ @REM In rare occasions, some ITs may depend on latest maven snapshots. @REM In such cases you need to: @REM - build maven using `mvn install -PversionlessMavenDist -Dmaven.repo.local=[my-repo-local]` -@REM - run ITs using `mvn clean install -Prun-its,embedded -Dmaven.repo.local=[my-repo-local] -DmavenDistro=[maven-source-tree]/apache-maven/target/maven-bin.zip` +@REM - run ITs using `mvn clean install -Prun-its -Dmaven.repo.local=[my-repo-local] -DmavenDistro=[maven-source-tree]/apache-maven/target/maven-bin.zip` -mvn clean install -U -Prun-its,embedded -Dmaven.repo.local=%cd%\repo +mvn clean install -U -Prun-its -Dmaven.repo.local=%cd%\repo @REM If behind a proxy try this.. -@REM mvn clean install -Prun-its,embedded -Dmaven.repo.local=%cd%\repo -Dproxy.host= -Dproxy.port= -Dproxy.user= -Dproxy.pass= -Dproxy.nonProxyHosts= +@REM mvn clean install -Prun-its -Dmaven.repo.local=%cd%\repo -Dproxy.host= -Dproxy.port= -Dproxy.user= -Dproxy.pass= -Dproxy.nonProxyHosts= diff --git a/its/run-its.sh b/its/run-its.sh index 6fc3ec6bfc9d..f25b79759d23 100755 --- a/its/run-its.sh +++ b/its/run-its.sh @@ -25,10 +25,10 @@ # In rare occasions, some ITs may depend on latest maven snapshots. # In such cases you need to: # - build maven using `mvn install -PversionlessMavenDist -Dmaven.repo.local=[my-repo-local]` -# - run ITs using `mvn clean install -Prun-its,embedded -Dmaven.repo.local=[my-repo-local] -DmavenDistro=[maven-source-tree]/apache-maven/target/maven-bin.zip` +# - run ITs using `mvn clean install -Prun-its -Dmaven.repo.local=[my-repo-local] -DmavenDistro=[maven-source-tree]/apache-maven/target/maven-bin.zip` -mvn clean install -Prun-its,embedded -Dmaven.repo.local=`pwd`/repo +mvn clean install -Prun-its -Dmaven.repo.local=`pwd`/repo # If behind a proxy try this -# mvn clean install -Prun-its,embedded -Dmaven.repo.local=`pwd`/repo -Dproxy.host= -Dproxy.port= -Dproxy.user= -Dproxy.pass= -Dproxy.nonProxyHosts= +# mvn clean install -Prun-its -Dmaven.repo.local=`pwd`/repo -Dproxy.host= -Dproxy.port= -Dproxy.user= -Dproxy.pass= -Dproxy.nonProxyHosts= diff --git a/src/mdo/writer-stax.vm b/src/mdo/writer-stax.vm index 9f12f7fc4e51..ad5760e9e370 100644 --- a/src/mdo/writer-stax.vm +++ b/src/mdo/writer-stax.vm @@ -109,8 +109,6 @@ public class ${className} { private String fileComment = null; #if ( $locationTracking ) - private boolean addLocationInformation = true; - /** * Field stringFormatter. */ @@ -149,13 +147,6 @@ public class ${className} { } //-- void setFileComment(String) #if ( $locationTracking ) - /** - * Method setAddLocationInformation. - */ - public void setAddLocationInformation(boolean addLocationInformation) { - this.addLocationInformation = addLocationInformation; - } //-- void setAddLocationInformation(String) - /** * Method setStringFormatter. * @@ -383,7 +374,7 @@ public class ${className} { } serializer.writeEndElement(); #if ( $locationTracking ) - if (addLocationInformation && dom.inputLocation() instanceof InputLocation inputLocation && dom.children().isEmpty()) { + if (stringFormatter != null && dom.inputLocation() instanceof InputLocation inputLocation && dom.children().isEmpty()) { serializer.writeComment(toString(inputLocation)); } #end @@ -421,7 +412,7 @@ public class ${className} { * @throws IOException */ protected void writeLocationTracking(InputLocationTracker locationTracker, Object key, XMLStreamWriter serializer) throws IOException, XMLStreamException { - if (addLocationInformation) { + if (stringFormatter != null) { InputLocation location = (locationTracker == null) ? null : locationTracker.getLocation(key); if (location != null) { serializer.writeComment(toString(location));