From 4369fa8dfffd33c438604c0cbab771b88920bbb5 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Sun, 11 Aug 2024 00:21:50 +0200 Subject: [PATCH] [API] Expose InputLocation formatter in the XmlFactory (#1616) --- .../api/services/xml/XmlWriterRequest.java | 26 +++++++++++++++++-- .../apache/maven/api/model/InputLocation.java | 17 ------------ .../internal/impl/DefaultModelXmlFactory.java | 12 ++++++--- .../maven/model/io/xpp3/MavenXpp3Writer.java | 9 +------ src/mdo/writer-stax.vm | 9 ++++--- 5 files changed, 39 insertions(+), 34 deletions(-) diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/xml/XmlWriterRequest.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/xml/XmlWriterRequest.java index f9a305dc3f..46ee89c8cf 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/xml/XmlWriterRequest.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/xml/XmlWriterRequest.java @@ -21,6 +21,7 @@ import java.io.OutputStream; import java.io.Writer; import java.nio.file.Path; +import java.util.function.Function; import org.apache.maven.api.annotations.Experimental; import org.apache.maven.api.annotations.Nonnull; @@ -47,6 +48,9 @@ public interface XmlWriterRequest { @Nonnull T getContent(); + @Nullable + Function getInputLocationFormatter(); + static XmlWriterRequestBuilder builder() { return new XmlWriterRequestBuilder<>(); } @@ -56,6 +60,7 @@ class XmlWriterRequestBuilder { OutputStream outputStream; Writer writer; T content; + Function inputLocationFormatter; public XmlWriterRequestBuilder path(Path path) { this.path = path; @@ -77,8 +82,13 @@ public XmlWriterRequestBuilder content(T content) { return this; } + public XmlWriterRequestBuilder inputLocationFormatter(Function inputLocationFormatter) { + this.inputLocationFormatter = inputLocationFormatter; + return this; + } + public XmlWriterRequest build() { - return new DefaultXmlWriterRequest<>(path, outputStream, writer, content); + return new DefaultXmlWriterRequest<>(path, outputStream, writer, content, inputLocationFormatter); } private static class DefaultXmlWriterRequest implements XmlWriterRequest { @@ -86,12 +96,19 @@ private static class DefaultXmlWriterRequest implements XmlWriterRequest { final OutputStream outputStream; final Writer writer; final T content; + final Function inputLocationFormatter; - DefaultXmlWriterRequest(Path path, OutputStream outputStream, Writer writer, T content) { + DefaultXmlWriterRequest( + Path path, + OutputStream outputStream, + Writer writer, + T content, + Function inputLocationFormatter) { this.path = path; this.outputStream = outputStream; this.writer = writer; this.content = content; + this.inputLocationFormatter = inputLocationFormatter; } @Override @@ -113,6 +130,11 @@ public Writer getWriter() { public T getContent() { return content; } + + @Override + public Function getInputLocationFormatter() { + return inputLocationFormatter; + } } } } diff --git a/api/maven-api-model/src/main/java/org/apache/maven/api/model/InputLocation.java b/api/maven-api-model/src/main/java/org/apache/maven/api/model/InputLocation.java index 28bd415366..3ccd9d7d82 100644 --- a/api/maven-api-model/src/main/java/org/apache/maven/api/model/InputLocation.java +++ b/api/maven-api-model/src/main/java/org/apache/maven/api/model/InputLocation.java @@ -152,21 +152,4 @@ public static InputLocation merge(InputLocation target, InputLocation source, Co return new InputLocation(-1, -1, InputSource.merge(source.getSource(), target.getSource()), locations); } // -- InputLocation merge( InputLocation, InputLocation, java.util.Collection ) - - /** - * Class StringFormatter. - * - * @version $Revision$ $Date$ - */ - public interface StringFormatter { - - // -----------/ - // - Methods -/ - // -----------/ - - /** - * Method toString. - */ - String toString(InputLocation location); - } } diff --git a/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultModelXmlFactory.java b/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultModelXmlFactory.java index 70cf3bd1ef..488fd38ff3 100644 --- a/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultModelXmlFactory.java +++ b/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultModelXmlFactory.java @@ -25,6 +25,7 @@ import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; +import java.util.function.Function; import org.apache.maven.api.annotations.Nonnull; import org.apache.maven.api.di.Named; @@ -89,17 +90,22 @@ public void write(XmlWriterRequest request) throws XmlWriterException { Path path = request.getPath(); OutputStream outputStream = request.getOutputStream(); Writer writer = request.getWriter(); + Function inputLocationFormatter = request.getInputLocationFormatter(); if (writer == null && outputStream == null && path == null) { throw new IllegalArgumentException("writer, outputStream or path must be non null"); } try { + MavenStaxWriter w = new MavenStaxWriter(); + if (inputLocationFormatter != null) { + w.setStringFormatter((Function) inputLocationFormatter); + } if (writer != null) { - new MavenStaxWriter().write(writer, content); + w.write(writer, content); } else if (outputStream != null) { - new MavenStaxWriter().write(outputStream, content); + w.write(outputStream, content); } else { try (OutputStream os = Files.newOutputStream(path)) { - new MavenStaxWriter().write(outputStream, content); + w.write(outputStream, content); } } } catch (Exception e) { diff --git a/maven-model/src/main/java/org/apache/maven/model/io/xpp3/MavenXpp3Writer.java b/maven-model/src/main/java/org/apache/maven/model/io/xpp3/MavenXpp3Writer.java index 7c241e60e7..66328256d9 100644 --- a/maven-model/src/main/java/org/apache/maven/model/io/xpp3/MavenXpp3Writer.java +++ b/maven-model/src/main/java/org/apache/maven/model/io/xpp3/MavenXpp3Writer.java @@ -67,14 +67,7 @@ public void setFileComment(String fileComment) { */ public void setStringFormatter(InputLocation.StringFormatter stringFormatter) { delegate.setStringFormatter( - stringFormatter != null - ? new org.apache.maven.api.model.InputLocation.StringFormatter() { - @Override - public String toString(org.apache.maven.api.model.InputLocation location) { - return stringFormatter.toString(new InputLocation(location)); - } - } - : null); + stringFormatter != null ? location -> stringFormatter.toString(new InputLocation(location)) : null); } // -- void setStringFormatter( InputLocation.StringFormatter ) /** diff --git a/src/mdo/writer-stax.vm b/src/mdo/writer-stax.vm index dc30f61446..82e7c51f26 100644 --- a/src/mdo/writer-stax.vm +++ b/src/mdo/writer-stax.vm @@ -57,6 +57,7 @@ import java.util.Map; import java.util.Objects; import java.util.Properties; import java.util.Set; +import java.util.function.Function; import javax.xml.stream.XMLOutputFactory; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; @@ -114,7 +115,7 @@ public class ${className} { /** * Field stringFormatter. */ - protected InputLocation.StringFormatter stringFormatter; + protected Function stringFormatter; #end //-----------/ @@ -161,9 +162,9 @@ public class ${className} { * * @param stringFormatter */ - public void setStringFormatter(InputLocation.StringFormatter stringFormatter) { + public void setStringFormatter(Function stringFormatter) { this.stringFormatter = stringFormatter; - } //-- void setStringFormatter(InputLocation.StringFormatter) + } //-- void setStringFormatter(Function) #end /** @@ -432,7 +433,7 @@ public class ${className} { */ protected String toString(InputLocation location) { if (stringFormatter != null) { - return stringFormatter.toString(location); + return stringFormatter.apply(location); } if (location.getSource() != null) { return ' ' + location.getSource().toString() + ':' + location.getLineNumber() + ' ';