1717import org .eclipse .xtext .AbstractElement ;
1818import org .eclipse .xtext .AbstractRule ;
1919import org .eclipse .xtext .Grammar ;
20- import org .eclipse .xtext .GrammarUtil ;
2120import org .eclipse .xtext .IGrammarAccess ;
22- import org .eclipse .xtext .ISetup ;
2321import org .eclipse .xtext .ParserRule ;
2422import org .eclipse .xtext .impl .AssignmentImpl ;
2523import org .eclipse .xtext .impl .CrossReferenceImpl ;
2624import org .eclipse .xtext .impl .GroupImpl ;
27- import org .eclipse .xtext .resource .FileExtensionProvider ;
2825import org .eclipse .xtext .resource .IResourceFactory ;
2926import org .eclipse .xtext .resource .IResourceServiceProvider ;
3027import org .eclipse .xtext .resource .XtextResource ;
3128
3229import com .google .inject .Injector ;
33-
3430import graphite .shared .DerivedObjectProperties ;
3531
3632@ SuppressWarnings ("restriction" )
3733public class XtextUtility {
3834
3935 public static Resource deserializeString (DerivedObjectProperties derivedObjectProperties , String parsedString ) {
40- Injector grammarInjector = derivedObjectProperties .getGrammar ().createInjectorAndDoEMFRegistration ();
41- IGrammarAccess grammarAccess = grammarInjector .getInstance (IGrammarAccess .class );
42- ParserRule entryParserRule = (ParserRule ) GrammarUtil .findRuleForName (grammarAccess .getGrammar (), derivedObjectProperties .getGrammarEntryRule ());
43- FileExtensionProvider fileExtensionProvider = grammarInjector .getInstance (FileExtensionProvider .class );
36+ Injector grammarInjector = derivedObjectProperties .getGrammarInjector ();
37+ registerInjector (grammarInjector , derivedObjectProperties .getExtension ());
4438 ResourceSet resourceSet = grammarInjector .getInstance (ResourceSet .class );
4539 EList <Resource > resources = (derivedObjectProperties .getContainerObject ().eResource () != null && derivedObjectProperties .getContainerObject ().eResource ().getResourceSet () != null ) ? ((ResourceSet )derivedObjectProperties .getContainerObject ().eResource ().getResourceSet ()).getResources () : null ;
4640 if (resources != null ) {
@@ -49,42 +43,39 @@ public static Resource deserializeString(DerivedObjectProperties derivedObjectPr
4943 }
5044 }
5145 String uuid = UUID .randomUUID ().toString ().replace ("-" , "" );
52- String uri = "dummy:/parsed" + uuid + "." + fileExtensionProvider . getPrimaryFileExtension ();
46+ String uri = "dummy:/parsed" + uuid + "." + derivedObjectProperties . getExtension ();
5347 XtextResource derivedResource = (XtextResource ) resourceSet .createResource (URI .createURI (uri ));
54- derivedResource .setEntryPoint (( ParserRule ) entryParserRule );
48+ derivedResource .setEntryPoint (derivedObjectProperties . getEntryParserRule () );
5549 try {
5650 InputStream in = new ByteArrayInputStream (parsedString .getBytes ());
5751 derivedResource .load (in , resourceSet .getLoadOptions ());
5852 } catch (Exception e ) {
5953 e .printStackTrace ();
6054 }
6155 if (derivedResource .getErrors ().size () == 0 ) {
62- EcoreUtil .resolveAll (resourceSet );
56+ EcoreUtil .resolveAll (derivedResource );
6357 }
6458 derivedObjectProperties .setInvalid ((derivedResource .getErrors ().size () > 0 ));
6559 derivedObjectProperties .setParseErrors (derivedResource .getErrors ());
6660 derivedObjectProperties .setLastParsedString (parsedString );
6761 return derivedResource ;
6862 }
6963
70- public static String serializeObject (EObject object , ISetup grammar ) {
71- Injector grammarInjector = grammar .createInjectorAndDoEMFRegistration ();
64+ public static String serializeObject (DerivedObjectProperties derivedObjectProperties , EObject object ) {
65+ Injector grammarInjector = derivedObjectProperties .getGrammarInjector ();
66+ registerInjector (grammarInjector , derivedObjectProperties .getExtension ());
7267 CustomSerializer serializer = grammarInjector .getInstance (CustomSerializer .class );
7368 return serializer .serialize (object );
7469 }
75-
76- public static FileExtensionProvider register (Injector injector ) {
77- IResourceFactory resourceFactory = injector .getInstance (IResourceFactory .class );
78- IResourceServiceProvider serviceProvider = injector .getInstance (IResourceServiceProvider .class );
79- FileExtensionProvider fileExtensionProvider = injector .getInstance (FileExtensionProvider .class );
80- Resource .Factory .Registry .INSTANCE .getExtensionToFactoryMap ().put (fileExtensionProvider .getPrimaryFileExtension (), resourceFactory );
81- IResourceServiceProvider .Registry .INSTANCE .getExtensionToFactoryMap ().put (fileExtensionProvider .getPrimaryFileExtension (), serviceProvider );
82- return fileExtensionProvider ;
70+
71+ public static void registerInjector (Injector grammarInjector , String extension ) {
72+ IResourceFactory resourceFactory = grammarInjector .getInstance (IResourceFactory .class );
73+ IResourceServiceProvider serviceProvider = grammarInjector .getInstance (IResourceServiceProvider .class );
74+ Resource .Factory .Registry .INSTANCE .getExtensionToFactoryMap ().put (extension , resourceFactory );
75+ IResourceServiceProvider .Registry .INSTANCE .getExtensionToFactoryMap ().put (extension , serviceProvider );
8376 }
8477
85- public static Set <EClassifier > getReferencedTypes (ISetup setup ) {
86- Injector injector = setup .createInjectorAndDoEMFRegistration ();
87- IGrammarAccess grammarAccess = injector .getInstance (IGrammarAccess .class );
78+ public static Set <EClassifier > getReferencedTypes (IGrammarAccess grammarAccess ) {
8879 Grammar grammar = grammarAccess .getGrammar ();
8980 Set <EClassifier > referencedTypes = new HashSet <>();
9081 for (AbstractRule rule : grammar .getRules ()) {
0 commit comments