Skip to content

Commit da5edd1

Browse files
committed
Ensure that EclipseJavaCompiler doesn't pass duplicate source files to ECJ
1 parent d09514d commit da5edd1

File tree

2 files changed

+18
-15
lines changed

2 files changed

+18
-15
lines changed

plexus-compilers/plexus-compiler-eclipse/src/main/java/org/codehaus/plexus/compiler/eclipse/EclipseJavaCompiler.java

+6-4
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@
3737
import java.nio.charset.IllegalCharsetNameException;
3838
import java.nio.charset.UnsupportedCharsetException;
3939
import java.util.ArrayList;
40+
import java.util.HashSet;
4041
import java.util.Iterator;
42+
import java.util.LinkedHashSet;
4143
import java.util.List;
4244
import java.util.Locale;
4345
import java.util.Map.Entry;
@@ -245,7 +247,7 @@ public CompilerResult performCompile( CompilerConfiguration config )
245247
}
246248

247249
// Collect sources
248-
List<String> allSources = new ArrayList<>();
250+
Set<String> allSources = new HashSet<>();
249251
for ( String source : config.getSourceLocations() )
250252
{
251253
File srcFile = new File( source );
@@ -502,9 +504,9 @@ static boolean isReplaceProcessorPath( CompilerConfiguration config )
502504
return false;
503505
}
504506

505-
static List<String> resortSourcesToPutModuleInfoFirst( List<String> allSources )
507+
static Set<String> resortSourcesToPutModuleInfoFirst( Set<String> allSources )
506508
{
507-
ArrayList<String> resorted = new ArrayList<>();
509+
Set<String> resorted = new LinkedHashSet<>( allSources.size() );
508510

509511
for ( String mi : allSources )
510512
{
@@ -652,7 +654,7 @@ private JavaCompiler getEcj()
652654
return null;
653655
}
654656

655-
private void addExtraSources( File dir, List<String> allSources )
657+
private void addExtraSources( File dir, Set<String> allSources )
656658
{
657659
DirectoryScanner scanner = new DirectoryScanner();
658660
scanner.setBasedir( dir.getAbsolutePath() );

plexus-compilers/plexus-compiler-eclipse/src/test/java/org/codehaus/plexus/compiler/eclipse/EclipseJavaCompilerTest.java

+12-11
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
import org.junit.jupiter.params.provider.Arguments;
55
import org.junit.jupiter.params.provider.MethodSource;
66

7-
import java.util.List;
7+
import java.util.LinkedHashSet;
8+
import java.util.Set;
89
import java.util.stream.Stream;
910

1011
import static java.util.Arrays.asList;
@@ -14,42 +15,42 @@ class EclipseJavaCompilerTest
1415
{
1516
@ParameterizedTest
1617
@MethodSource( "sources" )
17-
void testReorderedSources( List<String> expected, List<String> inputSources )
18+
void testReorderedSources( Set<String> expected, Set<String> inputSources )
1819
{
19-
List<String> resorted = EclipseJavaCompiler.resortSourcesToPutModuleInfoFirst( inputSources );
20+
Set<String> resorted = EclipseJavaCompiler.resortSourcesToPutModuleInfoFirst( inputSources );
2021

2122
assertEquals( expected, resorted );
2223
}
2324

2425
static Stream<Arguments> sources()
2526
{
26-
List<String> expectedOrder = asList(
27+
Set<String> expectedOrder = new LinkedHashSet<>( asList(
2728
"module-info.java",
2829
"plexus/A.java",
2930
"plexus/B.java",
3031
"eclipse/A.java"
31-
);
32+
) );
3233

33-
List<String> moduleInfoAlreadyFirst = asList(
34+
Set<String> moduleInfoAlreadyFirst = new LinkedHashSet<>( asList(
3435
"module-info.java",
3536
"plexus/A.java",
3637
"plexus/B.java",
3738
"eclipse/A.java"
38-
);
39+
) );
3940

40-
List<String> moduleInfoSomewhereInTheMiddle = asList(
41+
Set<String> moduleInfoSomewhereInTheMiddle = new LinkedHashSet<>( asList(
4142
"plexus/A.java",
4243
"module-info.java",
4344
"plexus/B.java",
4445
"eclipse/A.java"
45-
);
46+
) );
4647

47-
List<String> moduleInfoAsLast = asList(
48+
Set<String> moduleInfoAsLast = new LinkedHashSet<>( asList(
4849
"plexus/A.java",
4950
"plexus/B.java",
5051
"eclipse/A.java",
5152
"module-info.java"
52-
);
53+
) );
5354

5455
return Stream.of(
5556
Arguments.arguments( expectedOrder, moduleInfoAlreadyFirst ),

0 commit comments

Comments
 (0)