viatra / EMF-IncQuery

This repository is only kept for historic reasons. All development happens on eclipse.org
http://eclipse.org/viatra
13 stars 4 forks source link

ClassCircularityError when using generated code in RCP application #263

Closed izsob closed 12 years ago

izsob commented 12 years ago

EMF-IncQuery throws ClassCircularityError when the first line is commented:

// IncQueryEngine.getDefaultLogger();
patternMatcher = PosLengthMatcher.factory().getMatcher(resourceSet);

Workaround: uncomment the getDefaultLogger() call.

Stack trace:

!ENTRY org.eclipse.osgi 4 0 2012-08-06 19:17:57.174
!MESSAGE An error occurred while automatically activating bundle org.eclipse.viatra2.emf.incquery.runtime (485).
!STACK 0
org.osgi.framework.BundleException: Exception in org.eclipse.viatra2.emf.incquery.runtime.IncQueryRuntimePlugin.start() of bundle org.eclipse.viatra2.emf.incquery.runtime.
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:734)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683)
    at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381)
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:300)
    at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:440)
    at org.eclipse.osgi.internal.loader.BundleLoader.setLazyTrigger(BundleLoader.java:263)
    at org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:107)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:469)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216)
    at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:395)
    at org.eclipse.osgi.internal.loader.SingleSourcePackage.loadClass(SingleSourcePackage.java:35)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:461)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:188)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClassHoldingLock(ClasspathManager.java:632)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:614)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:568)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:492)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:465)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216)
    at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:395)
    at org.eclipse.osgi.internal.loader.SingleSourcePackage.loadClass(SingleSourcePackage.java:35)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:461)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at hu.bme.mit.train.cc.incQuery.interleaved.TestCasePosLength_IncQuery.loadModel(TestCasePosLength_IncQuery.java:64)
    at hu.bme.mit.train.scenarios.ModelXFormScenario.runLogic(ModelXFormScenario.java:56)
    at hu.bme.mit.train.scenarios.ModelXFormScenario.runBenchmark(ModelXFormScenario.java:48)
    at hu.bme.mit.train.scenarios.GenericBenchmarkLogic.runBenchmarks(GenericBenchmarkLogic.java:25)
    at hu.bme.mit.train.cc.nativ.Main.main(Main.java:9)
    at hu.bme.mit.train.cc.nativ.BenchmarkIApplication.start(BenchmarkIApplication.java:11)
    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:353)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180)
    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:629)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1438)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1414)
Caused by: java.lang.ClassCircularityError: org/eclipse/viatra2/emf/incquery/runtime/api/IncQueryMatcher
    at switchset.SwitchSetMatcherFactory$Provider.get(SwitchSetMatcherFactory.java:56)
    at switchset.SwitchSetMatcherFactory$Provider.get(SwitchSetMatcherFactory.java:1)
    at org.eclipse.viatra2.emf.incquery.runtime.extensibility.MatcherFactoryRegistry.initRegistry(MatcherFactoryRegistry.java:78)
    at org.eclipse.viatra2.emf.incquery.runtime.IncQueryRuntimePlugin.start(IncQueryRuntimePlugin.java:47)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702)
    ... 51 more
Root exception:
java.lang.ClassCircularityError: org/eclipse/viatra2/emf/incquery/runtime/api/IncQueryMatcher
    at switchset.SwitchSetMatcherFactory$Provider.get(SwitchSetMatcherFactory.java:56)
    at switchset.SwitchSetMatcherFactory$Provider.get(SwitchSetMatcherFactory.java:1)
    at org.eclipse.viatra2.emf.incquery.runtime.extensibility.MatcherFactoryRegistry.initRegistry(MatcherFactoryRegistry.java:78)
    at org.eclipse.viatra2.emf.incquery.runtime.IncQueryRuntimePlugin.start(IncQueryRuntimePlugin.java:47)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683)
    at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381)
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:300)
    at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:440)
    at org.eclipse.osgi.internal.loader.BundleLoader.setLazyTrigger(BundleLoader.java:263)
    at org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:107)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:469)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216)
    at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:395)
    at org.eclipse.osgi.internal.loader.SingleSourcePackage.loadClass(SingleSourcePackage.java:35)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:461)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:188)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClassHoldingLock(ClasspathManager.java:632)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:614)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:568)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:492)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:465)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216)
    at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:395)
    at org.eclipse.osgi.internal.loader.SingleSourcePackage.loadClass(SingleSourcePackage.java:35)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:461)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at hu.bme.mit.train.cc.incQuery.interleaved.TestCasePosLength_IncQuery.loadModel(TestCasePosLength_IncQuery.java:64)
    at hu.bme.mit.train.scenarios.ModelXFormScenario.runLogic(ModelXFormScenario.java:56)
    at hu.bme.mit.train.scenarios.ModelXFormScenario.runBenchmark(ModelXFormScenario.java:48)
    at hu.bme.mit.train.scenarios.GenericBenchmarkLogic.runBenchmarks(GenericBenchmarkLogic.java:25)
    at hu.bme.mit.train.cc.nativ.Main.main(Main.java:9)
    at hu.bme.mit.train.cc.nativ.BenchmarkIApplication.start(BenchmarkIApplication.java:11)
    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:353)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180)
    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:629)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1438)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1414)

!ENTRY org.eclipse.osgi 4 0 2012-08-06 19:17:57.189
!MESSAGE Application error
!STACK 1
java.lang.NoClassDefFoundError: org/eclipse/viatra2/emf/incquery/runtime/api/IncQueryMatcher
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:188)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClassHoldingLock(ClasspathManager.java:632)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:614)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:568)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:492)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:465)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216)
    at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:395)
    at org.eclipse.osgi.internal.loader.SingleSourcePackage.loadClass(SingleSourcePackage.java:35)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:461)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at hu.bme.mit.train.cc.incQuery.interleaved.TestCasePosLength_IncQuery.loadModel(TestCasePosLength_IncQuery.java:64)
    at hu.bme.mit.train.scenarios.ModelXFormScenario.runLogic(ModelXFormScenario.java:56)
    at hu.bme.mit.train.scenarios.ModelXFormScenario.runBenchmark(ModelXFormScenario.java:48)
    at hu.bme.mit.train.scenarios.GenericBenchmarkLogic.runBenchmarks(GenericBenchmarkLogic.java:25)
    at hu.bme.mit.train.cc.nativ.Main.main(Main.java:9)
    at hu.bme.mit.train.cc.nativ.BenchmarkIApplication.start(BenchmarkIApplication.java:11)
    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:353)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180)
    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:629)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1438)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1414)
Caused by: org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter$TerminatingClassNotFoundException: An error occurred while automatically activating bundle org.eclipse.viatra2.emf.incquery.runtime (485).
    at org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:122)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:469)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216)
    at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:395)
    at org.eclipse.osgi.internal.loader.SingleSourcePackage.loadClass(SingleSourcePackage.java:35)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:461)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    ... 36 more
Caused by: org.osgi.framework.BundleException: Exception in org.eclipse.viatra2.emf.incquery.runtime.IncQueryRuntimePlugin.start() of bundle org.eclipse.viatra2.emf.incquery.runtime.
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:734)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683)
    at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381)
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:300)
    at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:440)
    at org.eclipse.osgi.internal.loader.BundleLoader.setLazyTrigger(BundleLoader.java:263)
    at org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:107)
    ... 45 more
Caused by: java.lang.ClassCircularityError: org/eclipse/viatra2/emf/incquery/runtime/api/IncQueryMatcher
    at switchset.SwitchSetMatcherFactory$Provider.get(SwitchSetMatcherFactory.java:56)
    at switchset.SwitchSetMatcherFactory$Provider.get(SwitchSetMatcherFactory.java:1)
    at org.eclipse.viatra2.emf.incquery.runtime.extensibility.MatcherFactoryRegistry.initRegistry(MatcherFactoryRegistry.java:78)
    at org.eclipse.viatra2.emf.incquery.runtime.IncQueryRuntimePlugin.start(IncQueryRuntimePlugin.java:47)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702)
    ... 51 more
istvanrath commented 12 years ago

Lovely!

bergmanngabor commented 12 years ago

Anatomy: unless we initialize the IQRuntime first as a workaround (such as by the logger invocation), calling generated code will

Is this an Eclipse 4 "feature"? If yes, then E4 is really weirdly broken.

How do we fix this? Isolate the matcher registry and associated services to a separate bundle?

istvanrath commented 12 years ago

I think this is a severe issue which needs to be fixed before any public "release".

istvanrath commented 12 years ago

@bergmanngabor , could you implement a lazy loading scheme as discussed with @ujhelyiz on skype?

bergmanngabor commented 12 years ago

@izsob can you please try again whether the issue can be reproduced with the newest version?

izsob commented 12 years ago

The issue can be reproduced with version 0.6.0.201208091120.

ujhelyiz commented 12 years ago

Did you use the update site version? That has finished only at 13:45...

istvanrath commented 12 years ago

@izsob please try again with the most current build.

izsob commented 12 years ago

I use the CI update site, and now I could update to another version: 0.6.0.201208091147 Now I can not reproduce the issue.

bergmanngabor commented 12 years ago

Then let's assume it was fixed.

istvanrath commented 12 years ago

Please run whathever tests we have manually before release.

bergmanngabor commented 12 years ago

I have run the school and ecorequery tests. The original tests using the generic API were extended with alternative versions using the generated matcher factories (although none of the pattern-specific generated methods are tested yet).

izsob commented 12 years ago

although none of the pattern-specific generated methods are tested yet

We use pattern-specific generated methods and they run.