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

Error handling: avoid NPE and add explicit check for non-supported standalone execution #222

Closed istvanrath closed 12 years ago

istvanrath commented 12 years ago

As this issue has already come up internally (Bence) and externally (Javier), I think that the IncQuery runtime should be better prepared to detect and signal that the user is attempting to execute IncQuery code in an unsupported standalone configuration.

The associated stack trace is as follows:

java.lang.NullPointerException
    at org.eclipse.viatra2.emf.incquery.runtime.util.XmiModelUtil.getGlobalXmiResource(XmiModelUtil.java:33)
    at org.eclipse.viatra2.emf.incquery.runtime.api.impl.BaseGeneratedMatcherFactory.getModelRoot(BaseGeneratedMatcherFactory.java:96)
    at org.eclipse.viatra2.emf.incquery.runtime.api.impl.BaseGeneratedMatcherFactory.parsePattern(BaseGeneratedMatcherFactory.java:62)
    at org.eclipse.viatra2.emf.incquery.runtime.api.impl.BaseGeneratedMatcherFactory.getPattern(BaseGeneratedMatcherFactory.java:44)
    at org.eclipse.viatra2.emf.incquery.runtime.api.impl.BaseGeneratedMatcher.<init>(BaseGeneratedMatcher.java:37)
    at grabats.grabats.GrabatsMatcher.<init>(GrabatsMatcher.java:64)
    at grabats.grabats.GrabatsMatcher.<init>(GrabatsMatcher.java:52)
    at es.modelum.test.Test.testGrabatsXMIIncQuery(Test.java:938)
    at es.modelum.test.Test.main(Test.java:192)
Exception in thread "main" java.lang.NullPointerException
    at org.eclipse.viatra2.emf.incquery.runtime.internal.matcherbuilder.EPMBuilder.getPosMapping(EPMBuilder.java:78)
    at org.eclipse.viatra2.emf.incquery.runtime.internal.matcherbuilder.EPMBuilder.getPosMapping(EPMBuilder.java:1)
    at org.eclipse.viatra2.gtasm.patternmatcher.incremental.rete.boundary.ReteBoundary.createProductionInternal(ReteBoundary.java:505)
    at org.eclipse.viatra2.gtasm.patternmatcher.incremental.rete.construction.ReteContainerBuildable.patternCollector(ReteContainerBuildable.java:277)
    at org.eclipse.viatra2.gtasm.patternmatcher.incremental.rete.construction.ReteContainerBuildable.patternCollector(ReteContainerBuildable.java:1)
    at org.eclipse.viatra2.emf.incquery.runtime.internal.matcherbuilder.EPMBuildScaffold.construct(EPMBuildScaffold.java:47)
    at org.eclipse.viatra2.emf.incquery.runtime.internal.matcherbuilder.EPMBuilder.construct(EPMBuilder.java:69)
    at org.eclipse.viatra2.emf.incquery.runtime.internal.matcherbuilder.EPMBuilder.construct(EPMBuilder.java:1)
    at org.eclipse.viatra2.gtasm.patternmatcher.incremental.rete.boundary.ReteBoundary.construct(ReteBoundary.java:550)
    at org.eclipse.viatra2.gtasm.patternmatcher.incremental.rete.boundary.ReteBoundary.accessProduction(ReteBoundary.java:483)
    at org.eclipse.viatra2.gtasm.patternmatcher.incremental.rete.matcher.ReteEngine.accessMatcher(ReteEngine.java:182)
    at org.eclipse.viatra2.emf.incquery.runtime.api.impl.BaseGeneratedMatcher.accessMatcher(BaseGeneratedMatcher.java:43)
    at org.eclipse.viatra2.emf.incquery.runtime.api.impl.BaseGeneratedMatcher.<init>(BaseGeneratedMatcher.java:37)
    at grabats.grabats.GrabatsMatcher.<init>(GrabatsMatcher.java:64)
    at grabats.grabats.GrabatsMatcher.<init>(GrabatsMatcher.java:52)
    at es.modelum.test.Test.testGrabatsXMIIncQuery(Test.java:938)
    at es.modelum.test.Test.main(Test.java:192)
ujhelyiz commented 12 years ago

Check Platform.isRunning() and do not start in case of false.

bergmanngabor commented 12 years ago

I think I have done my part, but it would be nice if someone with a standalone configuration could check how well the new error barriers work.

bergmanngabor commented 12 years ago

I've asked Bence to take a look at it.

ujhelyiz commented 12 years ago

Based on the feedback of @izsob I updated the error message.