Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [incquery-dev] Query Explorer (and our tooling in general) is still badly broken

Hi,

I have looked into the issue (again).

The annotation part should be fixed now in master (I have updated the corresponding code).

About the other issues, I am now strongly convinced that all (or at least most of them) are caused by a bad co-play between our Genmodel providing mechanism and Xcore-based metamodels. As I have already commented in https://bugs.eclipse.org/bugs/show_bug.cgi?id=428017, somehow the same EPackage gets loaded multiple times.

Today I will not have any more time to look into this, but I believe, this is specific to Xcore metamodels; we will not see this issue with other metamodels.


About the performance: I have seen this with your EMFxcel example as well where there was no big instance model available, so maybe we have some other source of problem.

I will look into the other issues, but will not have time for it today.

Cheers,
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 2014.02.16., at 11:48, Istvan Rath <rath@xxxxxxxxxx> wrote:

> Hi all,
> 
> a problems mentioned in the recent bugzilla (https://bugs.eclipse.org/bugs/show_bug.cgi?id=428016) are still present (as of the current master). I was working with the EMFxcel sample (https://github.com/ujhelyiz/EMF-IncQuery-Examples/tree/master/emfxcel) while discovering these issues.
> 
> - the @QueryExplorer annotation is still incorrectly handled (e.g. a message= assignment makes the pattern disappear from the QE, unless display=true is given)
> 
> 
> I have also found some new issues:
> 
> - the emfxcel example seems to incorrectly need dynamic EMF mode (but only after trying to re-initialize the queries, it works fine on the first run):
> 
> !ENTRY org.eclipse.incquery.patternlanguage.emf.ui 4 0 2014-02-16 11:24:18.415
> !MESSAGE EMF-IncQuery encountered an error in processing the EMF model. This happened while trying to process new metamodel elements.
> 
> !STACK 0
> org.eclipse.incquery.runtime.base.exception.IncQueryBaseException: NsURI (http://www.eclipse.org/emf/2002/Ecore) collision detected between different instances of EPackages. If this is normal, try using dynamic EMF mode.
> 	at org.eclipse.incquery.runtime.base.core.NavigationHelperContentAdapter.checkEPackage(NavigationHelperContentAdapter.java:595)
> 
> 
> 
> 
> - incorrect error handling (causes no visible error reports in the EIQ editor, and makes the pattern disappear from the QE). Note: there was indeed an error in the EIQ, but the reporting was totally bogus and the whole system stopped working after this (see also next exception).
> 
> !ENTRY org.eclipse.ui 4 0 2014-02-16 11:14:47.301
> !MESSAGE Unhandled event loop exception
> !STACK 0
> org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.RuntimeException: org.eclipse.incquery.runtime.exception.IncQueryException: The following error occurred during the preparation of an EMF-IncQuery pattern matcher: Impossible to match pattern: exported pattern variable Nev can not be determined based on the pattern constraints. HINT: certain constructs (e.g. negative patterns or check expressions) cannot output symbolic parameters.)
> 	at org.eclipse.swt.SWT.error(SWT.java:4397)
> 	at org.eclipse.swt.SWT.error(SWT.java:4312)
> 	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:138)
> 	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3976)
> 	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3653)
> 	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1113)
> 	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
> 	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:997)
> 	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:138)
> 	at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:610)
> 	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
> 	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:567)
> 	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
> 	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124)
> 	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
> 	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
> 	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
> 	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:354)
> 	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:181)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> 	at java.lang.reflect.Method.invoke(Method.java:597)
> 	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:636)
> 	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:591)
> 	at org.eclipse.equinox.launcher.Main.run(Main.java:1450)
> 	at org.eclipse.equinox.launcher.Main.main(Main.java:1426)
> Caused by: java.lang.RuntimeException: org.eclipse.incquery.runtime.exception.IncQueryException: The following error occurred during the preparation of an EMF-IncQuery pattern matcher: Impossible to match pattern: exported pattern variable Nev can not be determined based on the pattern constraints. HINT: certain constructs (e.g. negative patterns or check expressions) cannot output symbolic parameters.
> 	at org.eclipse.incquery.tooling.ui.queryexplorer.handlers.RuntimeMatcherRegistrator.run(RuntimeMatcherRegistrator.java:74)
> 	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
> 	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
> 	... 24 more
> Caused by: org.eclipse.incquery.runtime.exception.IncQueryException: The following error occurred during the preparation of an EMF-IncQuery pattern matcher: Impossible to match pattern: exported pattern variable Nev can not be determined based on the pattern constraints. HINT: certain constructs (e.g. negative patterns or check expressions) cannot output symbolic parameters.
> 	at org.eclipse.incquery.patternlanguage.emf.specification.SpecificationBuilder.getBodies(SpecificationBuilder.java:250)
> 	at org.eclipse.incquery.patternlanguage.emf.specification.SpecificationBuilder.buildBodies(SpecificationBuilder.java:232)
> 	at org.eclipse.incquery.patternlanguage.emf.specification.SpecificationBuilder.buildSpecification(SpecificationBuilder.java:196)
> 	at org.eclipse.incquery.patternlanguage.emf.specification.SpecificationBuilder.getOrCreateSpecification(SpecificationBuilder.java:155)
> 	at org.eclipse.incquery.tooling.ui.queryexplorer.util.QueryExplorerPatternRegistry.registerPatternModel(QueryExplorerPatternRegistry.java:129)
> 	at org.eclipse.incquery.tooling.ui.queryexplorer.handlers.RuntimeMatcherRegistrator.registerPatternsFromPatternModel(RuntimeMatcherRegistrator.java:113)
> 	at org.eclipse.incquery.tooling.ui.queryexplorer.handlers.RuntimeMatcherRegistrator.run(RuntimeMatcherRegistrator.java:71)
> 	... 26 more
> Caused by: org.eclipse.incquery.runtime.matchers.planning.QueryPlannerException: Impossible to match pattern: exported pattern variable Nev can not be determined based on the pattern constraints. HINT: certain constructs (e.g. negative patterns or check expressions) cannot output symbolic parameters.
> 	at org.eclipse.incquery.runtime.matchers.psystem.basicdeferred.ExportedParameter.checkSanity(ExportedParameter.java:76)
> 	at org.eclipse.incquery.runtime.matchers.psystem.PBodyNormalizer.checkSanity(PBodyNormalizer.java:127)
> 	at org.eclipse.incquery.runtime.matchers.psystem.PBodyNormalizer.normalizeBody(PBodyNormalizer.java:58)
> 	at org.eclipse.incquery.patternlanguage.emf.specification.SpecificationBuilder.getBodies(SpecificationBuilder.java:246)
> 	... 32 more
> 
> 
> - encountered after previous problem:
> 
> ENTRY org.eclipse.ui 4 0 2014-02-16 11:15:44.687
> !MESSAGE Unhandled event loop exception
> !STACK 0
> org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.IllegalStateException: Cannot edit query definition net.istvanrath.emfxcel.incquery.demo.CellInWorkSheet)
> 	at org.eclipse.swt.SWT.error(SWT.java:4397)
> 	at org.eclipse.swt.SWT.error(SWT.java:4312)
> 	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:138)
> 	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3976)
> 	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3653)
> 	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1113)
> 	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
> 	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:997)
> 	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:138)
> 	at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:610)
> 	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
> 	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:567)
> 	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
> 	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124)
> 	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
> 	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
> 	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
> 	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:354)
> 	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:181)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> 	at java.lang.reflect.Method.invoke(Method.java:597)
> 	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:636)
> 	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:591)
> 	at org.eclipse.equinox.launcher.Main.run(Main.java:1450)
> 	at org.eclipse.equinox.launcher.Main.main(Main.java:1426)
> Caused by: java.lang.IllegalStateException: Cannot edit query definition net.istvanrath.emfxcel.incquery.demo.CellInWorkSheet
> 	at com.google.common.base.Preconditions.checkState(Preconditions.java:145)
> 	at org.eclipse.incquery.runtime.api.impl.BaseQuerySpecification.checkMutability(BaseQuerySpecification.java:90)
> 	at org.eclipse.incquery.runtime.matchers.psystem.PBody.checkMutability(PBody.java:194)
> 	at org.eclipse.incquery.runtime.matchers.psystem.PBody.getOrCreateVariableByName(PBody.java:141)
> 	at org.eclipse.incquery.patternlanguage.emf.specification.builder.EPMToPBody.getPNode(EPMToPBody.java:158)
> 	at org.eclipse.incquery.patternlanguage.emf.specification.builder.EPMToPBody.preProcessParameters(EPMToPBody.java:211)
> 	at org.eclipse.incquery.patternlanguage.emf.specification.builder.EPMToPBody.toPBody(EPMToPBody.java:107)
> 	at org.eclipse.incquery.patternlanguage.emf.specification.SpecificationBuilder.getBodies(SpecificationBuilder.java:245)
> 	at org.eclipse.incquery.patternlanguage.emf.specification.SpecificationBuilder.buildBodies(SpecificationBuilder.java:232)
> 	at org.eclipse.incquery.patternlanguage.emf.specification.SpecificationBuilder.buildSpecification(SpecificationBuilder.java:196)
> 	at org.eclipse.incquery.patternlanguage.emf.specification.SpecificationBuilder.getOrCreateSpecification(SpecificationBuilder.java:155)
> 	at org.eclipse.incquery.tooling.ui.queryexplorer.util.QueryExplorerPatternRegistry.registerPatternModel(QueryExplorerPatternRegistry.java:129)
> 	at org.eclipse.incquery.tooling.ui.queryexplorer.handlers.RuntimeMatcherRegistrator.registerPatternsFromPatternModel(RuntimeMatcherRegistrator.java:113)
> 	at org.eclipse.incquery.tooling.ui.queryexplorer.handlers.RuntimeMatcherRegistrator.run(RuntimeMatcherRegistrator.java:71)
> 	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
> 	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
> 	... 24 more
> 
> 
> 
> 
> I have encountered some additional issues related to the tooling in general:
> 
> - the builder runs (in my gut feeling) far too frequently. This is especially noticeable if you have many IncQuery projects open. I have seen several instances where disabling autobuild, editing one project, and then re-enabling autobuild triggers a build on _all_ incquery projects, which is very annoying.
> 
> 
> - the cleaner is prone to weird exceptions such as
> 
> 1 [Worker-5] ERROR org.eclipse.incquery  - Exception during Normal Clean!
> java.lang.IllegalStateException: Inconsistent pattern declaration found. Expected net.istvanrath.emfxcel.incquery.demo.IITOnlabosHallgato, found net.istvanrath.emfxcel.incquery.demo.NemVetteFelAzOnlabot.
> 	at com.google.common.base.Preconditions.checkState(Preconditions.java:172)
> 	at org.eclipse.incquery.patternlanguage.emf.ui.builder.CleanSupport.internalNormalClean(CleanSupport.java:175)
> 	at org.eclipse.incquery.patternlanguage.emf.ui.builder.CleanSupport.normalClean(CleanSupport.java:149)
> 	at org.eclipse.incquery.patternlanguage.emf.ui.builder.EMFPatternLanguageBuilderParticipant.build(EMFPatternLanguageBuilderParticipant.java:125)
> 
> - when you edit an EIQ file, save it, and while you wait for the QE to refresh its contents, there is a weird inconsistent state which gets displayed where no patterns have matches yet. This is noticeable if you are working with large results sets where refresh operations are sufficiently slow. On a related note, didn’t we have a feature whereby the contents of large (1000+) result sets are cropped so the tree viewer is not a bottle neck? This seems to be gone, making working with complex examples a big pain.
> 
> We need to fix these ASAP.
> 
> cheers
> Istvan
> 
> 
> 
> Istvan Rath, PhD
> Research Fellow
> Fault Tolerant Systems Research Group
> Budapest University of Technology and Economics
> rath@xxxxxxxxxx
> 
> 
> 
> _______________________________________________
> incquery-dev mailing list
> incquery-dev@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/incquery-dev



Back to the top