11package org .metafacture .fix ;
22
3+ import org .metafacture .fix .fix .Fix ;
4+
5+ import org .eclipse .emf .common .util .URI ;
6+ import org .eclipse .emf .ecore .resource .Resource ;
7+ import org .eclipse .xtext .resource .XtextResource ;
8+ import org .eclipse .xtext .resource .XtextResourceSet ;
9+ import org .eclipse .xtext .util .CancelIndicator ;
10+ import org .eclipse .xtext .validation .CheckMode ;
11+ import org .eclipse .xtext .validation .IResourceValidator ;
12+ import org .eclipse .xtext .validation .Issue ;
13+ import com .google .common .io .CharStreams ;
14+ import com .google .inject .Injector ;
15+
16+ import java .io .File ;
17+ import java .io .FileWriter ;
18+ import java .io .IOException ;
19+ import java .io .Reader ;
20+
321/**
422 * Initialization support for running Xtext languages without Equinox extension registry.
523 */
@@ -12,4 +30,38 @@ public static void doSetup() {
1230 new FixStandaloneSetup ().createInjectorAndDoEMFRegistration ();
1331 }
1432
33+ public static Fix parseFix (final Reader fixDef ) {
34+ // TODO: do this only once per application
35+ final Injector injector = new FixStandaloneSetup ().createInjectorAndDoEMFRegistration ();
36+ FixStandaloneSetup .doSetup ();
37+
38+ try {
39+ final URI uri = URI .createFileURI (absPathToTempFile (fixDef , ".fix" ));
40+ final Resource resource = injector .getInstance (XtextResourceSet .class ).getResource (uri , true );
41+ final IResourceValidator validator = ((XtextResource ) resource ).getResourceServiceProvider ().getResourceValidator ();
42+
43+ for (final Issue issue : validator .validate (resource , CheckMode .ALL , CancelIndicator .NullImpl )) {
44+ System .err .println (issue .getMessage ());
45+ }
46+
47+ return (Fix ) resource .getContents ().get (0 );
48+ }
49+ catch (final IOException e ) {
50+ e .printStackTrace ();
51+ return null ;
52+ }
53+ }
54+
55+ public static String absPathToTempFile (final Reader fixDef , final String suffix ) throws IOException {
56+ // TODO: avoid temp file creation
57+ final File file = File .createTempFile ("metafix" , suffix );
58+ file .deleteOnExit ();
59+
60+ try (FileWriter out = new FileWriter (file )) {
61+ CharStreams .copy (fixDef , out );
62+ }
63+
64+ return file .getAbsolutePath ();
65+ }
66+
1567}
0 commit comments