From 681c7dd866e0a172ced32125471bec2c20a13f3e Mon Sep 17 00:00:00 2001 From: Sylwester Lachiewicz Date: Thu, 18 May 2023 17:51:05 +0200 Subject: [PATCH 1/2] Bump parent-pom to 74 --- pom.xml | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/pom.xml b/pom.xml index c103793..5b5f671 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,7 @@ org.codehaus.mojo mojo-parent - 70 + 74 @@ -68,7 +68,7 @@ - ${mavenVersion} + ${maven.version} @@ -79,8 +79,7 @@ - 3.5.4 - 5.9.1 + 3.5.4 2022-09-30T06:33:55Z @@ -98,13 +97,13 @@ org.apache.maven maven-plugin-api - ${mavenVersion} + ${maven.version} provided org.apache.maven maven-core - ${mavenVersion} + ${maven.version} provided @@ -134,26 +133,17 @@ org.junit.jupiter junit-jupiter-engine - ${junit.version} + ${junit5.version} test org.junit.vintage junit-vintage-engine - ${junit.version} + ${junit5.version} test - - - - org.apache.maven.plugins - maven-checkstyle-plugin - - - - run-its From d11e1b9143603b89a4a6144b6061166aac69b9df Mon Sep 17 00:00:00 2001 From: Sylwester Lachiewicz Date: Thu, 18 May 2023 17:52:58 +0200 Subject: [PATCH 2/2] Apply formatting --- pom.xml | 10 +- .../org/codehaus/mojo/tidy/CheckMojo.java | 17 +- .../java/org/codehaus/mojo/tidy/PomMojo.java | 27 +- .../java/org/codehaus/mojo/tidy/TidyMojo.java | 61 +-- .../mojo/tidy/task/EnsureOrderAndIndent.java | 400 ++++++++---------- .../task/EnsureSingleLineProjectStartTag.java | 45 +- .../mojo/tidy/task/EnsureTrailingNewLine.java | 8 +- .../mojo/tidy/task/EnsureXmlHeader.java | 15 +- .../org/codehaus/mojo/tidy/task/Format.java | 9 +- .../mojo/tidy/task/FormatIdentifier.java | 18 +- .../org/codehaus/mojo/tidy/task/PomTidy.java | 23 +- .../org/codehaus/mojo/tidy/task/TidyTask.java | 6 +- .../mojo/tidy/task/XMLEventReaderFactory.java | 19 +- .../mojo/tidy/task/PomTidyFixesTest.java | 36 +- .../codehaus/mojo/tidy/task/PomTidyTest.java | 56 +-- 15 files changed, 318 insertions(+), 432 deletions(-) diff --git a/pom.xml b/pom.xml index 5b5f671..adc1949 100644 --- a/pom.xml +++ b/pom.xml @@ -1,5 +1,4 @@ - - 4.0.0 @@ -34,10 +32,8 @@ maven-plugin Tidy Maven Plugin - - Tidy Plugin for Maven. The Tidy plugin provides goals for tidying up - your source code. - + Tidy Plugin for Maven. The Tidy plugin provides goals for tidying up + your source code. https://www.mojohaus.org/tidy-maven-plugin/ 2011 @@ -74,8 +70,8 @@ scm:git:https://github.com/mojohaus/tidy-maven-plugin.git scm:git:ssh://git@github.com/mojohaus/tidy-maven-plugin.git - https://github.com/mojohaus/tidy-maven-plugin/tree/master HEAD + https://github.com/mojohaus/tidy-maven-plugin/tree/master diff --git a/src/main/java/org/codehaus/mojo/tidy/CheckMojo.java b/src/main/java/org/codehaus/mojo/tidy/CheckMojo.java index 8a17540..e6040b1 100644 --- a/src/main/java/org/codehaus/mojo/tidy/CheckMojo.java +++ b/src/main/java/org/codehaus/mojo/tidy/CheckMojo.java @@ -28,19 +28,14 @@ * Checks that the pom.xml is tidy. Fails the build if mvn tidy:pom would * create a different pom.xml than the current one. */ -@Mojo( name = "check", defaultPhase = LifecyclePhase.VERIFY, threadSafe = true ) -public class CheckMojo - extends TidyMojo -{ +@Mojo(name = "check", defaultPhase = LifecyclePhase.VERIFY, threadSafe = true) +public class CheckMojo extends TidyMojo { @Override - protected void executeForPom( String pom ) - throws MojoExecutionException, MojoFailureException - { - String tidyPom = tidy( pom ); - if ( !pom.equals( tidyPom ) ) - { + protected void executeForPom(String pom) throws MojoExecutionException, MojoFailureException { + String tidyPom = tidy(pom); + if (!pom.equals(tidyPom)) { throw new MojoFailureException( - "The POM violates the code style. Please format it by running `mvn tidy:pom`." ); + "The POM violates the code style. Please format it by running `mvn tidy:pom`."); } } } diff --git a/src/main/java/org/codehaus/mojo/tidy/PomMojo.java b/src/main/java/org/codehaus/mojo/tidy/PomMojo.java index 29a6c61..1ee4dba 100644 --- a/src/main/java/org/codehaus/mojo/tidy/PomMojo.java +++ b/src/main/java/org/codehaus/mojo/tidy/PomMojo.java @@ -19,33 +19,26 @@ * under the License. */ +import java.io.IOException; + import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.plugins.annotations.Mojo; -import java.io.IOException; - import static org.codehaus.plexus.util.FileUtils.fileWrite; /** * Tidy up the pom.xml into the canonical order. */ -@Mojo( name = "pom" ) -public class PomMojo - extends TidyMojo -{ +@Mojo(name = "pom") +public class PomMojo extends TidyMojo { @Override - protected void executeForPom( String pom ) - throws MojoExecutionException, MojoFailureException - { - try - { - String tidyPom = tidy( pom ); - fileWrite( getPomFile(), tidyPom ); - } - catch ( IOException e ) - { - throw new MojoExecutionException( "Failed to write the tidy POM.", e ); + protected void executeForPom(String pom) throws MojoExecutionException, MojoFailureException { + try { + String tidyPom = tidy(pom); + fileWrite(getPomFile(), tidyPom); + } catch (IOException e) { + throw new MojoExecutionException("Failed to write the tidy POM.", e); } } } diff --git a/src/main/java/org/codehaus/mojo/tidy/TidyMojo.java b/src/main/java/org/codehaus/mojo/tidy/TidyMojo.java index 9a18462..c0c2af2 100644 --- a/src/main/java/org/codehaus/mojo/tidy/TidyMojo.java +++ b/src/main/java/org/codehaus/mojo/tidy/TidyMojo.java @@ -19,13 +19,11 @@ * under the License. */ -import static org.codehaus.plexus.util.FileUtils.fileRead; +import javax.xml.stream.XMLStreamException; import java.io.File; import java.io.IOException; -import javax.xml.stream.XMLStreamException; - import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; @@ -33,25 +31,25 @@ import org.apache.maven.project.MavenProject; import org.codehaus.mojo.tidy.task.PomTidy; +import static org.codehaus.plexus.util.FileUtils.fileRead; + /** * An abstract base class for Mojos of the Tidy plugin. Handles common * configuration issues and provides the POM as String. */ -public abstract class TidyMojo - extends AbstractMojo -{ +public abstract class TidyMojo extends AbstractMojo { private static final PomTidy POM_TIDY = new PomTidy(); /** * The Maven Project. */ - @Parameter( defaultValue = "${project}", required = true, readonly = true ) + @Parameter(defaultValue = "${project}", required = true, readonly = true) protected MavenProject project; /** * Set this to 'true' to skip execution. */ - @Parameter( property = "tidy.skip", defaultValue = "false" ) + @Parameter(property = "tidy.skip", defaultValue = "false") protected boolean skip; /** @@ -63,59 +61,44 @@ public abstract class TidyMojo * @throws MojoFailureException if an expected problem (such as a compilation failure) occurs. * Throwing this exception causes a "BUILD FAILURE" message to be displayed. */ - protected abstract void executeForPom( String pom ) - throws MojoExecutionException, MojoFailureException; + protected abstract void executeForPom(String pom) throws MojoExecutionException, MojoFailureException; @Override - public void execute() - throws MojoExecutionException, MojoFailureException - { - if ( skip ) - { - getLog().info( "Tidy is skipped." ); + public void execute() throws MojoExecutionException, MojoFailureException { + if (skip) { + getLog().info("Tidy is skipped."); return; } String pom = getProjectPom(); - executeForPom( pom ); + executeForPom(pom); } /** * Returns the project's POM. */ - private String getProjectPom() - throws MojoExecutionException - { - try - { - return fileRead( getPomFile() ); - } - catch ( IOException e ) - { - throw new MojoExecutionException( "Failed to read the POM.", e ); + private String getProjectPom() throws MojoExecutionException { + try { + return fileRead(getPomFile()); + } catch (IOException e) { + throw new MojoExecutionException("Failed to read the POM.", e); } } /** * Returns the file of the POM. */ - protected File getPomFile() - { + protected File getPomFile() { return project.getFile(); } /** * Tidy the given POM. */ - protected String tidy( String pom ) - throws MojoExecutionException - { - try - { - return POM_TIDY.tidy( pom ); - } - catch ( XMLStreamException e ) - { - throw new MojoExecutionException( e.getMessage(), e ); + protected String tidy(String pom) throws MojoExecutionException { + try { + return POM_TIDY.tidy(pom); + } catch (XMLStreamException e) { + throw new MojoExecutionException(e.getMessage(), e); } } } diff --git a/src/main/java/org/codehaus/mojo/tidy/task/EnsureOrderAndIndent.java b/src/main/java/org/codehaus/mojo/tidy/task/EnsureOrderAndIndent.java index f5acc41..2640971 100644 --- a/src/main/java/org/codehaus/mojo/tidy/task/EnsureOrderAndIndent.java +++ b/src/main/java/org/codehaus/mojo/tidy/task/EnsureOrderAndIndent.java @@ -36,362 +36,320 @@ import static org.codehaus.plexus.util.StringUtils.isWhitespace; import static org.codehaus.plexus.util.StringUtils.repeat; -class EnsureOrderAndIndent - implements TidyTask -{ +class EnsureOrderAndIndent implements TidyTask { private static final List SECTION_SORTERS = asList( - new SectionSorter( "/project", new NodeGroup( "modelVersion" ), new NodeGroup( "parent" ), - new NodeGroup( "groupId", "artifactId", "version", "packaging" ), - new NodeGroup( "name", "description", "url", "inceptionYear", "organization", "licenses" ), - new NodeGroup( "developers", "contributors" ), new NodeGroup( "mailingLists" ), - new NodeGroup( "prerequisites" ), new NodeGroup( "modules" ), - new NodeGroup( "scm", "issueManagement", "ciManagement", "distributionManagement" ), - new NodeGroup( "properties" ), new NodeGroup( "dependencyManagement", "dependencies" ), - new NodeGroup( "repositories", "pluginRepositories" ), new NodeGroup( "build" ), - new NodeGroup( "reporting" ), new NodeGroup( "profiles" ) ), - new SectionSorter( "/project/build", new NodeGroup( "defaultGoal", "sourceDirectory", "scriptSourceDirectory", - "testSourceDirectory", "directory", "outputDirectory", - "testOutputDirectory", "finalName", "filters", "resources", - "testResources", "pluginManagement", "plugins", - "extensions" ) ), - new SectionSorter( "dependency", new NodeGroup( "groupId", "artifactId", "version", "type", "classifier", - "scope", "systemPath", "exclusions", "optional" ) ), - new SectionSorter( "dependency/exclusions/exclusion", new NodeGroup( "groupId", "artifactId" ) ), - new SectionSorter( "build/extensions/extension", new NodeGroup( "groupId", "artifactId", "version" ) ), - new SectionSorter( "/project/parent", new NodeGroup( "groupId", "artifactId", "version", "relativePath" ) ), - new SectionSorter( "plugin", new NodeGroup( "groupId", "artifactId", "version" ) ), - new SectionSorter( "/project/distributionManagement/relocation", - new NodeGroup( "groupId", "artifactId", "version" ) ) ); + new SectionSorter( + "/project", + new NodeGroup("modelVersion"), + new NodeGroup("parent"), + new NodeGroup("groupId", "artifactId", "version", "packaging"), + new NodeGroup("name", "description", "url", "inceptionYear", "organization", "licenses"), + new NodeGroup("developers", "contributors"), + new NodeGroup("mailingLists"), + new NodeGroup("prerequisites"), + new NodeGroup("modules"), + new NodeGroup("scm", "issueManagement", "ciManagement", "distributionManagement"), + new NodeGroup("properties"), + new NodeGroup("dependencyManagement", "dependencies"), + new NodeGroup("repositories", "pluginRepositories"), + new NodeGroup("build"), + new NodeGroup("reporting"), + new NodeGroup("profiles")), + new SectionSorter( + "/project/build", + new NodeGroup( + "defaultGoal", + "sourceDirectory", + "scriptSourceDirectory", + "testSourceDirectory", + "directory", + "outputDirectory", + "testOutputDirectory", + "finalName", + "filters", + "resources", + "testResources", + "pluginManagement", + "plugins", + "extensions")), + new SectionSorter( + "dependency", + new NodeGroup( + "groupId", + "artifactId", + "version", + "type", + "classifier", + "scope", + "systemPath", + "exclusions", + "optional")), + new SectionSorter("dependency/exclusions/exclusion", new NodeGroup("groupId", "artifactId")), + new SectionSorter("build/extensions/extension", new NodeGroup("groupId", "artifactId", "version")), + new SectionSorter("/project/parent", new NodeGroup("groupId", "artifactId", "version", "relativePath")), + new SectionSorter("plugin", new NodeGroup("groupId", "artifactId", "version")), + new SectionSorter( + "/project/distributionManagement/relocation", new NodeGroup("groupId", "artifactId", "version"))); @Override - public String tidyPom( String pom, Format format ) - throws XMLStreamException - { - for ( SectionSorter sorter : SECTION_SORTERS ) - { - pom = sorter.sortSections( pom, format ); + public String tidyPom(String pom, Format format) throws XMLStreamException { + for (SectionSorter sorter : SECTION_SORTERS) { + pom = sorter.sortSections(pom, format); } return pom; } - private static class SectionSorter - { + private static class SectionSorter { final String scope; final NodeGroup[] groups; final List sequence; - SectionSorter( String scope, NodeGroup... groups ) - { + SectionSorter(String scope, NodeGroup... groups) { this.scope = scope; this.groups = groups; - this.sequence = calculateSequence( groups ); + this.sequence = calculateSequence(groups); } - List calculateSequence( NodeGroup[] groups ) - { + List calculateSequence(NodeGroup[] groups) { List sequence = new ArrayList(); - for ( NodeGroup group : groups ) - { - sequence.addAll( group.nodes ); + for (NodeGroup group : groups) { + sequence.addAll(group.nodes); } return sequence; } - String sortSections( String pom, Format format ) - throws XMLStreamException - { - XMLEventReader reader = createEventReaderForPom( pom ); + String sortSections(String pom, Format format) throws XMLStreamException { + XMLEventReader reader = createEventReaderForPom(pom); String path = ""; int posFirstUnformatted = 0; StringBuilder tidyPom = new StringBuilder(); - while ( reader.hasNext() ) - { + while (reader.hasNext()) { XMLEvent event = reader.nextEvent(); - if ( event.isStartElement() ) - { + if (event.isStartElement()) { path += "/" + event.asStartElement().getName().getLocalPart(); - if ( isStartElementOfScope( path ) ) - { - int pos = getPosOfNextEvent( reader ); - tidyPom.append( pom.substring( posFirstUnformatted, pos ) ); - tidyPom.append( formatSection( reader, pom, format ) ); - posFirstUnformatted = getPosOfNextEvent( reader ); + if (isStartElementOfScope(path)) { + int pos = getPosOfNextEvent(reader); + tidyPom.append(pom.substring(posFirstUnformatted, pos)); + tidyPom.append(formatSection(reader, pom, format)); + posFirstUnformatted = getPosOfNextEvent(reader); } - } - else if ( event.isEndElement() ) - { - path = substringBeforeLast( path, "/" ); + } else if (event.isEndElement()) { + path = substringBeforeLast(path, "/"); } } - tidyPom.append( pom.substring( posFirstUnformatted ) ); + tidyPom.append(pom.substring(posFirstUnformatted)); return tidyPom.toString(); } - private boolean isStartElementOfScope( String path ) - { - if ( scope.startsWith( "/" ) ) - { - return path.equals( scope ); - } - else - { - return path.endsWith( "/" + scope ); + private boolean isStartElementOfScope(String path) { + if (scope.startsWith("/")) { + return path.equals(scope); + } else { + return path.endsWith("/" + scope); } } - private String formatSection( XMLEventReader reader, String pom, Format format ) - throws XMLStreamException - { - int startOfSection = getPosOfNextEvent( reader ); + private String formatSection(XMLEventReader reader, String pom, Format format) throws XMLStreamException { + int startOfSection = getPosOfNextEvent(reader); int[] starts = new int[sequence.size()]; int[] ends = new int[sequence.size()]; - XMLEvent endScope = calculateStartsAndEnds( reader, starts, ends ); - return formatSection( reader, pom, format, startOfSection, starts, ends, endScope ); + XMLEvent endScope = calculateStartsAndEnds(reader, starts, ends); + return formatSection(reader, pom, format, startOfSection, starts, ends, endScope); } - private XMLEvent calculateStartsAndEnds( XMLEventReader reader, int[] starts, int[] ends ) - throws XMLStreamException - { - fill( starts, Integer.MAX_VALUE ); - fill( ends, -1 ); + private XMLEvent calculateStartsAndEnds(XMLEventReader reader, int[] starts, int[] ends) + throws XMLStreamException { + fill(starts, Integer.MAX_VALUE); + fill(ends, -1); int level = 0; - while ( reader.hasNext() ) - { + while (reader.hasNext()) { XMLEvent event = reader.nextEvent(); - if ( event.isStartElement() ) - { + if (event.isStartElement()) { ++level; - if ( level == 1 ) - { + if (level == 1) { QName name = event.asStartElement().getName(); - if ( hasToBeSorted( name ) ) - { - int i = getSequenceIndex( name ); + if (hasToBeSorted(name)) { + int i = getSequenceIndex(name); starts[i] = event.getLocation().getCharacterOffset(); } } - } - else if ( event.isEndElement() ) - { - if ( level == 0 ) - { + } else if (event.isEndElement()) { + if (level == 0) { return event; - } - else if ( level == 1 ) - { + } else if (level == 1) { QName name = event.asEndElement().getName(); - if ( hasToBeSorted( name ) ) - { - int i = getSequenceIndex( name ); - ends[i] = getPosOfNextEvent( reader ); + if (hasToBeSorted(name)) { + int i = getSequenceIndex(name); + ends[i] = getPosOfNextEvent(reader); } } --level; } } - throw new RuntimeException( "End element missing." ); + throw new RuntimeException("End element missing."); } - private boolean hasToBeSorted( QName nodeName ) - { + private boolean hasToBeSorted(QName nodeName) { String name = nodeName.getLocalPart(); - return sequence.contains( name ); + return sequence.contains(name); } - private int getSequenceIndex( QName nodeName ) - { + private int getSequenceIndex(QName nodeName) { String name = nodeName.getLocalPart(); - if ( sequence.contains( name ) ) - { - return sequence.indexOf( name ); - } - else - { + if (sequence.contains(name)) { + return sequence.indexOf(name); + } else { throw new IllegalArgumentException( - "The path '" + nodeName + " does not specify an element of the sequence " + sequence - + "." ); + "The path '" + nodeName + " does not specify an element of the sequence " + sequence + "."); } } - private String formatSection( XMLEventReader reader, String pom, Format format, int startOfSection, - int[] starts, int[] ends, XMLEvent endScope ) - throws XMLStreamException - { - String outdent = calculateOutdent( pom, endScope ); - String indent = calculateIndent( pom, starts ); - int first = calculateFirst( starts, pom ); + private String formatSection( + XMLEventReader reader, + String pom, + Format format, + int startOfSection, + int[] starts, + int[] ends, + XMLEvent endScope) + throws XMLStreamException { + String outdent = calculateOutdent(pom, endScope); + String indent = calculateIndent(pom, starts); + int first = calculateFirst(starts, pom); StringBuilder output = new StringBuilder(); - output.append( pom.substring( startOfSection, first ).trim() ); + output.append(pom.substring(startOfSection, first).trim()); int i = 0; boolean firstGroupStarted = false; - for ( NodeGroup group : groups ) - { + for (NodeGroup group : groups) { boolean groupStarted = false; - for ( String node : group.nodes ) - { - if ( starts[i] != Integer.MAX_VALUE ) - { - if ( firstGroupStarted && !groupStarted ) - { - output.append( format.getLineSeparator() ); + for (String node : group.nodes) { + if (starts[i] != Integer.MAX_VALUE) { + if (firstGroupStarted && !groupStarted) { + output.append(format.getLineSeparator()); } - addTextIfNotEmpty( output, indent, getPrecedingText( pom, starts[i], ends ), format ); - addTextIfNotEmpty( output, indent, pom.substring( starts[i], ends[i] ), format ); + addTextIfNotEmpty(output, indent, getPrecedingText(pom, starts[i], ends), format); + addTextIfNotEmpty(output, indent, pom.substring(starts[i], ends[i]), format); firstGroupStarted = true; groupStarted = true; } ++i; } } - int last = calculateLast( ends ); - int afterSection = getPosOfNextEvent( reader ); + int last = calculateLast(ends); + int afterSection = getPosOfNextEvent(reader); int offsetEndElement = endScope.getLocation().getCharacterOffset(); - addTextIfNotEmpty( output, indent, pom.substring( last, offsetEndElement ), format ); - addTextIfNotEmpty( output, outdent, pom.substring( offsetEndElement, afterSection ), format ); + addTextIfNotEmpty(output, indent, pom.substring(last, offsetEndElement), format); + addTextIfNotEmpty(output, outdent, pom.substring(offsetEndElement, afterSection), format); return output.toString(); } - private String calculateOutdent( String pom, XMLEvent endScope ) - { - String before = pom.substring( 0, endScope.getLocation().getCharacterOffset() ); - return substringAfterLast( before, "\n" ); + private String calculateOutdent(String pom, XMLEvent endScope) { + String before = pom.substring(0, endScope.getLocation().getCharacterOffset()); + return substringAfterLast(before, "\n"); } - private int calculateFirst( int[] starts, String pom ) - { + private int calculateFirst(int[] starts, String pom) { int first = pom.length(); - for ( int start : starts ) - { - first = min( first, start ); + for (int start : starts) { + first = min(first, start); } return first; } - private int calculateLast( int[] ends ) - { + private int calculateLast(int[] ends) { int last = 0; - for ( int end : ends ) - { - last = max( last, end ); + for (int end : ends) { + last = max(last, end); } return last; } - private String calculateIndent( String input, int[] starts ) - { + private String calculateIndent(String input, int[] starts) { int numNodesWithSpaceIndent = 0; int numNodesWithTabIndent = 0; int spaceIndentTotal = 0; int tabIndentTotal = 0; - for ( int start : starts ) - { - if ( start != Integer.MAX_VALUE ) - { - String indent = calculateIndent( input, start ); - if ( !indent.isEmpty() ) - { - int numTabs = countMatches( indent, "\t" ); - if ( numTabs == indent.length() ) - { + for (int start : starts) { + if (start != Integer.MAX_VALUE) { + String indent = calculateIndent(input, start); + if (!indent.isEmpty()) { + int numTabs = countMatches(indent, "\t"); + if (numTabs == indent.length()) { ++numNodesWithTabIndent; tabIndentTotal += numTabs; - } - else if ( !indent.contains( "\t" ) ) - { + } else if (!indent.contains("\t")) { ++numNodesWithSpaceIndent; spaceIndentTotal += indent.length(); } } } } - if ( numNodesWithSpaceIndent == 0 && numNodesWithTabIndent == 0 ) - { + if (numNodesWithSpaceIndent == 0 && numNodesWithTabIndent == 0) { return " "; - } - else if ( numNodesWithSpaceIndent > numNodesWithTabIndent ) - { + } else if (numNodesWithSpaceIndent > numNodesWithTabIndent) { int averageIndent = spaceIndentTotal / numNodesWithSpaceIndent; - return repeat( " ", averageIndent ); - } - else - { + return repeat(" ", averageIndent); + } else { int averageIndent = tabIndentTotal / numNodesWithTabIndent; - return repeat( "\t", averageIndent ); + return repeat("\t", averageIndent); } } - private String calculateIndent( String input, int startOfTag ) - { - for ( int i = startOfTag; i > 1; --i ) - { - String character = input.substring( i - 1, i ); - if ( !isWhitespace( character ) || "\n".equals( character ) || "\r".equals( character ) ) - { - return input.substring( i, startOfTag ); + private String calculateIndent(String input, int startOfTag) { + for (int i = startOfTag; i > 1; --i) { + String character = input.substring(i - 1, i); + if (!isWhitespace(character) || "\n".equals(character) || "\r".equals(character)) { + return input.substring(i, startOfTag); } } return input; } - private String getPrecedingText( String pom, int start, int[] ends ) - { + private String getPrecedingText(String pom, int start, int[] ends) { int startPrecedingText = -1; - for ( int end : ends ) - { - if ( end < start ) - { - startPrecedingText = max( startPrecedingText, end ); + for (int end : ends) { + if (end < start) { + startPrecedingText = max(startPrecedingText, end); } } - if ( startPrecedingText != -1 ) - { - return pom.substring( startPrecedingText, start ); - } - else - { + if (startPrecedingText != -1) { + return pom.substring(startPrecedingText, start); + } else { return ""; } } - private void addTextIfNotEmpty( StringBuilder output, String indent, String text, Format format ) - { + private void addTextIfNotEmpty(StringBuilder output, String indent, String text, Format format) { String trimmedText = text.trim(); - if ( trimmedText.length() != 0 ) - { - output.append( format.getLineSeparator() ); - output.append( indent ); - output.append( trimmedText ); + if (trimmedText.length() != 0) { + output.append(format.getLineSeparator()); + output.append(indent); + output.append(trimmedText); } } - private int getPosOfNextEvent( XMLEventReader reader ) - throws XMLStreamException - { + private int getPosOfNextEvent(XMLEventReader reader) throws XMLStreamException { return reader.peek().getLocation().getCharacterOffset(); } - private String substringBeforeLast( String str, String separator ) - { - int endIndex = str.lastIndexOf( separator ); - return str.substring( 0, endIndex ); + private String substringBeforeLast(String str, String separator) { + int endIndex = str.lastIndexOf(separator); + return str.substring(0, endIndex); } - private String substringAfterLast( String str, String separator ) - { - int beginIndex = str.lastIndexOf( separator ) + 1; - return str.substring( beginIndex ); + private String substringAfterLast(String str, String separator) { + int beginIndex = str.lastIndexOf(separator) + 1; + return str.substring(beginIndex); } } - private static class NodeGroup - { + private static class NodeGroup { final List nodes; - NodeGroup( String... nodes ) - { - this.nodes = asList( nodes ); + NodeGroup(String... nodes) { + this.nodes = asList(nodes); } } } diff --git a/src/main/java/org/codehaus/mojo/tidy/task/EnsureSingleLineProjectStartTag.java b/src/main/java/org/codehaus/mojo/tidy/task/EnsureSingleLineProjectStartTag.java index 71b5077..511909d 100644 --- a/src/main/java/org/codehaus/mojo/tidy/task/EnsureSingleLineProjectStartTag.java +++ b/src/main/java/org/codehaus/mojo/tidy/task/EnsureSingleLineProjectStartTag.java @@ -25,47 +25,36 @@ import static org.codehaus.mojo.tidy.task.XMLEventReaderFactory.createEventReaderForPom; -class EnsureSingleLineProjectStartTag - implements TidyTask -{ +class EnsureSingleLineProjectStartTag implements TidyTask { private static final String PROJECT_START_TAG = ""; + + "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " + + "xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">"; @Override - public String tidyPom( String pom, Format format ) - throws XMLStreamException - { - XMLEventReader eventReader = createEventReaderForPom( pom ); - try - { - return tidyProjectStartTag( pom, eventReader ); - } - finally - { + public String tidyPom(String pom, Format format) throws XMLStreamException { + XMLEventReader eventReader = createEventReaderForPom(pom); + try { + return tidyProjectStartTag(pom, eventReader); + } finally { eventReader.close(); } } - private String tidyProjectStartTag( String pom, XMLEventReader eventReader ) - throws XMLStreamException - { - while ( eventReader.hasNext() ) - { + private String tidyProjectStartTag(String pom, XMLEventReader eventReader) throws XMLStreamException { + while (eventReader.hasNext()) { XMLEvent event = eventReader.nextEvent(); - if ( event.isStartElement() && event.asStartElement().getName().getLocalPart().equals( "project" ) ) - { - return replaceProjectStartTag( pom, eventReader, event ); + if (event.isStartElement() + && event.asStartElement().getName().getLocalPart().equals("project")) { + return replaceProjectStartTag(pom, eventReader, event); } } - throw new IllegalArgumentException( "The POM has no project node." ); + throw new IllegalArgumentException("The POM has no project node."); } - private String replaceProjectStartTag( String pom, XMLEventReader eventReader, XMLEvent event ) - throws XMLStreamException - { + private String replaceProjectStartTag(String pom, XMLEventReader eventReader, XMLEvent event) + throws XMLStreamException { int start = event.getLocation().getCharacterOffset(); int nextChar = eventReader.nextEvent().getLocation().getCharacterOffset(); - return pom.substring( 0, start ) + PROJECT_START_TAG + pom.substring( nextChar ); + return pom.substring(0, start) + PROJECT_START_TAG + pom.substring(nextChar); } } diff --git a/src/main/java/org/codehaus/mojo/tidy/task/EnsureTrailingNewLine.java b/src/main/java/org/codehaus/mojo/tidy/task/EnsureTrailingNewLine.java index 01c4d90..40c3c6d 100644 --- a/src/main/java/org/codehaus/mojo/tidy/task/EnsureTrailingNewLine.java +++ b/src/main/java/org/codehaus/mojo/tidy/task/EnsureTrailingNewLine.java @@ -21,13 +21,9 @@ import javax.xml.stream.XMLStreamException; -class EnsureTrailingNewLine - implements TidyTask -{ +class EnsureTrailingNewLine implements TidyTask { @Override - public String tidyPom( String pom, Format format ) - throws XMLStreamException - { + public String tidyPom(String pom, Format format) throws XMLStreamException { return pom.trim() + format.getLineSeparator(); } } diff --git a/src/main/java/org/codehaus/mojo/tidy/task/EnsureXmlHeader.java b/src/main/java/org/codehaus/mojo/tidy/task/EnsureXmlHeader.java index f4ae718..c93b43b 100644 --- a/src/main/java/org/codehaus/mojo/tidy/task/EnsureXmlHeader.java +++ b/src/main/java/org/codehaus/mojo/tidy/task/EnsureXmlHeader.java @@ -21,19 +21,12 @@ import javax.xml.stream.XMLStreamException; -class EnsureXmlHeader - implements TidyTask -{ +class EnsureXmlHeader implements TidyTask { @Override - public String tidyPom( String pom, Format format ) - throws XMLStreamException - { - if ( pom.startsWith( "" + format.getLineSeparator() + pom; } } diff --git a/src/main/java/org/codehaus/mojo/tidy/task/Format.java b/src/main/java/org/codehaus/mojo/tidy/task/Format.java index be69f2d..b8d4627 100644 --- a/src/main/java/org/codehaus/mojo/tidy/task/Format.java +++ b/src/main/java/org/codehaus/mojo/tidy/task/Format.java @@ -22,8 +22,7 @@ /** * Specification of the output format used by the Tidy plugin. */ -class Format -{ +class Format { private final String lineSeparator; /** @@ -31,8 +30,7 @@ class Format * * @param lineSeparator the line separator. */ - Format( String lineSeparator ) - { + Format(String lineSeparator) { this.lineSeparator = lineSeparator; } @@ -41,8 +39,7 @@ class Format * * @return the characters that should be used as line separator. */ - String getLineSeparator() - { + String getLineSeparator() { return lineSeparator; } } diff --git a/src/main/java/org/codehaus/mojo/tidy/task/FormatIdentifier.java b/src/main/java/org/codehaus/mojo/tidy/task/FormatIdentifier.java index 1de21b4..83a9216 100644 --- a/src/main/java/org/codehaus/mojo/tidy/task/FormatIdentifier.java +++ b/src/main/java/org/codehaus/mojo/tidy/task/FormatIdentifier.java @@ -27,9 +27,8 @@ * Identifies the output format for a given POM. It tries to find a * format that is similar to the current format. */ -class FormatIdentifier -{ - private static final List LINE_SEPARATORS = asList( "\r\n", "\n", "\r" ); +class FormatIdentifier { + private static final List LINE_SEPARATORS = asList("\r\n", "\n", "\r"); /** * Identifies the output format for the given POM. @@ -37,16 +36,13 @@ class FormatIdentifier * @param pom the POM. * @return the output format. */ - Format identifyFormat( String pom ) - { - for ( String separator : LINE_SEPARATORS ) - { - if ( pom.contains( separator ) ) - { - return new Format( separator ); + Format identifyFormat(String pom) { + for (String separator : LINE_SEPARATORS) { + if (pom.contains(separator)) { + return new Format(separator); } } - throw new IllegalArgumentException( "The pom.xml has no known line separator." ); + throw new IllegalArgumentException("The pom.xml has no known line separator."); } } diff --git a/src/main/java/org/codehaus/mojo/tidy/task/PomTidy.java b/src/main/java/org/codehaus/mojo/tidy/task/PomTidy.java index 951a261..1836d95 100644 --- a/src/main/java/org/codehaus/mojo/tidy/task/PomTidy.java +++ b/src/main/java/org/codehaus/mojo/tidy/task/PomTidy.java @@ -20,6 +20,7 @@ */ import javax.xml.stream.XMLStreamException; + import java.util.List; import static java.util.Arrays.asList; @@ -27,21 +28,19 @@ /** * Tidy up a POM into the canonical order. */ -public class PomTidy -{ +public class PomTidy { private static final FormatIdentifier FORMAT_IDENTIFIER = new FormatIdentifier(); - private static final List TIDY_TASKS = - asList( new EnsureXmlHeader(), new EnsureOrderAndIndent(), new EnsureSingleLineProjectStartTag(), - new EnsureTrailingNewLine() ); + private static final List TIDY_TASKS = asList( + new EnsureXmlHeader(), + new EnsureOrderAndIndent(), + new EnsureSingleLineProjectStartTag(), + new EnsureTrailingNewLine()); - public String tidy( String pom ) - throws XMLStreamException - { - Format format = FORMAT_IDENTIFIER.identifyFormat( pom ); - for ( TidyTask task : TIDY_TASKS ) - { - pom = task.tidyPom( pom, format ); + public String tidy(String pom) throws XMLStreamException { + Format format = FORMAT_IDENTIFIER.identifyFormat(pom); + for (TidyTask task : TIDY_TASKS) { + pom = task.tidyPom(pom, format); } return pom; } diff --git a/src/main/java/org/codehaus/mojo/tidy/task/TidyTask.java b/src/main/java/org/codehaus/mojo/tidy/task/TidyTask.java index 8e30637..e6b4fd9 100644 --- a/src/main/java/org/codehaus/mojo/tidy/task/TidyTask.java +++ b/src/main/java/org/codehaus/mojo/tidy/task/TidyTask.java @@ -24,8 +24,7 @@ /** * A single task that tidies a POM. */ -interface TidyTask -{ +interface TidyTask { /** * Tidies the POM. * @@ -34,6 +33,5 @@ interface TidyTask * @return the tidy POM. * @throws XMLStreamException */ - String tidyPom( String pom, Format format ) - throws XMLStreamException; + String tidyPom(String pom, Format format) throws XMLStreamException; } diff --git a/src/main/java/org/codehaus/mojo/tidy/task/XMLEventReaderFactory.java b/src/main/java/org/codehaus/mojo/tidy/task/XMLEventReaderFactory.java index 23fdf26..37d8110 100644 --- a/src/main/java/org/codehaus/mojo/tidy/task/XMLEventReaderFactory.java +++ b/src/main/java/org/codehaus/mojo/tidy/task/XMLEventReaderFactory.java @@ -19,27 +19,24 @@ * under the License. */ -import org.codehaus.stax2.XMLInputFactory2; - import javax.xml.stream.XMLEventReader; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamException; + import java.io.StringReader; -class XMLEventReaderFactory -{ +import org.codehaus.stax2.XMLInputFactory2; + +class XMLEventReaderFactory { private static final XMLInputFactory XML_INPUT_FACTORY = createInputFactory(); - static XMLEventReader createEventReaderForPom( String pom ) - throws XMLStreamException - { - return XML_INPUT_FACTORY.createXMLEventReader( new StringReader( pom ) ); + static XMLEventReader createEventReaderForPom(String pom) throws XMLStreamException { + return XML_INPUT_FACTORY.createXMLEventReader(new StringReader(pom)); } - private static XMLInputFactory createInputFactory() - { + private static XMLInputFactory createInputFactory() { XMLInputFactory inputFactory = XMLInputFactory2.newInstance(); - inputFactory.setProperty( XMLInputFactory2.P_PRESERVE_LOCATION, true ); + inputFactory.setProperty(XMLInputFactory2.P_PRESERVE_LOCATION, true); return inputFactory; } } diff --git a/src/test/java/org/codehaus/mojo/tidy/task/PomTidyFixesTest.java b/src/test/java/org/codehaus/mojo/tidy/task/PomTidyFixesTest.java index 3e43012..dcd9dab 100644 --- a/src/test/java/org/codehaus/mojo/tidy/task/PomTidyFixesTest.java +++ b/src/test/java/org/codehaus/mojo/tidy/task/PomTidyFixesTest.java @@ -19,9 +19,6 @@ * under the License. */ -import static java.util.Arrays.asList; -import static org.junit.jupiter.api.Assertions.assertEquals; - import org.codehaus.plexus.util.IOUtil; import org.junit.Test; import org.junit.runner.RunWith; @@ -29,32 +26,27 @@ import org.junit.runners.Parameterized.Parameter; import org.junit.runners.Parameterized.Parameters; -@RunWith( Parameterized.class ) -public class PomTidyFixesTest -{ +import static java.util.Arrays.asList; +import static org.junit.jupiter.api.Assertions.assertEquals; + +@RunWith(Parameterized.class) +public class PomTidyFixesTest { protected static final String PATH = "fixes/order-and-indent-start-element-of-scope/"; - @Parameters( name = "{0}" ) - public static Iterable tests() - { - return asList( - "property-ending-with-plugin.pom.xml", - "property-ending-with-dependency.pom.xml" - ); + @Parameters(name = "{0}") + public static Iterable tests() { + return asList("property-ending-with-plugin.pom.xml", "property-ending-with-dependency.pom.xml"); } - @SuppressWarnings( "checkstyle:VisibilityModifier" ) - @Parameter( 0 ) + @SuppressWarnings("checkstyle:VisibilityModifier") + @Parameter(0) public String name; @Test - public void shouldThrowNoError() - throws Exception - { - final String pom = IOUtil.toString( getClass().getResourceAsStream( PATH + name ) ); - String tidyPom = new PomTidy().tidy( pom ); - assertEquals( pom, tidyPom, "nothing to tidy here" ); + public void shouldThrowNoError() throws Exception { + final String pom = IOUtil.toString(getClass().getResourceAsStream(PATH + name)); + String tidyPom = new PomTidy().tidy(pom); + assertEquals(pom, tidyPom, "nothing to tidy here"); } - } diff --git a/src/test/java/org/codehaus/mojo/tidy/task/PomTidyTest.java b/src/test/java/org/codehaus/mojo/tidy/task/PomTidyTest.java index 78014e2..caac710 100644 --- a/src/test/java/org/codehaus/mojo/tidy/task/PomTidyTest.java +++ b/src/test/java/org/codehaus/mojo/tidy/task/PomTidyTest.java @@ -19,6 +19,9 @@ * under the License. */ +import java.io.IOException; +import java.io.InputStream; + import org.codehaus.plexus.util.IOUtil; import org.junit.Test; import org.junit.runner.RunWith; @@ -26,41 +29,42 @@ import org.junit.runners.Parameterized.Parameter; import org.junit.runners.Parameterized.Parameters; -import java.io.IOException; -import java.io.InputStream; - import static java.util.Arrays.asList; import static org.junit.Assert.assertEquals; -@RunWith( Parameterized.class ) -public class PomTidyTest -{ - @Parameters( name = "{0}" ) - public static Iterable tests() - { - return asList( "add-xml-declaration", "complete-pom", "do-not-mix-tab-and-spaces", "groupid-artifactid-version", - "plugin-config-with-maven-element-names", "pom-space-indent", "pom-tab-indent", - "pom-with-comments", "pom-with-crlf", "pom-with-line-without-indent", "pom-with-profiles", - "pom-with-reporting", "project-single-line" ); +@RunWith(Parameterized.class) +public class PomTidyTest { + @Parameters(name = "{0}") + public static Iterable tests() { + return asList( + "add-xml-declaration", + "complete-pom", + "do-not-mix-tab-and-spaces", + "groupid-artifactid-version", + "plugin-config-with-maven-element-names", + "pom-space-indent", + "pom-tab-indent", + "pom-with-comments", + "pom-with-crlf", + "pom-with-line-without-indent", + "pom-with-profiles", + "pom-with-reporting", + "project-single-line"); } - @SuppressWarnings( "checkstyle:VisibilityModifier" ) - @Parameter( 0 ) + @SuppressWarnings("checkstyle:VisibilityModifier") + @Parameter(0) public String name; @Test - public void generatesTidyPom() - throws Exception - { - String pom = readPom( "pom.xml" ); - String tidyPom = new PomTidy().tidy( pom ); - assertEquals( readPom( "pom-expected.xml" ), tidyPom ); + public void generatesTidyPom() throws Exception { + String pom = readPom("pom.xml"); + String tidyPom = new PomTidy().tidy(pom); + assertEquals(readPom("pom-expected.xml"), tidyPom); } - private String readPom( String filename ) - throws IOException - { - InputStream is = getClass().getResourceAsStream( name + "/" + filename ); - return IOUtil.toString( is ); + private String readPom(String filename) throws IOException { + InputStream is = getClass().getResourceAsStream(name + "/" + filename); + return IOUtil.toString(is); } }