Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [incquery-dev] eclipsecon example

Hi

The IncQueryXcoreEcoreBuilder is the one which gets invoked when the editor is opened for the dynamic instance model.
Check the attached trace.

Cheers,
Tamas
Hi,

István: I strongly disagree with relying on the editor instead of the builder: that is very clunky and if will suggest to put other features there as well. Remember the parsing of VTCL files in VIATRA? The builder is a nice place to solve this issue, and is consistent with the way Xtext handles its stuff.

Tamás: On the other hand, how does the builder start when the editor is opened? I understand that in case of any file changes the builder is executed, thus making the registry consistent with the model. Is this only a miscommunication, or is there something special I don't understand?

Zoli
-- Zoltán Ujhelyi
https://www.inf.mit.bme.hu/en/members/ujhelyiz

Fault Tolerant Systems Research Group
Budapest University of Technology and Economics

On 2013.10.23., at 15:38, István Ráth <rath@xxxxxxxxxx> wrote:

Wouldn't it be better to avoid the warnings in eiq files by making sure the
validator uses the target platform extension registry?

I think it would be a safer approach to stop relying on builder side
effects and really use our editor for initialization (and cleanup) purposes.

Abel, any thoughts?

On Wednesday, October 23, 2013, Tamas Szabo wrote:

I committed the changes to solve this issue. The registry now uses weak
collections to store the features.
Dynamic case: the builder does the work. When you open the editor the
builder will be invoked automatically so it is not needed to register the
features in some editor code again.
Generated case: the extensions are put to the plugin.xml by the generator
and this will be used later.

I have checked it with both cases and it works, please let me know if
something is missing.

On second thought, my last idea should NOT be used, as the
WellbehavingDerivedFeatureRegistry is in base, which should not have
logical or semantic dependency on query-based features!

Weak collections are OK, as dynamic mode is something that BASE is
concerned with (and QBF should not be, but that's another issue).

   Ábel Hegedüs

Fault Tolerant Systems Research Group
Department of Measurement and Information Systems
Budapest University of Technology and Economics


On 23 October 2013 12:22, Ábel Hegedüs <abel.hegedus@xxxxxxxxxx> wrote:

Another idea: query-based features have a very specific EAnnotation, that
could be checked in the isWellbehaving call (see SDF for an example). In
order to increase performance, this check is only needed if the feature is
not in the registry. However, the result should not be cached, as that
leads back to the weak collection problem again.

Combining the weak collection and the annotation checking, we could
completely avoid having to create wellbehaving extensions for query-based
features, as they are registered automatically the first time they are
encountered. Of course, this works only if the EAnnotations on the feature
are always available.

    Ábel Hegedüs


Fault Tolerant Systems Research Group
Department of Measurement and Information Systems
Budapest University of Technology and Economics


On 23 October 2013 12:12, Istvan Rath <rath@xxxxxxxxxx> wrote:


On Wednesday, October 23, 2013 at 12:09 PM, Ábel Hegedüs wrote:

  On 23 October 2013 11:30, Tamas Szabo <tamas.szabo@xxxxxxxxx> wrote:

Finally, what about the case when the builder did not run? AFAIK, you
created the model editor to work in these cases (thus the query spec
registration in the SDF). Shouldn't it (also/instead) register the features?

--
Tamas Szabo
Software engineer

Tel.:   +49 711 342 191 0
Fax.:   +49 711 342 191 29
Mobil:  +49 171 565 416 9
Web:    www.itemis.de
Mail:   tamas.szabo@xxxxxxxxx <javascript:_e({}, 'cvml', 'tamas.szabo@xxxxxxxxx');>
Skype:  szabta89

itemis AG
Niederlassung Süd
Meitnerstr. 10
70563 Stuttgart

Rechtlicher Hinweis:
Registergericht: Amtsgericht Dortmund HRB 20621 | Sitz der Gesellschaft:
Lünen
Vorstand: Jens Wagener (Vorsitzender) | Wolfgang Neuhaus | Dr. Georg
Pietrek | Jens Trompeter | Sebastian Neus
Aufsichtsrat: Prof. Dr. Burkhard Igel (Vorsitzender) | Stephan Grollmann
| Michael Neuhaus


--
Istvan RATH, PhD
Research fellow
Budapest University of Technology and Economics
Fault Tolerant Systems Research Group
_______________________________________________
incquery-dev mailing list
incquery-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/incquery-dev
_______________________________________________
incquery-dev mailing list
incquery-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/incquery-dev


--
Tamas Szabo
Software engineer

Tel.:   +49 711 342 191 0
Fax.:   +49 711 342 191 29
Mobil:  +49 171 565 416 9
Web:    www.itemis.de
Mail:   tamas.szabo@xxxxxxxxx
Skype:  szabta89

itemis AG
Niederlassung Süd
Meitnerstr. 10
70563 Stuttgart

Rechtlicher Hinweis:
Registergericht: Amtsgericht Dortmund HRB 20621 | Sitz der Gesellschaft:
Lünen
Vorstand: Jens Wagener (Vorsitzender) | Wolfgang Neuhaus | Dr. Georg
Pietrek | Jens Trompeter | Sebastian Neus
Aufsichtsrat: Prof. Dr. Burkhard Igel (Vorsitzender) | Stephan Grollmann
| Michael Neuhaus

IncQueryXcoreEcoreBuilder.handleIncQueryDerivedFeature(EStructuralFeature, XIncQueryDerivedFeature) line: 113	
IncQueryXcoreEcoreBuilder.getIncQueryDerivedFeature(XIncQueryDerivedFeature) line: 103	
IncQueryXcoreEcoreBuilder.getEClass(XClass) line: 92	
IncQueryXcoreEcoreBuilder(XcoreEcoreBuilder).getEClassifier(XClassifier) line: 369	
IncQueryXcoreEcoreBuilder(XcoreEcoreBuilder).getEPackage(XPackage) line: 204	
IncQueryXcoreEcoreBuilder.getEPackage(XPackage) line: 49	
IncQueryXcoreModelAssociator.installDerivedState(DerivedStateAwareResource, boolean) line: 53	
XcoreResource(DerivedStateAwareResource).installDerivedState(boolean) line: 145	
XcoreResource(BatchLinkableResource).getContents() line: 124	
XcoreResource$FragmentCache.get(String) line: 71	
XcoreResource.getEObject(String) line: 160	
SAXXMIHandler(XMLHandler).getPackageForURI(String) line: 2565	
SAXXMIHandler(XMLHandler).getFactoryForPrefix(String) line: 2429	
SAXXMIHandler(XMLHandler).createObjectByType(String, String, boolean) line: 1306	
SAXXMIHandler(XMLHandler).createTopObject(String, String) line: 1475	
SAXXMIHandler(XMLHandler).processElement(String, String, String) line: 1026	
SAXXMIHandler(XMIHandler).processElement(String, String, String) line: 77	
SAXXMIHandler(XMLHandler).startElement(String, String, String) line: 1008	
SAXXMIHandler(XMLHandler).startElement(String, String, String, Attributes) line: 719	
SAXXMIHandler(XMIHandler).startElement(String, String, String, Attributes) line: 163	
SAXParserImpl$JAXPSAXParser(AbstractSAXParser).startElement(QName, XMLAttributes, Augmentations) line: 506	
XMLDTDValidator.startElement(QName, XMLAttributes, Augmentations) line: 745	
XMLDocumentScannerImpl(XMLDocumentFragmentScannerImpl).scanStartElement() line: 1323	
XMLDocumentScannerImpl$ContentDriver.scanRootElementHook() line: 1277	
XMLDocumentScannerImpl$ContentDriver(XMLDocumentFragmentScannerImpl$FragmentContentDriver).next() line: 3065	
XMLDocumentScannerImpl$PrologDriver.next() line: 881	
XMLDocumentScannerImpl.next() line: 607	
XMLDocumentScannerImpl(XMLDocumentFragmentScannerImpl).scanDocument(boolean) line: 489	
XIncludeAwareParserConfiguration(XML11Configuration).parse(boolean) line: 835	
XIncludeAwareParserConfiguration(XML11Configuration).parse(XMLInputSource) line: 764	
SAXParserImpl$JAXPSAXParser(XMLParser).parse(XMLInputSource) line: 123	
SAXParserImpl$JAXPSAXParser(AbstractSAXParser).parse(InputSource) line: 1210	
SAXParserImpl$JAXPSAXParser.parse(InputSource) line: 568	
SAXParserImpl.parse(InputSource, DefaultHandler) line: 302	
XMILoadImpl(XMLLoadImpl).load(XMLResource, InputStream, Map<?,?>) line: 175	
XMIResourceImpl(XMLResourceImpl).doLoad(InputStream, Map<?,?>) line: 253	
XMIResourceImpl(ResourceImpl).load(InputStream, Map<?,?>) line: 1518	
XMIResourceImpl(ResourceImpl).load(Map<?,?>) line: 1297	
AdapterFactoryEditingDomain$AdapterFactoryEditingDomainResourceSet(ResourceSetImpl).demandLoad(Resource) line: 259	
AdapterFactoryEditingDomain$AdapterFactoryEditingDomainResourceSet(ResourceSetImpl).demandLoadHelper(Resource) line: 274	
AdapterFactoryEditingDomain$AdapterFactoryEditingDomainResourceSet(ResourceSetImpl).getResource(URI, boolean) line: 406	
CustomizedEcoreEditor(EcoreEditor).createModelGen() line: 1161	
CustomizedEcoreEditor(EcoreEditor).createModel() line: 1257	
CustomizedEcoreEditor.createPages() line: 176	
CustomizedEcoreEditor(MultiPageEditorPart).createPartControl(Composite) line: 358	
CompatibilityEditor(CompatibilityPart).createPartControl(IWorkbenchPart, Composite) line: 142	
CompatibilityEditor.createPartControl(IWorkbenchPart, Composite) line: 96	
CompatibilityEditor(CompatibilityPart).create() line: 323	
NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
NativeMethodAccessorImpl.invoke(Object, Object[]) line: 57	
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 43	
Method.invoke(Object, Object...) line: 606	
MethodRequestor.execute() line: 56	
InjectorImpl.processAnnotated(Class<Annotation>, Object, Class<?>, PrimaryObjectSupplier, PrimaryObjectSupplier, ArrayList<Class<?>>) line: 877	
InjectorImpl.processAnnotated(Class<Annotation>, Object, Class<?>, PrimaryObjectSupplier, PrimaryObjectSupplier, ArrayList<Class<?>>) line: 857	
InjectorImpl.inject(Object, PrimaryObjectSupplier, PrimaryObjectSupplier) line: 119	
InjectorImpl.internalMake(Class<?>, PrimaryObjectSupplier, PrimaryObjectSupplier) line: 333	
InjectorImpl.make(Class<T>, PrimaryObjectSupplier) line: 254	
ContextInjectionFactory.make(Class<T>, IEclipseContext) line: 162	
ReflectionContributionFactory.createFromBundle(Bundle, IEclipseContext, IEclipseContext, URI) line: 102	
ReflectionContributionFactory.doCreate(String, IEclipseContext, IEclipseContext) line: 71	
ReflectionContributionFactory.create(String, IEclipseContext) line: 53	
ContributedPartRenderer.createWidget(MUIElement, Object) line: 129	
PartRenderingEngine.createWidget(MUIElement, Object) line: 949	
PartRenderingEngine.safeCreateGui(MUIElement, Object, IEclipseContext) line: 633	
PartRenderingEngine.safeCreateGui(MUIElement) line: 735	
PartRenderingEngine.access$2(PartRenderingEngine, MUIElement) line: 706	
PartRenderingEngine$7.run() line: 700	
SafeRunner.run(ISafeRunnable) line: 42	
PartRenderingEngine.createGui(MUIElement) line: 685	
PartServiceImpl$1.handleEvent(Event) line: 90	
UIEventHandler$1.run() line: 41	
UISynchronizer(Synchronizer).syncExec(Runnable) line: 180	
UISynchronizer.syncExec(Runnable) line: 150	
Display.syncExec(Runnable) line: 4650	
E4Application$1.syncExec(Runnable) line: 205	
UIEventHandler.handleEvent(Event) line: 38	
EventHandlerWrapper.handleEvent(Event, Permission) line: 197	
EventHandlerTracker.dispatchEvent(EventHandlerWrapper, Permission, int, Event) line: 197	
EventHandlerTracker.dispatchEvent(Object, Object, int, Object) line: 1	
EventManager.dispatchEvent(Set<Entry<K,V>>, EventDispatcher<K,V,E>, int, E) line: 230	
ListenerQueue<K,V,E>.dispatchEventSynchronous(int, E) line: 148	
EventAdminImpl.dispatchEvent(Event, boolean) line: 135	
EventAdminImpl.sendEvent(Event) line: 78	
EventComponent.sendEvent(Event) line: 39	
EventBroker.send(String, Object) line: 80	
UIEventPublisher.notifyChanged(Notification) line: 58	
PartStackImpl(BasicNotifierImpl).eNotify(Notification) line: 374	
PartStackImpl(ElementContainerImpl<T>).setSelectedElement(T) line: 171	
ModelServiceImpl.showElementInWindow(MWindow, MUIElement) line: 576	
ModelServiceImpl.bringToTop(MUIElement) line: 543	
PartServiceImpl.delegateBringToTop(MPart) line: 610	
PartServiceImpl.bringToTop(MPart) line: 322	
PartServiceImpl.showPart(MPart, EPartService$PartState) line: 1034	
WorkbenchPage.busyOpenEditor(IEditorInput, String, boolean, int, IMemento, boolean) line: 3112	
WorkbenchPage.access$21(WorkbenchPage, IEditorInput, String, boolean, int, IMemento, boolean) line: 3034	
WorkbenchPage$8.run() line: 3016	
BusyIndicator.showWhile(Display, Runnable) line: 70	
WorkbenchPage.openEditor(IEditorInput, String, boolean, int, IMemento, boolean) line: 3012	
WorkbenchPage.openEditor(IEditorInput, String, boolean, int) line: 2976	
WorkbenchPage.openEditor(IEditorInput, String, boolean) line: 2967	
IDE.openEditor(IWorkbenchPage, IFile, boolean, boolean) line: 534	
IDE.openEditor(IWorkbenchPage, IFile, boolean) line: 493	
EditorUtility.openInEditor(IFile, boolean) line: 360	
EditorUtility.openInEditor(Object, boolean) line: 167	
OpenAction.run(Object[]) line: 268	
OpenAction.run(IStructuredSelection) line: 233	
OpenAction(SelectionDispatchAction).dispatchRun(ISelection) line: 275	
OpenAction(SelectionDispatchAction).run() line: 251	
PackageExplorerActionGroup.handleOpen(ISelection, boolean) line: 376	
PackageExplorerPart$4.open(ISelection, boolean) line: 538	
OpenAndLinkWithEditorHelper$InternalListener.open(OpenEvent) line: 47	
StructuredViewer$2.run() line: 866	
SafeRunner.run(ISafeRunnable) line: 42	
JFaceUtil$1.run(ISafeRunnable) line: 49	
SafeRunnable.run(ISafeRunnable) line: 175	
PackageExplorerPart$PackageExplorerProblemTreeViewer(StructuredViewer).fireOpen(OpenEvent) line: 864	
PackageExplorerPart$PackageExplorerProblemTreeViewer(StructuredViewer).handleOpen(SelectionEvent) line: 1152	
StructuredViewer$6.handleOpen(SelectionEvent) line: 1256	
OpenStrategy.fireOpenEvent(SelectionEvent) line: 275	
OpenStrategy.access$2(OpenStrategy, SelectionEvent) line: 269	
OpenStrategy$1.handleEvent(Event) line: 309	
EventTable.sendEvent(Event) line: 84	
Display.sendEvent(EventTable, Event) line: 4166	
Tree(Widget).sendEvent(Event) line: 1466	
Tree(Widget).sendEvent(int, Event, boolean) line: 1489	
Tree(Widget).sendEvent(int, Event) line: 1474	
Tree(Widget).notifyListeners(int, Event) line: 1279	
Display.runDeferredEvents() line: 4012	
Display.readAndDispatch() line: 3651	
PartRenderingEngine$9.run() line: 1113	
Realm.runWithDefault(Realm, Runnable) line: 332	
PartRenderingEngine.run(MApplicationElement, IEclipseContext) line: 997	
E4Workbench.createAndRunUI(MApplicationElement) line: 138	
Workbench$5.run() line: 610	
Realm.runWithDefault(Realm, Runnable) line: 332	
Workbench.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 567	
PlatformUI.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 150	
IDEApplication.start(IApplicationContext) line: 124	
EclipseAppHandle.run(Object) line: 196	
EclipseAppLauncher.runApplication(Object) line: 110	
EclipseAppLauncher.start(Object) line: 79	
EclipseStarter.run(Object) line: 354	
EclipseStarter.run(String[], Runnable) line: 181	
NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
NativeMethodAccessorImpl.invoke(Object, Object[]) line: 57	
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 43	
Method.invoke(Object, Object...) line: 606	
Main.invokeFramework(String[], URL[]) line: 636	
Main.basicRun(String[]) line: 591	
Main.run(String[]) line: 1450	
Main.main(String[]) line: 1426	

Back to the top