From 40e18991f67fa616536c1e1ba25126d5cbb3eedd Mon Sep 17 00:00:00 2001 From: OszkarSemerath Date: Fri, 18 May 2018 18:24:34 +0200 Subject: Query parser update to current Viatra milestone --- .../application/execution/QueryLoader.xtend | 3 +- .../FamGeneration.vsconfig | 2 +- .../inputs/FamInstance.xmi | 2 + .../viatrasolver/logic2viatra/util/ParseUtil.xtend | 91 ++++++++++++++++++---- 4 files changed, 82 insertions(+), 16 deletions(-) diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/QueryLoader.xtend b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/QueryLoader.xtend index c25bfb07..8f8348b1 100644 --- a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/QueryLoader.xtend +++ b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/QueryLoader.xtend @@ -21,6 +21,7 @@ import org.eclipse.viatra.query.runtime.api.IQuerySpecification import org.eclipse.xtext.EcoreUtil2 import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* +import org.eclipse.viatra.query.patternlanguage.emf.vql.PatternCall class QueryLoader { //val parser = new VQLParser @@ -99,7 +100,7 @@ class QueryLoader { .map[constraints] .flatten .filter(PatternCompositionConstraint) - .map[call.patternRef].toSet + .map[(call as PatternCall).patternRef].toSet } def private referredEcoreModels(Set patterns) { diff --git a/Domains/Examples/ModelGenExampleFAM_standalone/FamGeneration.vsconfig b/Domains/Examples/ModelGenExampleFAM_standalone/FamGeneration.vsconfig index 166c551c..90bd5b2b 100644 --- a/Domains/Examples/ModelGenExampleFAM_standalone/FamGeneration.vsconfig +++ b/Domains/Examples/ModelGenExampleFAM_standalone/FamGeneration.vsconfig @@ -16,7 +16,7 @@ generate { } number = 5 - runs = 1 + runs = 5 debug = "platform:/resource/ModelGenExampleFAM_standalone/outputs/debug" log = "platform:/resource/ModelGenExampleFAM_standalone/outputs/log.txt" diff --git a/Domains/Examples/ModelGenExampleFAM_standalone/inputs/FamInstance.xmi b/Domains/Examples/ModelGenExampleFAM_standalone/inputs/FamInstance.xmi index f91e0af0..1d9aeae4 100644 --- a/Domains/Examples/ModelGenExampleFAM_standalone/inputs/FamInstance.xmi +++ b/Domains/Examples/ModelGenExampleFAM_standalone/inputs/FamInstance.xmi @@ -5,4 +5,6 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:functionalarchitecture="http://www.inf.mit.bme.hu/viatrasolver/example/fam" xsi:schemaLocation="http://www.inf.mit.bme.hu/viatrasolver/example/fam FamMetamodel.ecore"> + diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/util/ParseUtil.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/util/ParseUtil.xtend index 6febe0a6..00342d8b 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/util/ParseUtil.xtend +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/util/ParseUtil.xtend @@ -1,53 +1,92 @@ package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.util +import com.google.inject.Binder import com.google.inject.Guice import com.google.inject.Injector import com.google.inject.Module +import com.google.inject.multibindings.Multibinder +import com.google.inject.name.Names import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.LogiclanguagePackage import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicproblemPackage import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialinterpretationPackage import java.io.ByteArrayInputStream import java.io.InputStream import java.util.LinkedHashMap +import java.util.LinkedList +import java.util.List import org.eclipse.emf.common.util.URI +import org.eclipse.emf.ecore.EClassifier +import org.eclipse.emf.ecore.EObject +import org.eclipse.emf.ecore.EPackage import org.eclipse.emf.ecore.resource.Resource +import org.eclipse.emf.ecore.resource.ResourceSet import org.eclipse.emf.ecore.util.EcoreUtil -import org.eclipse.viatra.query.patternlanguage.emf.EMFPatternLanguageRuntimeModule import org.eclipse.viatra.query.patternlanguage.emf.EMFPatternLanguageStandaloneSetup -import org.eclipse.viatra.query.patternlanguage.emf.GenmodelExtensionLoader -import org.eclipse.viatra.query.patternlanguage.emf.IGenmodelMappingLoader +import org.eclipse.viatra.query.patternlanguage.emf.EMFPatternLanguageStandaloneSetup.StandaloneParserWithSeparateModules +import org.eclipse.viatra.query.patternlanguage.emf.scoping.BaseMetamodelProviderService +import org.eclipse.viatra.query.patternlanguage.emf.scoping.EMFPatternLanguageImportNamespaceProvider +import org.eclipse.viatra.query.patternlanguage.emf.scoping.IMetamodelProvider +import org.eclipse.viatra.query.patternlanguage.emf.scoping.IMetamodelProviderInstance import org.eclipse.viatra.query.patternlanguage.emf.specification.SpecificationBuilder import org.eclipse.viatra.query.patternlanguage.emf.vql.PatternModel +import org.eclipse.xtext.resource.IResourceFactory +import org.eclipse.xtext.resource.IResourceServiceProvider import org.eclipse.xtext.resource.XtextResourceSet +import org.eclipse.xtext.scoping.IScopeProvider +import org.eclipse.xtext.scoping.impl.AbstractDeclarativeScopeProvider -class MyModule extends EMFPatternLanguageRuntimeModule implements Module{ +class MyModule extends StandaloneParserWithSeparateModules implements Module{ // def public Class bindAnnotationValidatorLoader() { // return typeof(ExtensionBasedAnnotationValidatorLoader); // } - def public Class bindGenmodelMappingLoader() { - return typeof(GenmodelExtensionLoader); +// def public Class bindGenmodelMappingLoader() { +// return typeof(GenmodelExtensionLoader); +// } + + override configureIScopeProviderDelegate(Binder binder) { + binder.bind(IScopeProvider).annotatedWith(Names.named(AbstractDeclarativeScopeProvider.NAMED_DELEGATE)) + .to(EMFPatternLanguageImportNamespaceProvider); + // .to(XImportSectionNamespaceScopeProvider.class); + //val Multibinder metamodelProviderBinder = + Multibinder::newSetBinder(binder, IMetamodelProviderInstance); +// metamodelProviderBinder.addBinding().to(MetamodelProviderService.class); +// metamodelProviderBinder.addBinding().to(ResourceSetMetamodelProviderService.class); } + + override Class bindIMetamodelProvider() { + MetamodelProviderForModelGeneration + } +// def configureFixedMetamodelProviderService(FixedMetamodelProviderService s) { +// println('''Configured «s.class.simpleName» with «s.packages.toList»''') +// s.packages += PartialinterpretationPackage.eINSTANCE +// s.packages += LogicproblemPackage.eINSTANCE +// s.packages += LogiclanguagePackage.eINSTANCE +// println('''Configured «s.class.simpleName» with «s.packages.toList»''') +// } } class ParseUtil { val Injector injector; new() { - EMFPatternLanguageStandaloneSetup.doSetup; + //EMFPatternLanguageStandaloneSetup.doSetup; PartialinterpretationPackage.eINSTANCE.class; LogicproblemPackage.eINSTANCE.class; LogiclanguagePackage.eINSTANCE.class; injector = internalCreateInjector//(new EMFPatternLanguageStandaloneSetup()).createInjectorAndDoEMFRegistration(); + + val IResourceFactory resourceFactory = injector.getInstance(IResourceFactory); + val IResourceServiceProvider serviceProvider = injector.getInstance(IResourceServiceProvider); + + Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("vql_deactivated", resourceFactory); + IResourceServiceProvider.Registry.INSTANCE.getExtensionToFactoryMap().put("vql_deactivated", serviceProvider); } def protected Injector internalCreateInjector() { var newInjector = new EMFPatternLanguageStandaloneSetup().createInjectorAndDoEMFRegistration(); - //XXX the following line enforce the tests to be run in an Eclipse environment - val Module module = new MyModule - newInjector = Guice.createInjector(module) - //ViatraQueryLoggingUtil.setExternalLogger(newInjector.getInstance(Logger.class)); - //EMFPatternLanguagePlugin.getInstance().addCompoundInjector(newInjector,EMFPatternLanguagePlugin.TEST_INJECTOR_PRIORITY); - return newInjector; + val Module module = new MyModule + newInjector = Guice.createInjector(module) + return newInjector; } // @Inject @@ -57,7 +96,7 @@ class ParseUtil { public def parse(CharSequence vqlFileContent) { //val patternModel = this.parseHelper.parse(vqlFileContent) val XtextResourceSet resourceSet = injector.getInstance(XtextResourceSet); - val Resource resource = resourceSet.createResource(URI.createURI("dummy:/example.vql")); + val Resource resource = resourceSet.createResource(URI.createURI("dummy:/example.vql_deactivated")); val InputStream in = new ByteArrayInputStream(vqlFileContent.toString.getBytes()); resource.load(in, resourceSet.getLoadOptions()); val patternModel = resource.getContents().get(0) as PatternModel; @@ -82,4 +121,28 @@ class ParseUtil { println('''------------''') } } +} + +abstract class FixedMetamodelProviderService extends BaseMetamodelProviderService { + + protected val List packages = new LinkedList + + override protected doGetQualifiedClassName(EClassifier classifier, EObject context) { + classifier.name + } + + override protected getProvidedMetamodels() { + return packages.map[it.nsURI] + } + + override loadEPackage(String uri, ResourceSet resourceSet) { + packages.filter[it.nsURI.equals(uri)].head + } +} +class MetamodelProviderForModelGeneration extends FixedMetamodelProviderService { + new() { + packages += PartialinterpretationPackage.eINSTANCE + packages += LogicproblemPackage.eINSTANCE + packages += LogiclanguagePackage.eINSTANCE + } } \ No newline at end of file -- cgit v1.2.3-70-g09d2