1+ import java .io .File ;
2+ import java .util .Collection ;
13import 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
48import org .eclipse .emf .common .util .URI ;
59import org .eclipse .emf .ecore .resource .Resource ;
10+ import org .eclipse .emf .ecore .resource .ResourceSet ;
11+ import org .eclipse .xtext .generator .GeneratorContext ;
612import 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 ;
1014import org .eclipse .xtext .util .CancelIndicator ;
1115import org .eclipse .xtext .validation .CheckMode ;
1216import org .eclipse .xtext .validation .IResourceValidator ;
1317import org .eclipse .xtext .validation .Issue ;
1418
19+ import com .google .inject .Inject ;
20+ import com .google .inject .Provider ;
1521import com .google .inject .Injector ;
1622
1723import 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}
0 commit comments