diff options
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" | ||
26 | Import-Package: org.apache.log4j | 27 | Import-Package: org.apache.log4j |
27 | Bundle-RequiredExecutionEnvironment: JavaSE-1.8 | 28 | Bundle-RequiredExecutionEnvironment: JavaSE-1.8 |
28 | Export-Package: hu.bme.mit.inf.dslreasoner.application.ui.quickfix, | 29 | Export-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; | |||
12 | import org.eclipse.jface.viewers.StructuredSelection; | 12 | import org.eclipse.jface.viewers.StructuredSelection; |
13 | import org.eclipse.ui.handlers.HandlerUtil; | 13 | import org.eclipse.ui.handlers.HandlerUtil; |
14 | 14 | ||
15 | import com.google.inject.Inject; | ||
16 | import com.google.inject.Injector; | ||
17 | |||
15 | import hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor; | 18 | import hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor; |
16 | 19 | ||
17 | public class ExecuteScriptHandler extends AbstractHandler implements IHandler { | 20 | public 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 @@ | |||
1 | package hu.bme.mit.inf.dslreasoner.application.execution | 1 | package hu.bme.mit.inf.dslreasoner.application.execution |
2 | 2 | ||
3 | import com.google.inject.Injector | ||
3 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigurationScript | 4 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigurationScript |
4 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.GenerationTask | 5 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.GenerationTask |
5 | import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic | 6 | import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic |
@@ -24,7 +25,9 @@ import java.util.LinkedList | |||
24 | import java.util.Optional | 25 | import java.util.Optional |
25 | import org.eclipse.core.runtime.IProgressMonitor | 26 | import org.eclipse.core.runtime.IProgressMonitor |
26 | import org.eclipse.emf.common.util.URI | 27 | import org.eclipse.emf.common.util.URI |
28 | import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor | ||
27 | 29 | ||
30 | @FinalFieldsConstructor | ||
28 | class GenerationTaskExecutor { | 31 | class 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 @@ | |||
1 | package hu.bme.mit.inf.dslreasoner.application.execution | 1 | package hu.bme.mit.inf.dslreasoner.application.execution |
2 | 2 | ||
3 | import org.eclipse.viatra.query.patternlanguage.emf.EMFPatternLanguageStandaloneSetupGenerated | ||
4 | import com.google.inject.Injector | ||
5 | import com.google.inject.Guice | 3 | import com.google.inject.Guice |
6 | import org.eclipse.viatra.query.patternlanguage.emf.EMFPatternLanguageRuntimeModule | 4 | import com.google.inject.Injector |
7 | import com.google.inject.Guice; | ||
8 | import com.google.inject.Injector; | ||
9 | import org.eclipse.viatra.query.patternlanguage.emf.EMFPatternLanguageStandaloneSetup | 5 | import org.eclipse.viatra.query.patternlanguage.emf.EMFPatternLanguageStandaloneSetup |
10 | 6 | ||
11 | class PatternLanguageWithRSSetup extends EMFPatternLanguageStandaloneSetup{ | 7 | class 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 @@ | |||
1 | package hu.bme.mit.inf.dslreasoner.application.execution | 1 | package hu.bme.mit.inf.dslreasoner.application.execution |
2 | 2 | ||
3 | import com.google.inject.Inject | ||
4 | import com.google.inject.Injector | ||
3 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigReference | 5 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigReference |
4 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigSpecification | 6 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigSpecification |
5 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigurationScript | 7 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigurationScript |
@@ -33,11 +35,19 @@ import org.eclipse.core.runtime.jobs.Job | |||
33 | import org.eclipse.emf.common.util.URI | 35 | import org.eclipse.emf.common.util.URI |
34 | import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor | 36 | import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor |
35 | 37 | ||
36 | @FinalFieldsConstructor | ||
37 | class ScriptExecutor { | 38 | class 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 @@ | |||
1 | package hu.bme.mit.inf.dslreasoner.viatra2logic | 1 | package hu.bme.mit.inf.dslreasoner.viatra2logic |
2 | |||
3 | import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic | 2 | import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic |
4 | import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic_Trace | 3 | import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic_Trace |
5 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicProblemBuilder | 4 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicProblemBuilder |
@@ -17,27 +16,27 @@ import org.eclipse.emf.ecore.EStructuralFeature | |||
17 | import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey | 16 | import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey |
18 | import org.eclipse.viatra.query.runtime.emf.types.EDataTypeInSlotsKey | 17 | import org.eclipse.viatra.query.runtime.emf.types.EDataTypeInSlotsKey |
19 | import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey | 18 | import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey |
19 | import org.eclipse.viatra.query.runtime.matchers.aggregators.DoubleSumOperator | ||
20 | import org.eclipse.viatra.query.runtime.matchers.aggregators.ExtremumOperator | ||
21 | import org.eclipse.viatra.query.runtime.matchers.aggregators.ExtremumOperator.Extreme | ||
22 | import org.eclipse.viatra.query.runtime.matchers.aggregators.IntegerSumOperator | ||
23 | import org.eclipse.viatra.query.runtime.matchers.aggregators.LongSumOperator | ||
20 | import org.eclipse.viatra.query.runtime.matchers.psystem.PConstraint | 24 | import org.eclipse.viatra.query.runtime.matchers.psystem.PConstraint |
21 | import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable | 25 | import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable |
26 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.AggregatorConstraint | ||
22 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality | 27 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality |
23 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter | 28 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter |
29 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExpressionEvaluation | ||
24 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Inequality | 30 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Inequality |
25 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.NegativePatternCall | 31 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.NegativePatternCall |
32 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.PatternMatchCounter | ||
33 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.TypeFilterConstraint | ||
26 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.BinaryTransitiveClosure | 34 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.BinaryTransitiveClosure |
27 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.ConstantValue | 35 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.ConstantValue |
28 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.PositivePatternCall | 36 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.PositivePatternCall |
29 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint | 37 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint |
30 | 38 | ||
31 | import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* | 39 | import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* |
32 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.TypeFilterConstraint | ||
33 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.AggregatorConstraint | ||
34 | import org.eclipse.viatra.query.runtime.matchers.aggregators.DoubleSumOperator | ||
35 | import org.eclipse.viatra.query.runtime.matchers.aggregators.IntegerSumOperator | ||
36 | import org.eclipse.viatra.query.runtime.matchers.aggregators.LongSumOperator | ||
37 | import org.eclipse.viatra.query.runtime.matchers.aggregators.ExtremumOperator | ||
38 | import org.eclipse.viatra.query.runtime.matchers.aggregators.ExtremumOperator.Extreme | ||
39 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.PatternMatchCounter | ||
40 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExpressionEvaluation | ||
41 | 40 | ||
42 | class Constraint2Logic { | 41 | class 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 @@ | |||
1 | package hu.bme.mit.inf.dslreasoner.viatra2logic | 1 | package hu.bme.mit.inf.dslreasoner.viatra2logic |
2 | 2 | ||
3 | import com.google.inject.Injector | ||
3 | import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic | 4 | import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic |
4 | import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic_Trace | 5 | import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic_Trace |
5 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicProblemBuilder | 6 | import 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 | ||
53 | class Viatra2Logic { | 54 | class 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 @@ | |||
1 | package hu.bme.mit.inf.dslreasoner.viatra2logic | 1 | package hu.bme.mit.inf.dslreasoner.viatra2logic |
2 | 2 | ||
3 | import com.google.inject.Injector | ||
3 | import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic | 4 | import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic |
4 | import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic_Trace | 5 | import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic_Trace |
5 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicProblemBuilder | 6 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicProblemBuilder |
@@ -18,7 +19,6 @@ import java.util.Set | |||
18 | import org.eclipse.emf.ecore.EEnum | 19 | import org.eclipse.emf.ecore.EEnum |
19 | import org.eclipse.emf.ecore.EcorePackage | 20 | import org.eclipse.emf.ecore.EcorePackage |
20 | import org.eclipse.viatra.query.patternlanguage.emf.EMFPatternLanguageStandaloneSetup | 21 | import org.eclipse.viatra.query.patternlanguage.emf.EMFPatternLanguageStandaloneSetup |
21 | import org.eclipse.viatra.query.patternlanguage.emf.specification.XBaseEvaluator | ||
22 | import org.eclipse.viatra.query.runtime.emf.EMFQueryMetaContext | 22 | import org.eclipse.viatra.query.runtime.emf.EMFQueryMetaContext |
23 | import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey | 23 | import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey |
24 | import org.eclipse.viatra.query.runtime.emf.types.EClassUnscopedTransitiveInstancesKey | 24 | import org.eclipse.viatra.query.runtime.emf.types.EClassUnscopedTransitiveInstancesKey |
@@ -26,7 +26,6 @@ import org.eclipse.viatra.query.runtime.emf.types.EDataTypeInSlotsKey | |||
26 | import org.eclipse.viatra.query.runtime.matchers.context.IInputKey | 26 | import org.eclipse.viatra.query.runtime.matchers.context.IInputKey |
27 | import org.eclipse.viatra.query.runtime.matchers.context.common.JavaTransitiveInstancesKey | 27 | import org.eclipse.viatra.query.runtime.matchers.context.common.JavaTransitiveInstancesKey |
28 | import org.eclipse.viatra.query.runtime.matchers.planning.helpers.TypeHelper | 28 | import org.eclipse.viatra.query.runtime.matchers.planning.helpers.TypeHelper |
29 | import org.eclipse.viatra.query.runtime.matchers.psystem.IExpressionEvaluator | ||
30 | import org.eclipse.viatra.query.runtime.matchers.psystem.PBody | 29 | import org.eclipse.viatra.query.runtime.matchers.psystem.PBody |
31 | import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable | 30 | import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable |
32 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.AggregatorConstraint | 31 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.AggregatorConstraint |
@@ -40,285 +39,275 @@ import org.eclipse.xtext.xbase.typesystem.IBatchTypeResolver | |||
40 | import org.eclipse.xtext.xbase.typesystem.references.UnknownTypeReference | 39 | import org.eclipse.xtext.xbase.typesystem.references.UnknownTypeReference |
41 | 40 | ||
42 | import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* | 41 | import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* |
43 | import org.eclipse.xtext.xbase.typesystem.references.InnerTypeReference | ||
44 | 42 | ||
45 | class Viatra2LogicTypeInferer{ | 43 | class 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 | |||
6 | import com.google.inject.Injector | 6 | import com.google.inject.Injector |
7 | import com.google.inject.multibindings.Multibinder | 7 | import com.google.inject.multibindings.Multibinder |
8 | import com.google.inject.name.Names | 8 | import com.google.inject.name.Names |
9 | import com.google.inject.util.Modules | ||
10 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.LogiclanguagePackage | 9 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.LogiclanguagePackage |
11 | import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicproblemPackage | 10 | import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicproblemPackage |
12 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialinterpretationPackage | 11 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialinterpretationPackage |
@@ -46,7 +45,6 @@ import org.eclipse.xtext.scoping.IScope | |||
46 | import org.eclipse.xtext.scoping.IScopeProvider | 45 | import org.eclipse.xtext.scoping.IScopeProvider |
47 | import org.eclipse.xtext.scoping.impl.AbstractDeclarativeScopeProvider | 46 | import org.eclipse.xtext.scoping.impl.AbstractDeclarativeScopeProvider |
48 | import org.eclipse.xtext.scoping.impl.SimpleScope | 47 | import org.eclipse.xtext.scoping.impl.SimpleScope |
49 | import org.eclipse.xtext.service.AbstractGenericModule | ||
50 | import org.eclipse.xtext.service.SingletonBinding | 48 | import org.eclipse.xtext.service.SingletonBinding |
51 | import org.eclipse.xtext.workspace.IProjectConfigProvider | 49 | import 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() { | |
70 | package 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 | ||
99 | package class NullProjectConfigProvider implements IProjectConfigProvider { | 94 | package 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 | ||