Skip to content

Commit a14d5cc

Browse files
committed
feat: compile entire directory in-place
1 parent 23c397f commit a14d5cc

File tree

4 files changed

+48
-20
lines changed

4 files changed

+48
-20
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@ model/
55
xtend-gen/
66
target/
77
xtext-gen/
8+
*.api.json

com.zazuko.apitesting.dsl/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,5 +239,10 @@
239239
<artifactId>xtext-antlr-generator</artifactId>
240240
<optional>true</optional>
241241
</dependency>
242+
<dependency>
243+
<groupId>commons-io</groupId>
244+
<artifactId>commons-io</artifactId>
245+
<version>2.5</version>
246+
</dependency>
242247
</dependencies>
243248
</project>
Lines changed: 41 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,23 @@
1+
import java.io.File;
2+
import java.util.Collection;
13
import java.util.List;
2-
import java.util.Map.Entry;
4+
5+
import org.apache.commons.io.FileUtils;
6+
import org.apache.commons.io.filefilter.WildcardFileFilter;
37

48
import org.eclipse.emf.common.util.URI;
59
import org.eclipse.emf.ecore.resource.Resource;
10+
import org.eclipse.emf.ecore.resource.ResourceSet;
11+
import org.eclipse.xtext.generator.GeneratorContext;
612
import org.eclipse.xtext.generator.GeneratorDelegate;
7-
import org.eclipse.xtext.generator.InMemoryFileSystemAccess;
8-
import org.eclipse.xtext.resource.XtextResourceSet;
9-
import org.eclipse.xtext.resource.XtextResource;
13+
import org.eclipse.xtext.generator.JavaIoFileSystemAccess;
1014
import org.eclipse.xtext.util.CancelIndicator;
1115
import org.eclipse.xtext.validation.CheckMode;
1216
import org.eclipse.xtext.validation.IResourceValidator;
1317
import org.eclipse.xtext.validation.Issue;
1418

19+
import com.google.inject.Inject;
20+
import com.google.inject.Provider;
1521
import com.google.inject.Injector;
1622

1723
import com.zazuko.apitesting.dsl.CoreStandaloneSetup;
@@ -20,24 +26,41 @@ public class GeneratorMain {
2026

2127
private static Injector injector = new CoreStandaloneSetup().createInjectorAndDoEMFRegistration();
2228

29+
@Inject Provider<ResourceSet> resourceSetProvider;
30+
31+
@Inject IResourceValidator validator;
32+
33+
@Inject GeneratorDelegate generator;
34+
35+
@Inject JavaIoFileSystemAccess fileAccess;
36+
2337
public static void main(String[] args) {
24-
final String input = args[0];
25-
26-
XtextResourceSet resourceSet = injector.getInstance(XtextResourceSet.class);
27-
Resource resource = resourceSet.getResource(URI.createFileURI(input), true);
38+
GeneratorMain main = injector.getInstance(GeneratorMain.class);
39+
main.generateDirectory(args[0]);
40+
}
41+
42+
protected void generateDirectory(String directoryName) {
43+
File dir = new File(directoryName);
44+
Collection<File> files = FileUtils.listFiles(dir, new WildcardFileFilter("*.api"), null);
2845

29-
IResourceValidator validator = ((XtextResource)resource).getResourceServiceProvider().getResourceValidator();
30-
List<Issue> issues = validator.validate(resource, CheckMode.ALL, CancelIndicator.NullImpl);
31-
for (Issue issue : issues) {
32-
// System.out.println(issue.getMessage());
46+
for (File file : files) {
47+
this.generateOne(file);
3348
}
49+
}
50+
51+
protected void generateOne(File input) {
52+
System.out.printf("Compiling %s %n", input.getPath());
53+
54+
ResourceSet resourceSet = resourceSetProvider.get();
55+
Resource resource = resourceSet.getResource(URI.createFileURI(input.getPath()), true);
3456

35-
// Code Generator
36-
GeneratorDelegate generator = injector.getInstance(GeneratorDelegate.class);
37-
InMemoryFileSystemAccess fsa = new InMemoryFileSystemAccess();
38-
generator.doGenerate(resource, fsa);
39-
for (Entry<String, CharSequence> file : fsa.getTextFiles().entrySet()) {
40-
System.out.println(file.getValue());
57+
List<Issue> issues = validator.validate(resource, CheckMode.ALL, CancelIndicator.NullImpl);
58+
if (!issues.isEmpty()) {
59+
issues.forEach(issue -> System.out.println(issue.getMessage()));
60+
return;
4161
}
62+
63+
fileAccess.setOutputPath(input.getParentFile().getPath());
64+
generator.generate(resource, fileAccess, new GeneratorContext());
4265
}
4366
}

com.zazuko.apitesting.dsl/src/main/java/com/zazuko/apitesting/dsl/generator/CoreGenerator.xtend

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,8 @@ class CoreGenerator extends AbstractGenerator {
2424

2525
if ( ! blocks.empty) {
2626
val String dslFileName = resource.getURI().lastSegment.toString();
27-
val String outFileBase = dslFileName.substring(0, dslFileName.lastIndexOf("."));
2827

29-
fsa.generateFile(outFileBase + '.json', generateSteps(blocks));
28+
fsa.generateFile(dslFileName + '.json', generateSteps(blocks));
3029
}
3130
}
3231

0 commit comments

Comments
 (0)