aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeModule.xtendbinbin1700 -> 1700 bytes
-rw-r--r--Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeSetup.xtendbinbin2525 -> 2525 bytes
-rw-r--r--Application/hu.bme.mit.inf.dslreasoner.application.ui/META-INF/MANIFEST.MF3
-rw-r--r--Application/hu.bme.mit.inf.dslreasoner.application.ui/plugin.xml2
-rw-r--r--Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/execute/ExecuteScriptHandler.java13
-rw-r--r--Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/GenerationTaskExecutor.xtend6
-rw-r--r--Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/PatternLanguageWithRSSetup.xtend6
-rw-r--r--Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/ScriptExecutor.xtend14
-rw-r--r--Application/hu.bme.mit.inf.dslreasoner.application/start-standalone.launch21
-rw-r--r--Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/ui/syntaxcoloring/.SolverSemanticHighlightCalculator.xtendbinbin5333 -> 5333 bytes
-rw-r--r--Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/ui/syntaxcoloring/.SolverSemanticTextAttributeProvider.xtendbinbin4902 -> 4902 bytes
-rw-r--r--Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/validation/.SolverLanguageValidator.xtendbinbin1716 -> 1716 bytes
-rw-r--r--Application/org.eclipse.viatra.solver.language/xtend-gen/org/eclipse/viatra/solver/language/parser/antlr/.SolverLanguageTokenDefInjectingParser.xtendbinbin2741 -> 2741 bytes
-rw-r--r--Application/org.eclipse.viatra.solver.language/xtend-gen/org/eclipse/viatra/solver/language/serializer/.SolverLanguageSyntheticTokenSyntacticSequencer.xtendbinbin2757 -> 2757 bytes
-rw-r--r--Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.CloseTrainsObjectiveHint.xtendbinbin9041 -> 9041 bytes
-rw-r--r--Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.EndOfSidingObjectiveHint.xtendbinbin7847 -> 7847 bytes
-rw-r--r--Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.MisalignedTurnoutObjectiveHint.xtendbinbin8001 -> 8001 bytes
-rw-r--r--Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.Modes3ModelGenerator.xtendbinbin21531 -> 21529 bytes
-rw-r--r--Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.Modes3TypeScopeHint.xtendbinbin7185 -> 7185 bytes
-rw-r--r--Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.Modes3UnitPropagationGenerator.xtendbinbin11735 -> 11735 bytes
-rw-r--r--Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.TrainLocationsObjectiveHint.xtendbinbin6665 -> 6665 bytes
-rw-r--r--Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Constraint2Logic.xtend19
-rw-r--r--Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Viatra2Logic.xtend11
-rw-r--r--Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Viatra2LogicTypeInferer.xtend322
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/util/ParseUtil.xtend33
25 files changed, 234 insertions, 216 deletions
diff --git a/Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeModule.xtendbin b/Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeModule.xtendbin
index b0ce2497..1c86e38f 100644
--- a/Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeModule.xtendbin
+++ b/Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeModule.xtendbin
Binary files differ
diff --git a/Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeSetup.xtendbin b/Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeSetup.xtendbin
index b69f4fca..57c8ab25 100644
--- a/Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeSetup.xtendbin
+++ b/Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeSetup.xtendbin
Binary files differ
diff --git a/Application/hu.bme.mit.inf.dslreasoner.application.ui/META-INF/MANIFEST.MF b/Application/hu.bme.mit.inf.dslreasoner.application.ui/META-INF/MANIFEST.MF
index 38bb7dbd..2f2c83ef 100644
--- a/Application/hu.bme.mit.inf.dslreasoner.application.ui/META-INF/MANIFEST.MF
+++ b/Application/hu.bme.mit.inf.dslreasoner.application.ui/META-INF/MANIFEST.MF
@@ -22,7 +22,8 @@ Require-Bundle: hu.bme.mit.inf.dslreasoner.application,
22 org.eclipse.xtext.builder, 22 org.eclipse.xtext.builder,
23 org.eclipse.xtend.lib;bundle-version="2.14.0";resolution:=optional, 23 org.eclipse.xtend.lib;bundle-version="2.14.0";resolution:=optional,
24 org.eclipse.xtext.xbase.lib;bundle-version="2.14.0", 24 org.eclipse.xtext.xbase.lib;bundle-version="2.14.0",
25 org.eclipse.viatra.addon.validation.runtime.ui;bundle-version="1.7.0" 25 org.eclipse.viatra.addon.validation.runtime.ui;bundle-version="1.7.0",
26 org.eclipse.viatra.query.patternlanguage.emf.ui;bundle-version="2.4.1"
26Import-Package: org.apache.log4j 27Import-Package: org.apache.log4j
27Bundle-RequiredExecutionEnvironment: JavaSE-1.8 28Bundle-RequiredExecutionEnvironment: JavaSE-1.8
28Export-Package: hu.bme.mit.inf.dslreasoner.application.ui.quickfix, 29Export-Package: hu.bme.mit.inf.dslreasoner.application.ui.quickfix,
diff --git a/Application/hu.bme.mit.inf.dslreasoner.application.ui/plugin.xml b/Application/hu.bme.mit.inf.dslreasoner.application.ui/plugin.xml
index 304df098..2895983e 100644
--- a/Application/hu.bme.mit.inf.dslreasoner.application.ui/plugin.xml
+++ b/Application/hu.bme.mit.inf.dslreasoner.application.ui/plugin.xml
@@ -410,7 +410,7 @@
410 <extension 410 <extension
411 point="org.eclipse.ui.commands"> 411 point="org.eclipse.ui.commands">
412 <command 412 <command
413 defaultHandler="hu.bme.mit.inf.dslreasoner.application.ui.execute.ExecuteScriptHandler" 413 defaultHandler="org.eclipse.viatra.query.patternlanguage.emf.ui.ReusablePatternLanguageExecutableExtensionFactory:hu.bme.mit.inf.dslreasoner.application.ui.execute.ExecuteScriptHandler"
414 id="hu.bme.mit.inf.dslreasoner.application.ui.executescript" 414 id="hu.bme.mit.inf.dslreasoner.application.ui.executescript"
415 name="ExecuteScript"> 415 name="ExecuteScript">
416 </command> 416 </command>
diff --git a/Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/execute/ExecuteScriptHandler.java b/Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/execute/ExecuteScriptHandler.java
index 380410d0..8d9d07a6 100644
--- a/Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/execute/ExecuteScriptHandler.java
+++ b/Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/execute/ExecuteScriptHandler.java
@@ -12,14 +12,23 @@ import org.eclipse.jface.viewers.ISelection;
12import org.eclipse.jface.viewers.StructuredSelection; 12import org.eclipse.jface.viewers.StructuredSelection;
13import org.eclipse.ui.handlers.HandlerUtil; 13import org.eclipse.ui.handlers.HandlerUtil;
14 14
15import com.google.inject.Inject;
16import com.google.inject.Injector;
17
15import hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor; 18import hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor;
16 19
17public class ExecuteScriptHandler extends AbstractHandler implements IHandler { 20public class ExecuteScriptHandler extends AbstractHandler implements IHandler {
18 21
19 ScriptExecutor scriptExecutor = new ScriptExecutor(RuntimeConsoleBasedScriptConsole.FACTORY); 22 ScriptExecutor scriptExecutor;
23
24 @Inject
25 public void setInjector(Injector injector) {
26 scriptExecutor = new ScriptExecutor(RuntimeConsoleBasedScriptConsole.FACTORY, injector);
27 }
20 28
21 @Override 29 @Override
22 public Object execute(ExecutionEvent event) throws ExecutionException { 30 public Object execute(ExecutionEvent event) throws ExecutionException {
31 assert scriptExecutor != null : "Injector must be set";
23 ISelection selection = HandlerUtil.getCurrentSelection(event); 32 ISelection selection = HandlerUtil.getCurrentSelection(event);
24 if(selection instanceof StructuredSelection) { 33 if(selection instanceof StructuredSelection) {
25 StructuredSelection structuredSelection = (StructuredSelection) selection; 34 StructuredSelection structuredSelection = (StructuredSelection) selection;
diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/GenerationTaskExecutor.xtend b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/GenerationTaskExecutor.xtend
index c3ba9f81..d718bb91 100644
--- a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/GenerationTaskExecutor.xtend
+++ b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/GenerationTaskExecutor.xtend
@@ -1,5 +1,6 @@
1package hu.bme.mit.inf.dslreasoner.application.execution 1package hu.bme.mit.inf.dslreasoner.application.execution
2 2
3import com.google.inject.Injector
3import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigurationScript 4import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigurationScript
4import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.GenerationTask 5import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.GenerationTask
5import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic 6import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic
@@ -24,7 +25,9 @@ import java.util.LinkedList
24import java.util.Optional 25import java.util.Optional
25import org.eclipse.core.runtime.IProgressMonitor 26import org.eclipse.core.runtime.IProgressMonitor
26import org.eclipse.emf.common.util.URI 27import org.eclipse.emf.common.util.URI
28import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor
27 29
30@FinalFieldsConstructor
28class GenerationTaskExecutor { 31class GenerationTaskExecutor {
29 val metamodelLoader = new MetamodelLoader 32 val metamodelLoader = new MetamodelLoader
30 val modelLoader = new ModelLoader 33 val modelLoader = new ModelLoader
@@ -32,6 +35,7 @@ class GenerationTaskExecutor {
32 val solverLoader = new SolverLoader 35 val solverLoader = new SolverLoader
33 val scopeLoader = new ScopeLoader 36 val scopeLoader = new ScopeLoader
34 val statisticsUtil = new StatisticSections2CSV 37 val statisticsUtil = new StatisticSections2CSV
38 val Injector injector
35 39
36 def executeGenerationTask( 40 def executeGenerationTask(
37 GenerationTask task, 41 GenerationTask task,
@@ -102,7 +106,7 @@ class GenerationTaskExecutor {
102 var domain2LogicTransformationTime = System.nanoTime 106 var domain2LogicTransformationTime = System.nanoTime
103 val Ecore2Logic ecore2Logic = new Ecore2Logic 107 val Ecore2Logic ecore2Logic = new Ecore2Logic
104 val Logic2Ecore logic2Ecore = new Logic2Ecore(ecore2Logic) 108 val Logic2Ecore logic2Ecore = new Logic2Ecore(ecore2Logic)
105 val Viatra2Logic viatra2Logic = new Viatra2Logic(ecore2Logic) 109 val Viatra2Logic viatra2Logic = new Viatra2Logic(ecore2Logic, injector)
106 val InstanceModel2Logic instanceModel2Logic = new InstanceModel2Logic 110 val InstanceModel2Logic instanceModel2Logic = new InstanceModel2Logic
107 111
108 var modelGeneration = ecore2Logic.transformMetamodel(metamodelDescriptor,new Ecore2LogicConfiguration()) 112 var modelGeneration = ecore2Logic.transformMetamodel(metamodelDescriptor,new Ecore2LogicConfiguration())
diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/PatternLanguageWithRSSetup.xtend b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/PatternLanguageWithRSSetup.xtend
index c209cde5..371f6f8c 100644
--- a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/PatternLanguageWithRSSetup.xtend
+++ b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/PatternLanguageWithRSSetup.xtend
@@ -1,11 +1,7 @@
1package hu.bme.mit.inf.dslreasoner.application.execution 1package hu.bme.mit.inf.dslreasoner.application.execution
2 2
3import org.eclipse.viatra.query.patternlanguage.emf.EMFPatternLanguageStandaloneSetupGenerated
4import com.google.inject.Injector
5import com.google.inject.Guice 3import com.google.inject.Guice
6import org.eclipse.viatra.query.patternlanguage.emf.EMFPatternLanguageRuntimeModule 4import com.google.inject.Injector
7import com.google.inject.Guice;
8import com.google.inject.Injector;
9import org.eclipse.viatra.query.patternlanguage.emf.EMFPatternLanguageStandaloneSetup 5import org.eclipse.viatra.query.patternlanguage.emf.EMFPatternLanguageStandaloneSetup
10 6
11class PatternLanguageWithRSSetup extends EMFPatternLanguageStandaloneSetup{ 7class PatternLanguageWithRSSetup extends EMFPatternLanguageStandaloneSetup{
diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/ScriptExecutor.xtend b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/ScriptExecutor.xtend
index 3dea677f..9d0985d2 100644
--- a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/ScriptExecutor.xtend
+++ b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/ScriptExecutor.xtend
@@ -1,5 +1,7 @@
1package hu.bme.mit.inf.dslreasoner.application.execution 1package hu.bme.mit.inf.dslreasoner.application.execution
2 2
3import com.google.inject.Inject
4import com.google.inject.Injector
3import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigReference 5import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigReference
4import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigSpecification 6import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigSpecification
5import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigurationScript 7import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigurationScript
@@ -33,11 +35,19 @@ import org.eclipse.core.runtime.jobs.Job
33import org.eclipse.emf.common.util.URI 35import org.eclipse.emf.common.util.URI
34import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor 36import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor
35 37
36@FinalFieldsConstructor
37class ScriptExecutor { 38class ScriptExecutor {
38 val parser = new ApplicationConfigurationParser 39 val parser = new ApplicationConfigurationParser
39 40
40 val ScriptConsole.Factory scriptConsoleFactory 41 val ScriptConsole.Factory scriptConsoleFactory
42 val Injector injector
43
44 @FinalFieldsConstructor
45 new() {
46 }
47
48 new(ScriptConsole.Factory scriptConsoleFactory) {
49 this(scriptConsoleFactory, null)
50 }
41 51
42 /** 52 /**
43 * Executes a script 53 * Executes a script
@@ -101,7 +111,7 @@ class ScriptExecutor {
101 } 111 }
102 112
103 def dispatch void execute(GenerationTask task, IProgressMonitor monitor) { 113 def dispatch void execute(GenerationTask task, IProgressMonitor monitor) {
104 val generationTaskExecutor = new GenerationTaskExecutor 114 val generationTaskExecutor = new GenerationTaskExecutor(injector)
105 generationTaskExecutor.executeGenerationTask(task,this,scriptConsoleFactory,monitor) 115 generationTaskExecutor.executeGenerationTask(task,this,scriptConsoleFactory,monitor)
106 } 116 }
107 117
diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/start-standalone.launch b/Application/hu.bme.mit.inf.dslreasoner.application/start-standalone.launch
index 1f3744a7..437bc6e2 100644
--- a/Application/hu.bme.mit.inf.dslreasoner.application/start-standalone.launch
+++ b/Application/hu.bme.mit.inf.dslreasoner.application/start-standalone.launch
@@ -1,12 +1,15 @@
1<?xml version="1.0" encoding="UTF-8" standalone="no"?> 1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication"> 2<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
3<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"> 3 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
4<listEntry value="/hu.bme.mit.inf.dslreasoner.application/xtend-gen/hu/bme/mit/inf/dslreasoner/application/execution/StandaloneScriptExecutor.java"/> 4 <listEntry value="/hu.bme.mit.inf.dslreasoner.application/xtend-gen/hu/bme/mit/inf/dslreasoner/application/execution/StandaloneScriptExecutor.java"/>
5</listAttribute> 5 </listAttribute>
6<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"> 6 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
7<listEntry value="1"/> 7 <listEntry value="1"/>
8</listAttribute> 8 </listAttribute>
9<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="hu.bme.mit.inf.dslreasoner.application.execution.StandaloneScriptExecutor"/> 9 <booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_CLASSPATH_ONLY_JAR" value="false"/>
10<stringAttribute key="org.eclipse.jdt.launching.MODULE_NAME" value="hu.bme.mit.inf.dslreasoner.application"/> 10 <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="hu.bme.mit.inf.dslreasoner.application.execution.StandaloneScriptExecutor"/>
11<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="hu.bme.mit.inf.dslreasoner.application"/> 11 <stringAttribute key="org.eclipse.jdt.launching.MODULE_NAME" value="hu.bme.mit.inf.dslreasoner.application"/>
12 <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="EcoreGeneration.vsconfig"/>
13 <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="hu.bme.mit.inf.dslreasoner.application"/>
14 <stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:Ecore-Plugin}"/>
12</launchConfiguration> 15</launchConfiguration>
diff --git a/Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/ui/syntaxcoloring/.SolverSemanticHighlightCalculator.xtendbin b/Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/ui/syntaxcoloring/.SolverSemanticHighlightCalculator.xtendbin
index 0ccad2d7..a107bf27 100644
--- a/Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/ui/syntaxcoloring/.SolverSemanticHighlightCalculator.xtendbin
+++ b/Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/ui/syntaxcoloring/.SolverSemanticHighlightCalculator.xtendbin
Binary files differ
diff --git a/Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/ui/syntaxcoloring/.SolverSemanticTextAttributeProvider.xtendbin b/Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/ui/syntaxcoloring/.SolverSemanticTextAttributeProvider.xtendbin
index 55a1bdd4..994dbd52 100644
--- a/Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/ui/syntaxcoloring/.SolverSemanticTextAttributeProvider.xtendbin
+++ b/Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/ui/syntaxcoloring/.SolverSemanticTextAttributeProvider.xtendbin
Binary files differ
diff --git a/Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/validation/.SolverLanguageValidator.xtendbin b/Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/validation/.SolverLanguageValidator.xtendbin
index 1d870094..9839769e 100644
--- a/Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/validation/.SolverLanguageValidator.xtendbin
+++ b/Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/validation/.SolverLanguageValidator.xtendbin
Binary files differ
diff --git a/Application/org.eclipse.viatra.solver.language/xtend-gen/org/eclipse/viatra/solver/language/parser/antlr/.SolverLanguageTokenDefInjectingParser.xtendbin b/Application/org.eclipse.viatra.solver.language/xtend-gen/org/eclipse/viatra/solver/language/parser/antlr/.SolverLanguageTokenDefInjectingParser.xtendbin
index 1147f2ef..d2fd056e 100644
--- a/Application/org.eclipse.viatra.solver.language/xtend-gen/org/eclipse/viatra/solver/language/parser/antlr/.SolverLanguageTokenDefInjectingParser.xtendbin
+++ b/Application/org.eclipse.viatra.solver.language/xtend-gen/org/eclipse/viatra/solver/language/parser/antlr/.SolverLanguageTokenDefInjectingParser.xtendbin
Binary files differ
diff --git a/Application/org.eclipse.viatra.solver.language/xtend-gen/org/eclipse/viatra/solver/language/serializer/.SolverLanguageSyntheticTokenSyntacticSequencer.xtendbin b/Application/org.eclipse.viatra.solver.language/xtend-gen/org/eclipse/viatra/solver/language/serializer/.SolverLanguageSyntheticTokenSyntacticSequencer.xtendbin
index 8bb907a2..30cf1dbd 100644
--- a/Application/org.eclipse.viatra.solver.language/xtend-gen/org/eclipse/viatra/solver/language/serializer/.SolverLanguageSyntheticTokenSyntacticSequencer.xtendbin
+++ b/Application/org.eclipse.viatra.solver.language/xtend-gen/org/eclipse/viatra/solver/language/serializer/.SolverLanguageSyntheticTokenSyntacticSequencer.xtendbin
Binary files differ
diff --git a/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.CloseTrainsObjectiveHint.xtendbin b/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.CloseTrainsObjectiveHint.xtendbin
index 47306d9c..ddc8ea74 100644
--- a/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.CloseTrainsObjectiveHint.xtendbin
+++ b/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.CloseTrainsObjectiveHint.xtendbin
Binary files differ
diff --git a/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.EndOfSidingObjectiveHint.xtendbin b/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.EndOfSidingObjectiveHint.xtendbin
index 809f268d..e89ea81c 100644
--- a/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.EndOfSidingObjectiveHint.xtendbin
+++ b/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.EndOfSidingObjectiveHint.xtendbin
Binary files differ
diff --git a/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.MisalignedTurnoutObjectiveHint.xtendbin b/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.MisalignedTurnoutObjectiveHint.xtendbin
index 90f98dd6..e006abd7 100644
--- a/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.MisalignedTurnoutObjectiveHint.xtendbin
+++ b/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.MisalignedTurnoutObjectiveHint.xtendbin
Binary files differ
diff --git a/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.Modes3ModelGenerator.xtendbin b/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.Modes3ModelGenerator.xtendbin
index c9418b49..11227a1c 100644
--- a/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.Modes3ModelGenerator.xtendbin
+++ b/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.Modes3ModelGenerator.xtendbin
Binary files differ
diff --git a/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.Modes3TypeScopeHint.xtendbin b/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.Modes3TypeScopeHint.xtendbin
index 437a84cc..90728c00 100644
--- a/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.Modes3TypeScopeHint.xtendbin
+++ b/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.Modes3TypeScopeHint.xtendbin
Binary files differ
diff --git a/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.Modes3UnitPropagationGenerator.xtendbin b/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.Modes3UnitPropagationGenerator.xtendbin
index 34c9b033..4625dcf2 100644
--- a/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.Modes3UnitPropagationGenerator.xtendbin
+++ b/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.Modes3UnitPropagationGenerator.xtendbin
Binary files differ
diff --git a/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.TrainLocationsObjectiveHint.xtendbin b/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.TrainLocationsObjectiveHint.xtendbin
index 993f0f78..d74342ba 100644
--- a/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.TrainLocationsObjectiveHint.xtendbin
+++ b/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.TrainLocationsObjectiveHint.xtendbin
Binary files differ
diff --git a/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Constraint2Logic.xtend b/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Constraint2Logic.xtend
index b8c52af4..37fb81ae 100644
--- a/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Constraint2Logic.xtend
+++ b/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Constraint2Logic.xtend
@@ -1,5 +1,4 @@
1package hu.bme.mit.inf.dslreasoner.viatra2logic 1package hu.bme.mit.inf.dslreasoner.viatra2logic
2
3import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic 2import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic
4import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic_Trace 3import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic_Trace
5import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicProblemBuilder 4import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicProblemBuilder
@@ -17,27 +16,27 @@ import org.eclipse.emf.ecore.EStructuralFeature
17import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey 16import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey
18import org.eclipse.viatra.query.runtime.emf.types.EDataTypeInSlotsKey 17import org.eclipse.viatra.query.runtime.emf.types.EDataTypeInSlotsKey
19import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey 18import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey
19import org.eclipse.viatra.query.runtime.matchers.aggregators.DoubleSumOperator
20import org.eclipse.viatra.query.runtime.matchers.aggregators.ExtremumOperator
21import org.eclipse.viatra.query.runtime.matchers.aggregators.ExtremumOperator.Extreme
22import org.eclipse.viatra.query.runtime.matchers.aggregators.IntegerSumOperator
23import org.eclipse.viatra.query.runtime.matchers.aggregators.LongSumOperator
20import org.eclipse.viatra.query.runtime.matchers.psystem.PConstraint 24import org.eclipse.viatra.query.runtime.matchers.psystem.PConstraint
21import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable 25import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable
26import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.AggregatorConstraint
22import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality 27import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality
23import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter 28import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter
29import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExpressionEvaluation
24import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Inequality 30import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Inequality
25import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.NegativePatternCall 31import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.NegativePatternCall
32import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.PatternMatchCounter
33import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.TypeFilterConstraint
26import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.BinaryTransitiveClosure 34import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.BinaryTransitiveClosure
27import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.ConstantValue 35import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.ConstantValue
28import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.PositivePatternCall 36import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.PositivePatternCall
29import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint 37import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint
30 38
31import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* 39import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.*
32import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.TypeFilterConstraint
33import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.AggregatorConstraint
34import org.eclipse.viatra.query.runtime.matchers.aggregators.DoubleSumOperator
35import org.eclipse.viatra.query.runtime.matchers.aggregators.IntegerSumOperator
36import org.eclipse.viatra.query.runtime.matchers.aggregators.LongSumOperator
37import org.eclipse.viatra.query.runtime.matchers.aggregators.ExtremumOperator
38import org.eclipse.viatra.query.runtime.matchers.aggregators.ExtremumOperator.Extreme
39import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.PatternMatchCounter
40import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExpressionEvaluation
41 40
42class Constraint2Logic { 41class Constraint2Logic {
43 val extension LogicProblemBuilder builder = new LogicProblemBuilder 42 val extension LogicProblemBuilder builder = new LogicProblemBuilder
diff --git a/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Viatra2Logic.xtend b/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Viatra2Logic.xtend
index 74e03f71..2f7febd0 100644
--- a/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Viatra2Logic.xtend
+++ b/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Viatra2Logic.xtend
@@ -1,5 +1,6 @@
1package hu.bme.mit.inf.dslreasoner.viatra2logic 1package hu.bme.mit.inf.dslreasoner.viatra2logic
2 2
3import com.google.inject.Injector
3import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic 4import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic
4import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic_Trace 5import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic_Trace
5import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicProblemBuilder 6import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicProblemBuilder
@@ -50,7 +51,7 @@ class Viatra2LogicConfiguration {
50 public var normalize = true 51 public var normalize = true
51} 52}
52 53
53class Viatra2Logic { 54class Viatra2Logic {
54 val extension LogicProblemBuilder builder = new LogicProblemBuilder 55 val extension LogicProblemBuilder builder = new LogicProblemBuilder
55 val extension Viatra2LogicAnnotationsFactory factory = Viatra2LogicAnnotationsFactory.eINSTANCE 56 val extension Viatra2LogicAnnotationsFactory factory = Viatra2LogicAnnotationsFactory.eINSTANCE
56 val normalizer = new PBodyNormalizer(EMFQueryMetaContext.DEFAULT) 57 val normalizer = new PBodyNormalizer(EMFQueryMetaContext.DEFAULT)
@@ -59,12 +60,16 @@ class Viatra2Logic {
59 val Ecore2Logic ecore2Logic 60 val Ecore2Logic ecore2Logic
60 Constraint2Logic constraint2Logic 61 Constraint2Logic constraint2Logic
61 62
62 new(Ecore2Logic ecore2Logic) { 63 new(Ecore2Logic ecore2Logic, Injector injector) {
63 this.ecore2Logic = ecore2Logic 64 this.ecore2Logic = ecore2Logic
64 this.typeInferer = new Viatra2LogicTypeInferer(ecore2Logic) 65 this.typeInferer = new Viatra2LogicTypeInferer(ecore2Logic, injector)
65 this.constraint2Logic = new Constraint2Logic(ecore2Logic) 66 this.constraint2Logic = new Constraint2Logic(ecore2Logic)
66 } 67 }
67 68
69 new(Ecore2Logic ecore2Logic) {
70 this(ecore2Logic, null)
71 }
72
68 def TracedOutput<LogicProblem,Viatra2LogicTrace> transformQueries( 73 def TracedOutput<LogicProblem,Viatra2LogicTrace> transformQueries(
69 ViatraQuerySetDescriptor queries, 74 ViatraQuerySetDescriptor queries,
70 TracedOutput<LogicProblem, Ecore2Logic_Trace> ecore2LogicTrace, 75 TracedOutput<LogicProblem, Ecore2Logic_Trace> ecore2LogicTrace,
diff --git a/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Viatra2LogicTypeInferer.xtend b/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Viatra2LogicTypeInferer.xtend
index b8a6b9c1..1a96bf07 100644
--- a/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Viatra2LogicTypeInferer.xtend
+++ b/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Viatra2LogicTypeInferer.xtend
@@ -1,5 +1,6 @@
1package hu.bme.mit.inf.dslreasoner.viatra2logic 1package hu.bme.mit.inf.dslreasoner.viatra2logic
2 2
3import com.google.inject.Injector
3import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic 4import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic
4import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic_Trace 5import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic_Trace
5import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicProblemBuilder 6import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicProblemBuilder
@@ -18,7 +19,6 @@ import java.util.Set
18import org.eclipse.emf.ecore.EEnum 19import org.eclipse.emf.ecore.EEnum
19import org.eclipse.emf.ecore.EcorePackage 20import org.eclipse.emf.ecore.EcorePackage
20import org.eclipse.viatra.query.patternlanguage.emf.EMFPatternLanguageStandaloneSetup 21import org.eclipse.viatra.query.patternlanguage.emf.EMFPatternLanguageStandaloneSetup
21import org.eclipse.viatra.query.patternlanguage.emf.specification.XBaseEvaluator
22import org.eclipse.viatra.query.runtime.emf.EMFQueryMetaContext 22import org.eclipse.viatra.query.runtime.emf.EMFQueryMetaContext
23import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey 23import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey
24import org.eclipse.viatra.query.runtime.emf.types.EClassUnscopedTransitiveInstancesKey 24import org.eclipse.viatra.query.runtime.emf.types.EClassUnscopedTransitiveInstancesKey
@@ -26,7 +26,6 @@ import org.eclipse.viatra.query.runtime.emf.types.EDataTypeInSlotsKey
26import org.eclipse.viatra.query.runtime.matchers.context.IInputKey 26import org.eclipse.viatra.query.runtime.matchers.context.IInputKey
27import org.eclipse.viatra.query.runtime.matchers.context.common.JavaTransitiveInstancesKey 27import org.eclipse.viatra.query.runtime.matchers.context.common.JavaTransitiveInstancesKey
28import org.eclipse.viatra.query.runtime.matchers.planning.helpers.TypeHelper 28import org.eclipse.viatra.query.runtime.matchers.planning.helpers.TypeHelper
29import org.eclipse.viatra.query.runtime.matchers.psystem.IExpressionEvaluator
30import org.eclipse.viatra.query.runtime.matchers.psystem.PBody 29import org.eclipse.viatra.query.runtime.matchers.psystem.PBody
31import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable 30import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable
32import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.AggregatorConstraint 31import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.AggregatorConstraint
@@ -40,285 +39,275 @@ import org.eclipse.xtext.xbase.typesystem.IBatchTypeResolver
40import org.eclipse.xtext.xbase.typesystem.references.UnknownTypeReference 39import org.eclipse.xtext.xbase.typesystem.references.UnknownTypeReference
41 40
42import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* 41import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.*
43import org.eclipse.xtext.xbase.typesystem.references.InnerTypeReference
44 42
45class Viatra2LogicTypeInferer{ 43class Viatra2LogicTypeInferer {
46 val Ecore2Logic ecore2Logic 44 val Ecore2Logic ecore2Logic
47 val extension LogicProblemBuilder builder = new LogicProblemBuilder 45 val extension LogicProblemBuilder builder = new LogicProblemBuilder
48 /**Typeresolver uses the same resolver as EMFPatternLanguageStandaloneSetup.*/ 46 /**Typeresolver uses the same resolver as EMFPatternLanguageStandaloneSetup.*/
49 val IBatchTypeResolver typeResolver = 47 val IBatchTypeResolver typeResolver
50 (new EMFPatternLanguageStandaloneSetup).createInjector.getInstance(IBatchTypeResolver)
51 val expressionExtractor = new XExpressionExtractor 48 val expressionExtractor = new XExpressionExtractor
52 49
53 new(Ecore2Logic ecore2Logic) { 50 new(Ecore2Logic ecore2Logic, Injector injector) {
54 this.ecore2Logic = ecore2Logic 51 this.ecore2Logic = ecore2Logic
52 val selectedInjector = injector ?:
53 new EMFPatternLanguageStandaloneSetup().createStandaloneInjectorWithSeparateModules
54 this.typeResolver = selectedInjector.getInstance(IBatchTypeResolver)
55 }
56
57 new(Ecore2Logic ecore2Logic) {
58 this(ecore2Logic, null)
55 } 59 }
56 60
57 def Viatra2LogicTypeResult inferTypes(List<PQuery> pQueries, TracedOutput<LogicProblem, Ecore2Logic_Trace> ecore2LogicTrace, Viatra2LogicTrace viatra2LogicTrace) { 61 def Viatra2LogicTypeResult inferTypes(List<PQuery> pQueries,
58 val Viatra2LogicTypeResult result = new Viatra2LogicTypeResult(new HashMap,new HashMap); 62 TracedOutput<LogicProblem, Ecore2Logic_Trace> ecore2LogicTrace, Viatra2LogicTrace viatra2LogicTrace) {
59 for(query : pQueries) { 63 val Viatra2LogicTypeResult result = new Viatra2LogicTypeResult(new HashMap, new HashMap);
60 for(body: query.lookup(viatra2LogicTrace.query2Disjunction).bodies) { 64 for (query : pQueries) {
61 for(variable : body.uniqueVariables) { 65 for (body : query.lookup(viatra2LogicTrace.query2Disjunction).bodies) {
62 getOrMakeTypeDecision(result,variable,body,ecore2LogicTrace,viatra2LogicTrace,emptySet) 66 for (variable : body.uniqueVariables) {
67 getOrMakeTypeDecision(result, variable, body, ecore2LogicTrace, viatra2LogicTrace, emptySet)
63 } 68 }
64 } 69 }
65 for(parameter: query.parameters) { 70 for (parameter : query.parameters) {
66 getOrMakeTypeDecision(result,query,parameter,ecore2LogicTrace,viatra2LogicTrace,emptySet) 71 getOrMakeTypeDecision(result, query, parameter, ecore2LogicTrace, viatra2LogicTrace, emptySet)
67 } 72 }
68 } 73 }
69 return result 74 return result
70 } 75 }
71 76
72 private def TypeReference getOrMakeTypeDecision( 77 private def TypeReference getOrMakeTypeDecision(Viatra2LogicTypeResult result, PVariable variable, PBody body,
73 Viatra2LogicTypeResult result, 78 TracedOutput<LogicProblem, Ecore2Logic_Trace> ecore2LogicTrace, Viatra2LogicTrace viatra2LogicTrace,
74 PVariable variable, PBody body, 79 Set<? extends PParameter> checkedInDecisionMaking) {
75 TracedOutput<LogicProblem, Ecore2Logic_Trace> ecore2LogicTrace, 80 if (result.containsSolution(body, variable)) {
76 Viatra2LogicTrace viatra2LogicTrace, 81 return result.getType(body, variable)
77 Set<? extends PParameter> checkedInDecisionMaking)
78 {
79 if(result.containsSolution(body,variable)) {
80 return result.getType(body,variable)
81 } else { 82 } else {
82 val inferredTypesByViatra = TypeHelper::inferUnaryTypesFor(body.uniqueVariables, body.constraints, EMFQueryMetaContext.DEFAULT) 83 val inferredTypesByViatra = TypeHelper::inferUnaryTypesFor(body.uniqueVariables, body.constraints,
84 EMFQueryMetaContext.DEFAULT)
83 val constraintsForVariable = variable.lookup(inferredTypesByViatra) 85 val constraintsForVariable = variable.lookup(inferredTypesByViatra)
84 86
85 val typeConstraintsDerivedByTypeHelper = constraintsForVariable.map[transformTypeReference(ecore2LogicTrace)] 87 val typeConstraintsDerivedByTypeHelper = constraintsForVariable.map [
88 transformTypeReference(ecore2LogicTrace)
89 ]
86 val typesFromEval = variable.getTypesFromEval(typeResolver) 90 val typesFromEval = variable.getTypesFromEval(typeResolver)
87 val typesFromAggregatorResult = variable.getTypeFromPassivePatternCallConstraintResult( 91 val typesFromAggregatorResult = variable.
88 result, 92 getTypeFromPassivePatternCallConstraintResult(result, ecore2LogicTrace, viatra2LogicTrace,
89 ecore2LogicTrace,
90 viatra2LogicTrace,
91 checkedInDecisionMaking)
92
93 val typesFromPositiveReasoning = (typeConstraintsDerivedByTypeHelper + typesFromEval + typesFromAggregatorResult).filterNull
94
95 val types = if(!typesFromPositiveReasoning.empty) {
96 typesFromPositiveReasoning
97 } else {
98 variable.getTypeFromPassivePatternCallConstraints(
99 result,
100 ecore2LogicTrace,
101 viatra2LogicTrace,
102 checkedInDecisionMaking) 93 checkedInDecisionMaking)
103 } 94
104 95 val typesFromPositiveReasoning = (typeConstraintsDerivedByTypeHelper + typesFromEval +
96 typesFromAggregatorResult).filterNull
97
98 val types = if (!typesFromPositiveReasoning.empty) {
99 typesFromPositiveReasoning
100 } else {
101 variable.getTypeFromPassivePatternCallConstraints(result, ecore2LogicTrace, viatra2LogicTrace,
102 checkedInDecisionMaking)
103 }
104
105 val commonSubtype = this.calculateCommonSubtype(types) 105 val commonSubtype = this.calculateCommonSubtype(types)
106 106
107 result.addType(body,variable,commonSubtype) 107 result.addType(body, variable, commonSubtype)
108 return commonSubtype 108 return commonSubtype
109 } 109 }
110 } 110 }
111 111
112 private def TypeReference getOrMakeTypeDecision( 112 private def TypeReference getOrMakeTypeDecision(Viatra2LogicTypeResult result, PQuery query, PParameter parameter,
113 Viatra2LogicTypeResult result, 113 TracedOutput<LogicProblem, Ecore2Logic_Trace> ecore2LogicTrace, Viatra2LogicTrace viatra2LogicTrace,
114 PQuery query, 114 Set<? extends PParameter> checkedInDecisionMaking) {
115 PParameter parameter, 115 if (checkedInDecisionMaking.contains(parameter)) {
116 TracedOutput<LogicProblem, Ecore2Logic_Trace> ecore2LogicTrace,
117 Viatra2LogicTrace viatra2LogicTrace,
118 Set<? extends PParameter> checkedInDecisionMaking)
119 {
120 if(checkedInDecisionMaking.contains(parameter)) {
121 return null 116 return null
122 } 117 }
123 if(result.containsSolution(parameter)) { 118 if (result.containsSolution(parameter)) {
124 return result.getType(query, parameter) 119 return result.getType(query, parameter)
125 } 120 }
126 121
127 var TypeReference typeReference; 122 var TypeReference typeReference;
128 123
129 if(parameter.declaredUnaryType !== null) { 124 if (parameter.declaredUnaryType !== null) {
130 val key = parameter.declaredUnaryType 125 val key = parameter.declaredUnaryType
131 typeReference = key.transformTypeReference(ecore2LogicTrace) 126 typeReference = key.transformTypeReference(ecore2LogicTrace)
132 } else { 127 } else {
133 val bodies = query.lookup(viatra2LogicTrace.query2Disjunction).bodies 128 val bodies = query.lookup(viatra2LogicTrace.query2Disjunction).bodies
134 val newChecked = new HashSet(checkedInDecisionMaking) => [add(parameter)] 129 val newChecked = new HashSet(checkedInDecisionMaking) => [add(parameter)]
135 val Iterable<TypeReference> variableTypes = bodies.map[body| 130 val Iterable<TypeReference> variableTypes = bodies.map [ body |
136 val symbolicParameter = body.symbolicParameters.filter[patternParameter === parameter].head 131 val symbolicParameter = body.symbolicParameters.filter[patternParameter === parameter].head
137 val variable = symbolicParameter.parameterVariable 132 val variable = symbolicParameter.parameterVariable
138 getOrMakeTypeDecision(result,variable,body,ecore2LogicTrace,viatra2LogicTrace,newChecked) 133 getOrMakeTypeDecision(result, variable, body, ecore2LogicTrace, viatra2LogicTrace, newChecked)
139 ] 134 ]
140 typeReference = calculateCommonSupertype(variableTypes) 135 typeReference = calculateCommonSupertype(variableTypes)
141 } 136 }
142 result.addType(query,parameter,typeReference) 137 result.addType(query, parameter, typeReference)
143 return typeReference 138 return typeReference
144 } 139 }
145 140
146 private def Iterable<? extends TypeReference> getTypesFromEval(PVariable v, IBatchTypeResolver typeResolver) { 141 private def Iterable<? extends TypeReference> getTypesFromEval(PVariable v, IBatchTypeResolver typeResolver) {
147 val constraints = v.getReferringConstraintsOfType( 142 val constraints = v.getReferringConstraintsOfType(
148 typeof(ExpressionEvaluation) 143 typeof(ExpressionEvaluation)
149 ).filter[ 144 ).filter [
150 it.outputVariable === v 145 it.outputVariable === v
151 ] 146 ]
152 val res = constraints.map[getTypeFromEval] 147 val res = constraints.map[getTypeFromEval]
153 return res 148 return res
154 } 149 }
155 150
156 def TypeReference getTypeFromEval(ExpressionEvaluation evaluation) { 151 def TypeReference getTypeFromEval(ExpressionEvaluation evaluation) {
157 val XExpression expression = expressionExtractor.extractExpression(evaluation.evaluator) 152 val XExpression expression = expressionExtractor.extractExpression(evaluation.evaluator)
158 val returnType = typeResolver.resolveTypes(expression).getReturnType(expression); 153 val returnType = typeResolver.resolveTypes(expression).getReturnType(expression);
159 if(returnType === null || returnType instanceof UnknownTypeReference) { 154 if (returnType === null || returnType instanceof UnknownTypeReference) {
160 return null 155 return null
161 } else { 156 } else {
162 val javaIdentifier = returnType.wrapperTypeIfPrimitive.javaIdentifier 157 val javaIdentifier = returnType.wrapperTypeIfPrimitive.javaIdentifier
163 if(javaIdentifier == Boolean.name) { 158 if (javaIdentifier == Boolean.name) {
164 return LogicBool 159 return LogicBool
165 } else if(javaIdentifier == Integer.name || javaIdentifier == Short.name) { 160 } else if (javaIdentifier == Integer.name || javaIdentifier == Short.name) {
166 return LogicInt 161 return LogicInt
167 } else if(javaIdentifier == Double.name || javaIdentifier == Float.name){ 162 } else if (javaIdentifier == Double.name || javaIdentifier == Float.name) {
168 return LogicReal 163 return LogicReal
169 } else if(javaIdentifier == String.name) { 164 } else if (javaIdentifier == String.name) {
170 return LogicString 165 return LogicString
171 } else { 166 } else {
172 throw new UnsupportedOperationException('''Unsupported eval type: "«javaIdentifier»"!''') 167 throw new UnsupportedOperationException('''Unsupported eval type: "«javaIdentifier»"!''')
173 } 168 }
174 } 169 }
175 } 170 }
176 171
177 private def getTypeFromPassivePatternCallConstraintResult( 172 private def getTypeFromPassivePatternCallConstraintResult(
178 PVariable v, 173 PVariable v,
179 Viatra2LogicTypeResult result, 174 Viatra2LogicTypeResult result,
180 TracedOutput<LogicProblem, Ecore2Logic_Trace> ecore2LogicTrace, 175 TracedOutput<LogicProblem, Ecore2Logic_Trace> ecore2LogicTrace,
181 Viatra2LogicTrace viatra2LogicTrace, 176 Viatra2LogicTrace viatra2LogicTrace,
182 Set<? extends PParameter> checkedInDecisionMaking 177 Set<? extends PParameter> checkedInDecisionMaking
183 ) { 178 ) {
184 val referringConstraints = v.referringConstraints 179 val referringConstraints = v.referringConstraints
185 180
186 val referringCountMatcherTargeting = referringConstraints 181 val referringCountMatcherTargeting = referringConstraints.filter(PatternMatchCounter).filter [
187 .filter(PatternMatchCounter) 182 it.resultVariable === v
188 .filter[it.resultVariable === v] 183 ].map[builder.LogicInt]
189 .map[builder.LogicInt] 184 val referringAggregatorConstraintsTargeting = referringConstraints.filter(AggregatorConstraint).filter [
190 val referringAggregatorConstraintsTargeting = referringConstraints 185 it.resultVariable === v
191 .filter(AggregatorConstraint) 186 ].map [ // get the type of the referred column
192 .filter[it.resultVariable === v] 187 getOrMakeTypeDecision(result, it.referredQuery, it.referredQuery.parameters.get(aggregatedColumn),
193 .map[ // get the type of the referred column 188 ecore2LogicTrace, viatra2LogicTrace, checkedInDecisionMaking)
194 getOrMakeTypeDecision( 189 ]
195 result, 190
196 it.referredQuery,
197 it.referredQuery.parameters.get(aggregatedColumn),
198 ecore2LogicTrace,
199 viatra2LogicTrace,
200 checkedInDecisionMaking)]
201
202 return referringCountMatcherTargeting + referringAggregatorConstraintsTargeting 191 return referringCountMatcherTargeting + referringAggregatorConstraintsTargeting
203 } 192 }
204 193
205 private def getTypeFromPassivePatternCallConstraints( 194 private def getTypeFromPassivePatternCallConstraints(
206 PVariable v, 195 PVariable v,
207 Viatra2LogicTypeResult result, 196 Viatra2LogicTypeResult result,
208 TracedOutput<LogicProblem, Ecore2Logic_Trace> ecore2LogicTrace, 197 TracedOutput<LogicProblem, Ecore2Logic_Trace> ecore2LogicTrace,
209 Viatra2LogicTrace viatra2LogicTrace, 198 Viatra2LogicTrace viatra2LogicTrace,
210 Set<? extends PParameter> checkedInDecisionMaking 199 Set<? extends PParameter> checkedInDecisionMaking
211 ) { 200 ) {
212 val referringConstraints = v.referringConstraints 201 val referringConstraints = v.referringConstraints
213 if(referringConstraints.size === 1) { 202 if (referringConstraints.size === 1) {
214 val onlyConstraint = referringConstraints.head 203 val onlyConstraint = referringConstraints.head
215 204
216 if(onlyConstraint instanceof PatternCallBasedDeferred) { 205 if (onlyConstraint instanceof PatternCallBasedDeferred) {
217 val indexOfVariable = v.lookup(onlyConstraint.actualParametersTuple.invertIndex) 206 val indexOfVariable = v.lookup(onlyConstraint.actualParametersTuple.invertIndex)
218 val parameter = onlyConstraint.referredQuery.parameters.get(indexOfVariable) 207 val parameter = onlyConstraint.referredQuery.parameters.get(indexOfVariable)
219 val res = getOrMakeTypeDecision(result, onlyConstraint.referredQuery, parameter, ecore2LogicTrace,viatra2LogicTrace,checkedInDecisionMaking) 208 val res = getOrMakeTypeDecision(result, onlyConstraint.referredQuery, parameter, ecore2LogicTrace,
209 viatra2LogicTrace, checkedInDecisionMaking)
220 return #[res] 210 return #[res]
221 } else { 211 } else {
222 throw new IllegalArgumentException('''A non-PatternCallBasedDeferred type constraint is referring to the variable "«v.name»"!''') 212 throw new IllegalArgumentException('''A non-PatternCallBasedDeferred type constraint is referring to the variable "«v.name»"!''')
223 } 213 }
224 } else { 214 } else {
225 throw new IllegalArgumentException('''Multiple («referringConstraints.size», «FOR c:referringConstraints SEPARATOR ", "»«c»«ENDFOR») constraints are referring to variable "«v.name»", but no type is inferred!''') 215 throw new IllegalArgumentException('''Multiple («referringConstraints.size», «FOR c : referringConstraints SEPARATOR ", "»«c»«ENDFOR») constraints are referring to variable "«v.name»", but no type is inferred!''')
226 } 216 }
227 } 217 }
228 218
229 def TypeReference calculateCommonSubtype(Iterable<TypeReference> types) { 219 def TypeReference calculateCommonSubtype(Iterable<TypeReference> types) {
230 val primitiveTypeReferences = types.filter(PrimitiveTypeReference) 220 val primitiveTypeReferences = types.filter(PrimitiveTypeReference)
231 val complexTypeReferences = types.filter(ComplexTypeReference) 221 val complexTypeReferences = types.filter(ComplexTypeReference)
232 if(complexTypeReferences.isEmpty) { 222 if (complexTypeReferences.isEmpty) {
233 // If there is an int type, ... 223 // If there is an int type, ...
234 if(primitiveTypeReferences.exists[it instanceof IntTypeReference]) { 224 if (primitiveTypeReferences.exists[it instanceof IntTypeReference]) {
235 // ... and all types are either real or int, then return int! 225 // ... and all types are either real or int, then return int!
236 if(primitiveTypeReferences.forall[it instanceof RealTypeReference || it instanceof IntTypeReference]) { 226 if (primitiveTypeReferences.forall[it instanceof RealTypeReference || it instanceof IntTypeReference]) {
237 return primitiveTypeReferences.filter(IntTypeReference).head 227 return primitiveTypeReferences.filter(IntTypeReference).head
238 } 228 } // Otherwise, the types are inconsistent, because they mixing numeric and non-numeric types.
239 // Otherwise, the types are inconsistent, because they mixing numeric and non-numeric types. 229 else
240 else throw new IllegalArgumentException('''Inconsistent types: «primitiveTypeReferences.map[eClass.name].toSet.toList»''') 230 throw new IllegalArgumentException('''Inconsistent types: «primitiveTypeReferences.map[eClass.name].toSet.toList»''')
241 } 231 }
242 // If there is no Real, then the types should be homogenious 232 // If there is no Real, then the types should be homogenious
243 val head = primitiveTypeReferences.head 233 val head = primitiveTypeReferences.head
244 if(primitiveTypeReferences.exists[it.eClass !== head.eClass]) { 234 if (primitiveTypeReferences.exists[it.eClass !== head.eClass]) {
245 throw new IllegalArgumentException('''Inconsistent types: «primitiveTypeReferences.map[eClass.name].toSet.toList»''') 235 throw new IllegalArgumentException('''Inconsistent types: «primitiveTypeReferences.map[eClass.name].toSet.toList»''')
246 } 236 }
247 return head 237 return head
248 } else if(primitiveTypeReferences.isEmpty) { 238 } else if (primitiveTypeReferences.isEmpty) {
249 val complexTypes = complexTypeReferences.map[it.referred].toSet 239 val complexTypes = complexTypeReferences.map[it.referred].toSet
250 if(complexTypes.size === 1) { 240 if (complexTypes.size === 1) {
251 return builder.toTypeReference(complexTypes.head) 241 return builder.toTypeReference(complexTypes.head)
252 } 242 }
253 // Collect possible subtypes 243 // Collect possible subtypes
254 val subtypeSets = complexTypes.map[it.transitiveClosureStar[it.subtypes].toSet] 244 val subtypeSets = complexTypes.map[it.transitiveClosureStar[it.subtypes].toSet]
255 val commonTypeSet = new HashSet(subtypeSets.head) 245 val commonTypeSet = new HashSet(subtypeSets.head)
256 val otherSets = subtypeSets.tail 246 val otherSets = subtypeSets.tail
257 for(otherSet : otherSets) { 247 for (otherSet : otherSets) {
258 commonTypeSet.retainAll(otherSet) 248 commonTypeSet.retainAll(otherSet)
259 } 249 }
260 if(commonTypeSet.empty) { 250 if (commonTypeSet.empty) {
261 throw new IllegalArgumentException('''Inconsistent types: «complexTypes.map[name].toList»''') 251 throw new IllegalArgumentException('''Inconsistent types: «complexTypes.map[name].toList»''')
262 } 252 }
263 253
264
265 return calculateCommonComplexSupertype(commonTypeSet) 254 return calculateCommonComplexSupertype(commonTypeSet)
266 255
267 } else { 256 } else {
268 throw new IllegalArgumentException(''' 257 throw new IllegalArgumentException('''
269 Inconsistent types, mixing primitive and complex types: 258 Inconsistent types, mixing primitive and complex types:
270 «primitiveTypeReferences.map[eClass.name].toSet.toList» 259 «primitiveTypeReferences.map[eClass.name].toSet.toList»
271 and 260 and
272 «complexTypeReferences.map[it.referred].toSet.map[name].toList»''') 261 «complexTypeReferences.map[it.referred].toSet.map[name].toList»''')
273 262
274 } 263 }
275 } 264 }
276 265
277
278 def TypeReference calculateCommonSupertype(Iterable<TypeReference> types) { 266 def TypeReference calculateCommonSupertype(Iterable<TypeReference> types) {
279 val primitiveTypeReferences = types.filter(PrimitiveTypeReference) 267 val primitiveTypeReferences = types.filter(PrimitiveTypeReference)
280 val complexTypeReferences = types.filter(ComplexTypeReference) 268 val complexTypeReferences = types.filter(ComplexTypeReference)
281 if(complexTypeReferences.isEmpty) { 269 if (complexTypeReferences.isEmpty) {
282 // If there is a real type, ... 270 // If there is a real type, ...
283 if(primitiveTypeReferences.exists[it instanceof RealTypeReference]) { 271 if (primitiveTypeReferences.exists[it instanceof RealTypeReference]) {
284 // ... and all types are either real or int, then return real! 272 // ... and all types are either real or int, then return real!
285 if(primitiveTypeReferences.forall[it instanceof RealTypeReference || it instanceof IntTypeReference]) { 273 if (primitiveTypeReferences.forall[it instanceof RealTypeReference || it instanceof IntTypeReference]) {
286 return primitiveTypeReferences.filter(RealTypeReference).head 274 return primitiveTypeReferences.filter(RealTypeReference).head
287 } 275 } // Otherwise, the types are inconsistent, because they mixing numeric and non-numeric types.
288 // Otherwise, the types are inconsistent, because they mixing numeric and non-numeric types. 276 else
289 else throw new IllegalArgumentException('''Inconsistent types: «primitiveTypeReferences.map[eClass.name].toSet.toList»''') 277 throw new IllegalArgumentException('''Inconsistent types: «primitiveTypeReferences.map[eClass.name].toSet.toList»''')
290 } 278 }
291 // If there is no Real, then the types should be homogenious 279 // If there is no Real, then the types should be homogenious
292 val head = primitiveTypeReferences.head 280 val head = primitiveTypeReferences.head
293 if(primitiveTypeReferences.exists[it.eClass !== head.eClass]) { 281 if (primitiveTypeReferences.exists[it.eClass !== head.eClass]) {
294 throw new IllegalArgumentException('''Inconsistent types: «primitiveTypeReferences.map[eClass.name].toSet.toList»''') 282 throw new IllegalArgumentException('''Inconsistent types: «primitiveTypeReferences.map[eClass.name].toSet.toList»''')
295 } 283 }
296 return head 284 return head
297 } else if(primitiveTypeReferences.isEmpty) { 285 } else if (primitiveTypeReferences.isEmpty) {
298 val complexTypes = complexTypeReferences.map[it.referred].toSet 286 val complexTypes = complexTypeReferences.map[it.referred].toSet
299 return calculateCommonComplexSupertype(complexTypes) 287 return calculateCommonComplexSupertype(complexTypes)
300 288
301 } else { 289 } else {
302 throw new IllegalArgumentException(''' 290 throw new IllegalArgumentException('''
303 Inconsistent types, mixing primitive and complex types: 291 Inconsistent types, mixing primitive and complex types:
304 «primitiveTypeReferences.map[eClass.name].toSet.toList» 292 «primitiveTypeReferences.map[eClass.name].toSet.toList»
305 and 293 and
306 «complexTypeReferences.map[it.referred].toSet.map[name].toList»''') 294 «complexTypeReferences.map[it.referred].toSet.map[name].toList»''')
307 295
308 } 296 }
309 } 297 }
298
310 def TypeReference calculateCommonComplexSupertype(Set<Type> complexTypes) { 299 def TypeReference calculateCommonComplexSupertype(Set<Type> complexTypes) {
311 if(complexTypes.size === 1) { 300 if (complexTypes.size === 1) {
312 return builder.toTypeReference(complexTypes.head) 301 return builder.toTypeReference(complexTypes.head)
313 } 302 }
314 // Collect possible supertypes 303 // Collect possible supertypes
315 val supertypeSets = complexTypes.map[it.transitiveClosureStar[it.supertypes].toSet] 304 val supertypeSets = complexTypes.map[it.transitiveClosureStar[it.supertypes].toSet]
316 val commonTypeSet = new HashSet(supertypeSets.head) 305 val commonTypeSet = new HashSet(supertypeSets.head)
317 val otherSets = supertypeSets.tail 306 val otherSets = supertypeSets.tail
318 for(otherSet : otherSets) { 307 for (otherSet : otherSets) {
319 commonTypeSet.retainAll(otherSet) 308 commonTypeSet.retainAll(otherSet)
320 } 309 }
321 if(commonTypeSet.empty) { 310 if (commonTypeSet.empty) {
322 throw new IllegalArgumentException('''Inconsistent types: «complexTypes.map[name].toList»''') 311 throw new IllegalArgumentException('''Inconsistent types: «complexTypes.map[name].toList»''')
323 } 312 }
324 // Remove type that already have covered 313 // Remove type that already have covered
@@ -326,40 +315,44 @@ class Viatra2LogicTypeInferer{
326 commonTypeSet.removeAll(coveredTypes) 315 commonTypeSet.removeAll(coveredTypes)
327 return builder.toTypeReference(commonTypeSet.head) 316 return builder.toTypeReference(commonTypeSet.head)
328 } 317 }
329 318
330 /** 319 /**
331 * Transforms a Viatra type reference to a logic type. 320 * Transforms a Viatra type reference to a logic type.
332 */ 321 */
333 def dispatch TypeReference transformTypeReference(EDataTypeInSlotsKey k,TracedOutput<LogicProblem, Ecore2Logic_Trace> ecore2LogicTrace) { 322 def dispatch TypeReference transformTypeReference(EDataTypeInSlotsKey k,
334 val w = k.wrappedKey 323 TracedOutput<LogicProblem, Ecore2Logic_Trace> ecore2LogicTrace) {
335 if(w == EcorePackage.Literals.EINT || w == EcorePackage.Literals.ESHORT || w == EcorePackage.Literals.ELONG) { 324 val w = k.wrappedKey
325 if (w == EcorePackage.Literals.EINT || w == EcorePackage.Literals.ESHORT || w == EcorePackage.Literals.ELONG) {
336 return builder.LogicInt 326 return builder.LogicInt
337 } else if(w == EcorePackage.Literals.EDOUBLE || w == EcorePackage.Literals.EFLOAT) { 327 } else if (w == EcorePackage.Literals.EDOUBLE || w == EcorePackage.Literals.EFLOAT) {
338 return builder.LogicReal 328 return builder.LogicReal
339 } else if(w == EcorePackage.Literals.EBOOLEAN) { 329 } else if (w == EcorePackage.Literals.EBOOLEAN) {
340 return builder.LogicBool 330 return builder.LogicBool
341 } else if(w == EcorePackage.Literals.ESTRING) { 331 } else if (w == EcorePackage.Literals.ESTRING) {
342 return builder.LogicString 332 return builder.LogicString
343 } else if(w instanceof EEnum) { 333 } else if (w instanceof EEnum) {
344 val c = this.ecore2Logic.TypeofEEnum(ecore2LogicTrace.trace,w) 334 val c = this.ecore2Logic.TypeofEEnum(ecore2LogicTrace.trace, w)
345 return builder.toTypeReference(c); 335 return builder.toTypeReference(c);
346 } else throw new UnsupportedOperationException('''Unknown reference type «w.class.name»''') 336 } else
337 throw new UnsupportedOperationException('''Unknown reference type «w.class.name»''')
347 } 338 }
348 def dispatch TypeReference transformTypeReference(JavaTransitiveInstancesKey k,TracedOutput<LogicProblem, Ecore2Logic_Trace> ecore2LogicTrace) { 339
340 def dispatch TypeReference transformTypeReference(JavaTransitiveInstancesKey k,
341 TracedOutput<LogicProblem, Ecore2Logic_Trace> ecore2LogicTrace) {
349 val c = k.wrapperInstanceClass 342 val c = k.wrapperInstanceClass
350 if(c == Integer || c == Long || c == Short) { 343 if (c == Integer || c == Long || c == Short) {
351 return LogicInt 344 return LogicInt
352 } else if(c == Float || c == Double) { 345 } else if (c == Float || c == Double) {
353 return LogicReal 346 return LogicReal
354 } else if(c == Boolean) { 347 } else if (c == Boolean) {
355 return LogicBool 348 return LogicBool
356 } else if(c == String) { 349 } else if (c == String) {
357 return LogicString 350 return LogicString
358 } else if(c.superclass == Enum){ 351 } else if (c.superclass == Enum) {
359 val enums = ecore2Logic.allEnumsInScope(ecore2LogicTrace.trace) 352 val enums = ecore2Logic.allEnumsInScope(ecore2LogicTrace.trace)
360 for(enum : enums) { 353 for (enum : enums) {
361 if(c == enum.instanceClass) { 354 if (c == enum.instanceClass) {
362 return builder.toTypeReference(ecore2Logic.TypeofEEnum(ecore2LogicTrace.trace,enum)) 355 return builder.toTypeReference(ecore2Logic.TypeofEEnum(ecore2LogicTrace.trace, enum))
363 } 356 }
364 } 357 }
365 throw new IllegalArgumentException('''Enum type «c.simpleName» is not mapped to logic!''') 358 throw new IllegalArgumentException('''Enum type «c.simpleName» is not mapped to logic!''')
@@ -367,26 +360,31 @@ class Viatra2LogicTypeInferer{
367 return null 360 return null
368 } 361 }
369 } 362 }
370 def dispatch TypeReference transformTypeReference(EClassTransitiveInstancesKey k,TracedOutput<LogicProblem, Ecore2Logic_Trace> ecore2LogicTrace) { 363
364 def dispatch TypeReference transformTypeReference(EClassTransitiveInstancesKey k,
365 TracedOutput<LogicProblem, Ecore2Logic_Trace> ecore2LogicTrace) {
371 val c = k.wrappedKey 366 val c = k.wrappedKey
372 367
373 if(this.ecore2Logic.allClassesInScope(ecore2LogicTrace.trace).toList.contains(c)) { 368 if (this.ecore2Logic.allClassesInScope(ecore2LogicTrace.trace).toList.contains(c)) {
374 return builder.toTypeReference(this.ecore2Logic.TypeofEClass(ecore2LogicTrace.trace,k.wrappedKey)) 369 return builder.toTypeReference(this.ecore2Logic.TypeofEClass(ecore2LogicTrace.trace, k.wrappedKey))
375 } else { 370 } else {
376 return null 371 return null
377 } 372 }
378 } 373 }
379 def dispatch TypeReference transformTypeReference(EClassUnscopedTransitiveInstancesKey k, TracedOutput<LogicProblem, Ecore2Logic_Trace> ecore2LogicTrace) { 374
375 def dispatch TypeReference transformTypeReference(EClassUnscopedTransitiveInstancesKey k,
376 TracedOutput<LogicProblem, Ecore2Logic_Trace> ecore2LogicTrace) {
380 val c = k.wrappedKey 377 val c = k.wrappedKey
381 378
382 if(this.ecore2Logic.allClassesInScope(ecore2LogicTrace.trace).toList.contains(c)) { 379 if (this.ecore2Logic.allClassesInScope(ecore2LogicTrace.trace).toList.contains(c)) {
383 return builder.toTypeReference(this.ecore2Logic.TypeofEClass(ecore2LogicTrace.trace,k.wrappedKey)) 380 return builder.toTypeReference(this.ecore2Logic.TypeofEClass(ecore2LogicTrace.trace, k.wrappedKey))
384 } else { 381 } else {
385 return null 382 return null
386 } 383 }
387 } 384 }
388 385
389 def dispatch TypeReference transformTypeReference(IInputKey k,TracedOutput<LogicProblem, Ecore2Logic_Trace> ecore2LogicTrace) { 386 def dispatch TypeReference transformTypeReference(IInputKey k,
387 TracedOutput<LogicProblem, Ecore2Logic_Trace> ecore2LogicTrace) {
390 throw new IllegalArgumentException('''Unsupported type: «k.class.simpleName»''') 388 throw new IllegalArgumentException('''Unsupported type: «k.class.simpleName»''')
391 } 389 }
392} \ No newline at end of file 390}
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 26ec7091..69b54b8a 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
@@ -6,7 +6,6 @@ import com.google.inject.Inject
6import com.google.inject.Injector 6import com.google.inject.Injector
7import com.google.inject.multibindings.Multibinder 7import com.google.inject.multibindings.Multibinder
8import com.google.inject.name.Names 8import com.google.inject.name.Names
9import com.google.inject.util.Modules
10import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.LogiclanguagePackage 9import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.LogiclanguagePackage
11import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicproblemPackage 10import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicproblemPackage
12import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialinterpretationPackage 11import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialinterpretationPackage
@@ -46,7 +45,6 @@ import org.eclipse.xtext.scoping.IScope
46import org.eclipse.xtext.scoping.IScopeProvider 45import org.eclipse.xtext.scoping.IScopeProvider
47import org.eclipse.xtext.scoping.impl.AbstractDeclarativeScopeProvider 46import org.eclipse.xtext.scoping.impl.AbstractDeclarativeScopeProvider
48import org.eclipse.xtext.scoping.impl.SimpleScope 47import org.eclipse.xtext.scoping.impl.SimpleScope
49import org.eclipse.xtext.service.AbstractGenericModule
50import org.eclipse.xtext.service.SingletonBinding 48import org.eclipse.xtext.service.SingletonBinding
51import org.eclipse.xtext.workspace.IProjectConfigProvider 49import org.eclipse.xtext.workspace.IProjectConfigProvider
52 50
@@ -65,35 +63,32 @@ package class StandaloneParserWithFixedMetamodelProviderModule extends Standalon
65 Multibinder::newSetBinder(binder, IMetamodelProviderInstance); 63 Multibinder::newSetBinder(binder, IMetamodelProviderInstance);
66 } 64 }
67 65
68} 66 @SingletonBinding
69 67 override IResourceServiceProvider.Registry bindIResourceServiceProvider$Registry() {
70package class StandaloneParserOverridesModule extends AbstractGenericModule { 68 new VqlDeactivatedServiceProviderRegistry
71 69 }
72 def Class<? extends IMetamodelProvider> bindIMetamodelProvider() { 70
71 override Class<? extends IMetamodelProvider> bindIMetamodelProvider() {
73 FixedMetamodelProvider 72 FixedMetamodelProvider
74 } 73 }
75 74
76 def Class<? extends IProjectConfigProvider> bindProjectConfigProvider() { 75 override Class<? extends IProjectConfigProvider> bindProjectConfigProvider() {
77 NullProjectConfigProvider 76 NullProjectConfigProvider
78 } 77 }
79 78
80 @SingletonBinding 79 @SingletonBinding
81 def Class<? extends IResourceServiceProvider.Registry> bindIResourceServiceProvider$Registry() { 80 override EValidator.Registry bindEValidatorRegistry() {
82 VqlDeactivatedServiceProviderRegistry
83 }
84
85 def EValidator.Registry bindEValidator$Registry() {
86 // org.eclipse.xtext.validation.EValidatorRegistrar modifies EValidators already in the registry, 81 // org.eclipse.xtext.validation.EValidatorRegistrar modifies EValidators already in the registry,
87 // so it is not safe to populate the registry from the EValidator.Registry.INSTANCE singleton. 82 // so it is not safe to populate the registry from the EValidator.Registry.INSTANCE singleton.
88 // There is no need to execute any EValiator other than EMFPatternLanguageValidator, 83 // There is no need to execute any EValiator other than EMFPatternLanguageValidator,
89 // so we can start with a blank registry instead. 84 // so we can start with a blank registry instead.
90 new EValidatorRegistryImpl() 85 new EValidatorRegistryImpl
91 } 86 }
92 87
93 def EPackage.Registry bindEPackage$Registry() { 88 @SingletonBinding
89 override EPackage.Registry bindEPackageRegistry() {
94 new EPackageRegistryImpl(EPackage.Registry.INSTANCE) 90 new EPackageRegistryImpl(EPackage.Registry.INSTANCE)
95 } 91 }
96
97} 92}
98 93
99package class NullProjectConfigProvider implements IProjectConfigProvider { 94package class NullProjectConfigProvider implements IProjectConfigProvider {
@@ -136,10 +131,8 @@ class ParseUtil {
136 131
137 def protected Injector internalCreateInjector() { 132 def protected Injector internalCreateInjector() {
138 ensureViatraInitialized(); 133 ensureViatraInitialized();
139 val runtimeModulemodule = new StandaloneParserWithFixedMetamodelProviderModule 134 val runtimeModule = new StandaloneParserWithFixedMetamodelProviderModule
140 val overridesModule = new StandaloneParserOverridesModule 135 val newInjector = Guice.createInjector(runtimeModule)
141 val module = Modules.override(runtimeModulemodule).with(overridesModule)
142 val newInjector = Guice.createInjector(module)
143 return newInjector 136 return newInjector
144 } 137 }
145 138