Skip to content

Commit 4cb15a6

Browse files
committed
Merge pull request #74 from tkhduracell/master
Added a file parameter for file inclusion
2 parents e02a05b + 2ee88fb commit 4cb15a6

File tree

4 files changed

+90
-5
lines changed

4 files changed

+90
-5
lines changed

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,10 @@ Optional system properties:
126126
List of files to process, instead of processing all files.
127127
This is useful for a build tool to support incremental compilation.
128128
129+
retrolambda.includedFile
130+
A file listing the files to process (one file per line), instead of processing all files.
131+
This is useful for a build tool to support incremental compilation.
132+
129133
If the Java agent is used, then Retrolambda will use it to capture the
130134
lambda classes generated by Java. Otherwise Retrolambda will hook into
131135
Java's internal lambda dumping API, which is more susceptible to suddenly

retrolambda/src/main/java/net/orfjackal/retrolambda/Config.java

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,13 @@
44

55
package net.orfjackal.retrolambda;
66

7+
import com.google.common.base.Charsets;
8+
import com.google.common.io.*;
9+
import com.google.common.io.Files;
710
import org.objectweb.asm.Opcodes;
811

9-
import java.io.File;
12+
import java.io.*;
13+
import java.nio.charset.Charset;
1014
import java.nio.file.*;
1115
import java.util.*;
1216
import java.util.stream.Collectors;
@@ -20,6 +24,7 @@ public class Config {
2024
public static final String OUTPUT_DIR = PREFIX + "outputDir";
2125
public static final String CLASSPATH = PREFIX + "classpath";
2226
public static final String INCLUDED_FILES = PREFIX + "includedFiles";
27+
public static final String INCLUDED_FILE = PREFIX + "includedFile";
2328

2429
private static final List<String> requiredProperties = new ArrayList<>();
2530
private static final List<String> requiredPropertiesHelp = new ArrayList<>();
@@ -159,6 +164,29 @@ public List<Path> getIncludedFiles() {
159164
.collect(Collectors.toList());
160165
}
161166

167+
static {
168+
optionalParameterHelp(INCLUDED_FILE,
169+
"A file listing the files to process (one file per line), instead of processing all files.",
170+
"This is useful for a build tool to support incremental compilation.");
171+
}
172+
173+
public List<Path> getIncludedFileList() {
174+
String filePath = p.getProperty(INCLUDED_FILE);
175+
if (filePath == null) {
176+
return null;
177+
}
178+
File file = Paths.get(filePath).toFile();
179+
180+
try {
181+
return Files.readLines(file, Charsets.UTF_8).stream()
182+
.filter(s -> !s.isEmpty())
183+
.map(Paths::get)
184+
.collect(Collectors.toList());
185+
} catch (IOException e) {
186+
return Collections.emptyList();
187+
}
188+
}
189+
162190
// help
163191

164192
public String getHelp() {

retrolambda/src/main/java/net/orfjackal/retrolambda/Retrolambda.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
package net.orfjackal.retrolambda;
66

7+
import com.google.common.collect.Lists;
78
import net.orfjackal.retrolambda.files.*;
89
import net.orfjackal.retrolambda.interfaces.*;
910
import net.orfjackal.retrolambda.lambdas.*;
@@ -21,13 +22,23 @@ public static void run(Config config) throws Throwable {
2122
Path inputDir = config.getInputDir();
2223
Path outputDir = config.getOutputDir();
2324
String classpath = config.getClasspath();
24-
List<Path> includedFiles = config.getIncludedFiles();
25+
List<Path> includedFilesByArgument = config.getIncludedFileList();
26+
List<Path> includedFilesByFileList = config.getIncludedFiles();
27+
2528
System.out.println("Bytecode version: " + bytecodeVersion + " (" + config.getJavaVersion() + ")");
2629
System.out.println("Default methods: " + defaultMethodsEnabled);
2730
System.out.println("Input directory: " + inputDir);
2831
System.out.println("Output directory: " + outputDir);
2932
System.out.println("Classpath: " + classpath);
30-
if (includedFiles != null) {
33+
34+
List<Path> includedFiles = Lists.newArrayList();
35+
if (includedFilesByArgument != null) {
36+
includedFiles.addAll(includedFilesByArgument);
37+
}
38+
if (includedFilesByFileList != null) {
39+
includedFiles.addAll(includedFilesByFileList);
40+
}
41+
if (!includedFiles.isEmpty()) {
3142
System.out.println("Included files: " + includedFiles.size());
3243
}
3344

retrolambda/src/test/java/net/orfjackal/retrolambda/ConfigTest.java

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,17 @@
44

55
package net.orfjackal.retrolambda;
66

7+
import com.google.common.base.*;
8+
import com.google.common.collect.Lists;
9+
import com.google.common.io.Files;
710
import org.junit.*;
811
import org.junit.rules.ExpectedException;
912

10-
import java.io.File;
13+
import java.io.*;
1114
import java.nio.file.Paths;
1215
import java.util.*;
16+
import java.util.Optional;
17+
import java.util.stream.Collectors;
1318

1419
import static org.hamcrest.MatcherAssert.assertThat;
1520
import static org.hamcrest.Matchers.*;
@@ -72,4 +77,41 @@ public void included_files() {
7277
systemProperties.setProperty(Config.INCLUDED_FILES, "/foo/one.class" + File.pathSeparator + "/foo/two.class");
7378
assertThat("multiple values", config().getIncludedFiles(), is(Arrays.asList(Paths.get("/foo/one.class"), Paths.get("/foo/two.class"))));
7479
}
75-
}
80+
81+
@Test
82+
public void included_file() throws IOException {
83+
assertThat("not set", config().getIncludedFileList(), is(nullValue()));
84+
85+
systemProperties.setProperty(Config.INCLUDED_FILE, "");
86+
assertThat("zero values", config().getIncludedFileList(), is(empty()));
87+
88+
// Single file
89+
File singleTmp = File.createTempFile("test",".list");
90+
singleTmp.deleteOnExit();
91+
92+
List<String> file = Lists.newArrayList("foo.java");
93+
String delimiter = System.getProperty("line.separator");
94+
Files.write(file.stream()
95+
.collect(Collectors.joining(delimiter)), singleTmp, Charsets.UTF_8);
96+
97+
systemProperties.setProperty(Config.INCLUDED_FILE, singleTmp.getAbsolutePath());
98+
assertThat("one value", config().getIncludedFileList(), is(
99+
file.stream()
100+
.map(f -> Paths.get(f))
101+
.collect(Collectors.toList())));
102+
103+
// Multiple files
104+
File multiTmp = File.createTempFile("test",".list");
105+
multiTmp.deleteOnExit();
106+
107+
List<String> files = Lists.newArrayList("foo.java", "bar.java");
108+
Files.write(files.stream()
109+
.collect(Collectors.joining(delimiter)), multiTmp, Charsets.UTF_8);
110+
111+
systemProperties.setProperty(Config.INCLUDED_FILE, multiTmp.getAbsolutePath());
112+
assertThat("two values", config().getIncludedFileList(), is(
113+
files.stream()
114+
.map(f -> Paths.get(f))
115+
.collect(Collectors.toList())));
116+
}
117+
}

0 commit comments

Comments
 (0)