diff --git a/plexus-compilers/plexus-compiler-eclipse/pom.xml b/plexus-compilers/plexus-compiler-eclipse/pom.xml index 3374608d..a0e6fe68 100644 --- a/plexus-compilers/plexus-compiler-eclipse/pom.xml +++ b/plexus-compilers/plexus-compiler-eclipse/pom.xml @@ -36,6 +36,11 @@ junit-jupiter-api test + + org.junit.jupiter + junit-jupiter-params + test + org.hamcrest hamcrest diff --git a/plexus-compilers/plexus-compiler-eclipse/src/main/java/org/codehaus/plexus/compiler/eclipse/EclipseJavaCompiler.java b/plexus-compilers/plexus-compiler-eclipse/src/main/java/org/codehaus/plexus/compiler/eclipse/EclipseJavaCompiler.java index 04673009..b4674197 100644 --- a/plexus-compilers/plexus-compiler-eclipse/src/main/java/org/codehaus/plexus/compiler/eclipse/EclipseJavaCompiler.java +++ b/plexus-compilers/plexus-compiler-eclipse/src/main/java/org/codehaus/plexus/compiler/eclipse/EclipseJavaCompiler.java @@ -262,6 +262,8 @@ public CompilerResult performCompile( CompilerConfiguration config ) return new CompilerResult( true, messageList ); } + allSources = resortSourcesToPutModuleInfoFirst( allSources ); + // Compile try { @@ -476,6 +478,29 @@ public void worked( int i, int i1 ) } } + static List resortSourcesToPutModuleInfoFirst( List allSources ) + { + ArrayList resorted = new ArrayList<>(); + + for ( String mi : allSources ) + { + if ( mi.endsWith( "module-info.java" ) ) + { + resorted.add( mi ); + } + } + + for ( String nmi : allSources ) + { + if ( !nmi.endsWith( "module-info.java") ) + { + resorted.add( nmi ); + } + } + + return resorted; + } + static boolean processCustomArguments( CompilerConfiguration config, List args ) { boolean result = false; diff --git a/plexus-compilers/plexus-compiler-eclipse/src/test/java/org/codehaus/plexus/compiler/eclipse/EclipseJavaCompilerTest.java b/plexus-compilers/plexus-compiler-eclipse/src/test/java/org/codehaus/plexus/compiler/eclipse/EclipseJavaCompilerTest.java new file mode 100644 index 00000000..095efe64 --- /dev/null +++ b/plexus-compilers/plexus-compiler-eclipse/src/test/java/org/codehaus/plexus/compiler/eclipse/EclipseJavaCompilerTest.java @@ -0,0 +1,60 @@ +package org.codehaus.plexus.compiler.eclipse; + +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +import java.util.List; +import java.util.stream.Stream; + +import static java.util.Arrays.asList; +import static org.junit.jupiter.api.Assertions.assertEquals; + +class EclipseJavaCompilerTest +{ + @ParameterizedTest + @MethodSource( "sources" ) + void testReorderedSources( List expected, List inputSources ) + { + List resorted = EclipseJavaCompiler.resortSourcesToPutModuleInfoFirst( inputSources ); + + assertEquals( expected, resorted ); + } + + static Stream sources() + { + List expectedOrder = asList( + "module-info.java", + "plexus/A.java", + "plexus/B.java", + "eclipse/A.java" + ); + + List moduleInfoAlreadyFirst = asList( + "module-info.java", + "plexus/A.java", + "plexus/B.java", + "eclipse/A.java" + ); + + List moduleInfoSomewhereInTheMiddle = asList( + "plexus/A.java", + "module-info.java", + "plexus/B.java", + "eclipse/A.java" + ); + + List moduleInfoAsLast = asList( + "plexus/A.java", + "plexus/B.java", + "eclipse/A.java", + "module-info.java" + ); + + return Stream.of( + Arguments.arguments( expectedOrder, moduleInfoAlreadyFirst ), + Arguments.arguments( expectedOrder, moduleInfoSomewhereInTheMiddle ), + Arguments.arguments( expectedOrder, moduleInfoAsLast ) + ); + } +}