Skip to content

Commit e46cf43

Browse files
committed
Add changes for making parsing more efficient
1 parent 17b41d1 commit e46cf43

File tree

7 files changed

+76
-46
lines changed

7 files changed

+76
-46
lines changed

bundles/graphite/src/graphite/shared/DerivedObjectProperties.java

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
import org.eclipse.emf.ecore.EClassifier;
1313
import org.eclipse.emf.ecore.EObject;
1414
import org.eclipse.xtext.ISetup;
15+
import org.eclipse.xtext.ParserRule;
16+
17+
import com.google.inject.Injector;
1518

1619
import graphite.textual.XtextEObject;
1720

@@ -28,7 +31,7 @@ public class DerivedObjectProperties {
2831
protected Method identifierGetterMethod;
2932
protected Map<EObject, EList<EObject>> recerencingAndReferencedObjects;
3033
protected EList<Diagnostic> parseErrors;
31-
34+
3235
public DerivedObjectProperties(DerivedPropertyData derivedPropertyData, XtextEObject containerObject) {
3336
try {
3437
this.derivedPropertyData = derivedPropertyData;
@@ -92,6 +95,18 @@ public String getParsedStringName() {
9295
return derivedPropertyData.getParsedStringName();
9396
}
9497

98+
public String getExtension() {
99+
return derivedPropertyData.getExtension();
100+
}
101+
102+
public String getGrammarName() {
103+
return derivedPropertyData.getGrammarName();
104+
}
105+
106+
public String getGrammarEntryRule() {
107+
return derivedPropertyData.getGrammarEntryRule();
108+
}
109+
95110
public Class getType() {
96111
return derivedPropertyData.getType();
97112
}
@@ -136,14 +151,6 @@ public Field getParsedStringField() {
136151
return derivedPropertyData.getParsedStringField();
137152
}
138153

139-
public String getGrammarName() {
140-
return derivedPropertyData.getGrammarName();
141-
}
142-
143-
public String getGrammarEntryRule() {
144-
return derivedPropertyData.getGrammarEntryRule();
145-
}
146-
147154
public ISetup getGrammar() {
148155
return derivedPropertyData.getGrammar();
149156
}
@@ -152,6 +159,14 @@ public Plugin getGrammarPlugin() {
152159
return derivedPropertyData.getGrammarPlugin();
153160
}
154161

162+
public Injector getGrammarInjector() {
163+
return derivedPropertyData.getGrammarInjector();
164+
}
165+
166+
public ParserRule getEntryParserRule() {
167+
return derivedPropertyData.getEntryParserRule();
168+
}
169+
155170
public boolean isMany() {
156171
return derivedPropertyData.isMany();
157172
}

bundles/graphite/src/graphite/shared/DerivedPropertyData.java

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,14 @@
88
import org.apache.commons.lang3.reflect.FieldUtils;
99
import org.eclipse.core.runtime.Plugin;
1010
import org.eclipse.emf.ecore.EClassifier;
11+
import org.eclipse.xtext.GrammarUtil;
12+
import org.eclipse.xtext.IGrammarAccess;
1113
import org.eclipse.xtext.ISetup;
14+
import org.eclipse.xtext.ParserRule;
15+
import org.eclipse.xtext.resource.FileExtensionProvider;
16+
17+
import com.google.inject.Injector;
18+
1219
import graphite.textual.XtextUtility;
1320

1421

@@ -17,10 +24,13 @@ public class DerivedPropertyData {
1724

1825
protected String derivedObjectName;
1926
protected String parsedStringName;
27+
protected String extension;
2028
protected String grammarName;
2129
protected String grammarEntryRule;
2230
protected ISetup grammar;
2331
protected Plugin grammarPlugin;
32+
protected Injector grammarInjector;
33+
protected ParserRule entryParserRule;
2434
protected Class type;
2535
protected Class clazz;
2636
protected Class superclazz;
@@ -33,7 +43,7 @@ public class DerivedPropertyData {
3343
protected Field derivedObjectField;
3444
protected Field parsedStringField;
3545
protected boolean isMany;
36-
46+
3747
public DerivedPropertyData(String derivedObjectName, String parsedStringName, String grammarName, String grammarEntryRule, ISetup grammar, Plugin grammarPlugin, Class clazz, Class type, boolean isMany) {
3848
try {
3949
this.derivedObjectName = derivedObjectName;
@@ -53,7 +63,11 @@ public DerivedPropertyData(String derivedObjectName, String parsedStringName, St
5363
this.grammarEntryRule = grammarEntryRule;
5464
this.grammar = grammar;
5565
this.grammarPlugin = grammarPlugin;
56-
this.referencedTypes = XtextUtility.getReferencedTypes(grammar);
66+
this.grammarInjector = grammar.createInjectorAndDoEMFRegistration();
67+
this.extension = grammarInjector.getInstance(FileExtensionProvider.class).getPrimaryFileExtension();
68+
IGrammarAccess grammarAccess = grammarInjector.getInstance(IGrammarAccess.class);
69+
this.entryParserRule = (ParserRule) GrammarUtil.findRuleForName(grammarAccess.getGrammar(), grammarEntryRule);
70+
this.referencedTypes = XtextUtility.getReferencedTypes(grammarAccess);
5771
}
5872
catch (Exception e) {
5973
e.printStackTrace();
@@ -67,6 +81,10 @@ public String getDerivedObjectName() {
6781
public String getParsedStringName() {
6882
return parsedStringName;
6983
}
84+
85+
public String getExtension() {
86+
return extension;
87+
}
7088

7189
public String getGrammarName() {
7290
return grammarName;
@@ -75,7 +93,7 @@ public String getGrammarName() {
7593
public String getGrammarEntryRule() {
7694
return grammarEntryRule;
7795
}
78-
96+
7997
public ISetup getGrammar() {
8098
return grammar;
8199
}
@@ -84,6 +102,14 @@ public Plugin getGrammarPlugin() {
84102
return grammarPlugin;
85103
}
86104

105+
public Injector getGrammarInjector() {
106+
return grammarInjector;
107+
}
108+
109+
public ParserRule getEntryParserRule() {
110+
return entryParserRule;
111+
}
112+
87113
public Class getType() {
88114
return type;
89115
}

bundles/graphite/src/graphite/textual/CustomXMISaveImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ protected boolean shouldSaveFeature(EObject o, EStructuralFeature f) {
2828
XtextEObject object = (XtextEObject) o;
2929
if (object.getDerivedObjectsProperties().containsKey(f.getName())) {
3030
DerivedObjectProperties derivedObjectProperties = object.getDerivedObjectsProperties().get(f.getName());
31-
DerivedObjectUtility.setDeriveObject(derivedObjectProperties);
31+
//DerivedObjectUtility.setDeriveObject(derivedObjectProperties); //may be necessary later
3232
return derivedObjectProperties.isInvalid();
3333
}
3434
else {

bundles/graphite/src/graphite/textual/DerivedObjectUtility.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ public static boolean serializeObject(DerivedObjectProperties derivedObjectPrope
195195
Object containerObject = derivedObjectProperties.getSuperclazzConstructor().newInstance();
196196
Object derivedObject = derivedObjectProperties.getDerivedObjectField().get(derivedObjectProperties.getContainerObject());
197197
derivedObjectProperties.getDerivedObjectField().set(containerObject, derivedObject);
198-
String serializationResult = XtextUtility.serializeObject((EObject)containerObject, derivedObjectProperties.getGrammar());
198+
String serializationResult = XtextUtility.serializeObject(derivedObjectProperties, (EObject)containerObject);
199199
derivedObjectProperties.getParsedStringField().set(derivedObjectProperties.getContainerObject(), serializationResult);
200200
if (derivedObjectProperties.isInvalid()) { //serializationResult is always a syntactically correct string
201201
derivedObjectProperties.setInvalid(true);

bundles/graphite/src/graphite/textual/XtextUtility.java

Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -17,30 +17,24 @@
1717
import org.eclipse.xtext.AbstractElement;
1818
import org.eclipse.xtext.AbstractRule;
1919
import org.eclipse.xtext.Grammar;
20-
import org.eclipse.xtext.GrammarUtil;
2120
import org.eclipse.xtext.IGrammarAccess;
22-
import org.eclipse.xtext.ISetup;
2321
import org.eclipse.xtext.ParserRule;
2422
import org.eclipse.xtext.impl.AssignmentImpl;
2523
import org.eclipse.xtext.impl.CrossReferenceImpl;
2624
import org.eclipse.xtext.impl.GroupImpl;
27-
import org.eclipse.xtext.resource.FileExtensionProvider;
2825
import org.eclipse.xtext.resource.IResourceFactory;
2926
import org.eclipse.xtext.resource.IResourceServiceProvider;
3027
import org.eclipse.xtext.resource.XtextResource;
3128

3229
import com.google.inject.Injector;
33-
3430
import graphite.shared.DerivedObjectProperties;
3531

3632
@SuppressWarnings("restriction")
3733
public 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()) {

bundles/graphite/src/graphite/xtextwidget/EmbeddedResourceProvider.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,17 @@
22

33
import org.eclipse.emf.common.util.URI;
44
import org.eclipse.emf.ecore.resource.ResourceSet;
5-
import org.eclipse.xtext.resource.FileExtensionProvider;
65
import org.eclipse.xtext.resource.XtextResource;
76
import org.eclipse.xtext.ui.editor.embedded.IEditedResourceProvider;
87

98
@SuppressWarnings("restriction")
109
public class EmbeddedResourceProvider implements IEditedResourceProvider {
1110

12-
private FileExtensionProvider fileExtensionProvider;
11+
private String fileExtension;
1312
private ResourceSet siriusResourceSet;
1413

15-
public void setFileExtensionProvider(FileExtensionProvider fileExtensionProvider) {
16-
this.fileExtensionProvider = fileExtensionProvider;
14+
public void setFileExtension(String fileExtension) {
15+
this.fileExtension = fileExtension;
1716
}
1817

1918
public ResourceSet getSiriusResourceSet() {
@@ -26,7 +25,7 @@ public void setSiriusResourceSet(ResourceSet resourceSet) {
2625

2726
@Override
2827
public XtextResource createResource() {
29-
URI uri = URI.createURI("_synthetic." + fileExtensionProvider.getPrimaryFileExtension());
28+
URI uri = URI.createURI("_synthetic." + fileExtension);
3029
XtextResource xtextVirtualResource = (XtextResource) siriusResourceSet.createResource(uri);
3130
siriusResourceSet.getResources().add(xtextVirtualResource);
3231
return xtextVirtualResource;

bundles/graphite/src/graphite/xtextwidget/XtextPartialViewerLifecycleManager.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import org.eclipse.swt.widgets.Listener;
2424
import org.eclipse.swt.widgets.TypedListener;
2525
import org.eclipse.ui.texteditor.ITextEditorActionConstants;
26-
import org.eclipse.xtext.resource.FileExtensionProvider;
2726
import org.eclipse.xtext.resource.ResourceSetReferencingResourceSet;
2827
import org.eclipse.xtext.resource.ResourceSetReferencingResourceSetImpl;
2928
import org.eclipse.xtext.ui.editor.embedded.ActivationCodeTrigger;
@@ -66,10 +65,10 @@ public XtextPartialViewerLifecycleManager(EEFCustomWidgetDescription controlDesc
6665
protected void createMainControl(Composite parent, IEEFFormContainer formContainer) {
6766
try {
6867
Injector grammarInjector = DerivedObjectUtility.getGrammarInjector(derivedObjectProperties);
69-
FileExtensionProvider fileExtensionProvider = XtextUtility.register(grammarInjector);
68+
XtextUtility.registerInjector(grammarInjector, derivedObjectProperties.getExtension());
7069
grammarInjector.injectMembers(this);
7170
EmbeddedResourceProvider resProvider = grammarInjector.getInstance(EmbeddedResourceProvider.class);
72-
resProvider.setFileExtensionProvider(fileExtensionProvider);
71+
resProvider.setFileExtension(derivedObjectProperties.getExtension());
7372
resProvider.setSiriusResourceSet(getSiriusResourceSet());
7473
EmbeddedEditorFactory factory = grammarInjector.getInstance(EmbeddedEditorFactory.class);
7574
editingContextAdapter = super.editingContextAdapter;

0 commit comments

Comments
 (0)