Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDennis Wagelaar2023-03-11 18:08:34 +0000
committerDennis Wagelaar2023-03-11 18:08:34 +0000
commit5e9a5225bb8b24b209b9bb2ad3621c6ac85b9e3f (patch)
tree6c36f328106852a2b1cc1081dba8abac8ee504ce
parent7751eae75b1818fc2632707845b6519bad377ce0 (diff)
downloadorg.eclipse.atl-5e9a5225bb8b24b209b9bb2ad3621c6ac85b9e3f.tar.gz
org.eclipse.atl-5e9a5225bb8b24b209b9bb2ad3621c6ac85b9e3f.tar.xz
org.eclipse.atl-5e9a5225bb8b24b209b9bb2ad3621c6ac85b9e3f.zip
Bug 581655: Feature: Local search plans
Change-Id: If2c268b11f9e351570700154cebde40f442c3047 Signed-off-by: Dennis Wagelaar <dwagelaar@gmail.com>
-rw-r--r--plugins/org.eclipse.m2m.atl.emftvm.compiler/build.properties6
-rw-r--r--plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLSearchPlan.atl138
-rw-r--r--plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLSearchPlan.emftvmbin0 -> 12177 bytes
-rw-r--r--plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLtoEMFTVM.atl54
-rw-r--r--plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLtoEMFTVM.emftvmbin129759 -> 133769 bytes
-rw-r--r--plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/OCLLib.atl75
-rw-r--r--plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/OCLLib.emftvmbin0 -> 4430 bytes
-rw-r--r--plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/OCLtoEMFTVM.atl112
-rw-r--r--plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/OCLtoEMFTVM.emftvmbin94963 -> 101113 bytes
-rw-r--r--tests/org.eclipse.m2m.atl.emftvm.tests/launch/ATLtoEMFTVM RefiningModeTest.launch68
-rw-r--r--tests/org.eclipse.m2m.atl.emftvm.tests/launch/ATLtoEMFTVM SearchPlanTest.launch39
-rw-r--r--tests/org.eclipse.m2m.atl.emftvm.tests/launch/ATLtoEMFTVM.launch69
-rw-r--r--tests/org.eclipse.m2m.atl.emftvm.tests/launch/InlineCodeblocks SearchPlanTest.launch31
-rw-r--r--tests/org.eclipse.m2m.atl.emftvm.tests/src/org/eclipse/m2m/atl/emftvm/tests/compiler/CompilerTest.java21
-rw-r--r--tests/org.eclipse.m2m.atl.emftvm.tests/src/org/eclipse/m2m/atl/emftvm/tests/integration/IntegrationTest.java21
-rw-r--r--tests/org.eclipse.m2m.atl.emftvm.tests/test-data/Regression/Bug425492.emftvmbin4244 -> 4166 bytes
-rw-r--r--tests/org.eclipse.m2m.atl.emftvm.tests/test-data/SearchPlanTest-out.ecore760
-rw-r--r--tests/org.eclipse.m2m.atl.emftvm.tests/test-data/SearchPlanTest.atl151
-rw-r--r--tests/org.eclipse.m2m.atl.emftvm.tests/test-data/SearchPlanTest.ecore42
-rw-r--r--tests/org.eclipse.m2m.atl.emftvm.tests/test-data/SearchPlanTest.emftvmbin0 -> 12785 bytes
-rw-r--r--tests/org.eclipse.m2m.atl.emftvm.tests/transformations/.gitignore1
-rw-r--r--tests/org.eclipse.m2m.atl.emftvm.tests/transformations/TestATLSearchPlan.atl84
22 files changed, 1557 insertions, 115 deletions
diff --git a/plugins/org.eclipse.m2m.atl.emftvm.compiler/build.properties b/plugins/org.eclipse.m2m.atl.emftvm.compiler/build.properties
index 68e7a5a4..48ce0c16 100644
--- a/plugins/org.eclipse.m2m.atl.emftvm.compiler/build.properties
+++ b/plugins/org.eclipse.m2m.atl.emftvm.compiler/build.properties
@@ -11,7 +11,11 @@ bin.includes = META-INF/,\
transformations/ATLtoEMFTVM.atl,\
transformations/EMFTVMCopy.atl,\
transformations/InlineCodeblocks.atl,\
- transformations/OCLtoEMFTVM.atl
+ transformations/OCLtoEMFTVM.atl,\
+ transformations/ATLSearchPlan.atl,\
+ transformations/ATLSearchPlan.emftvm,\
+ transformations/OCLLib.atl,\
+ transformations/OCLLib.emftvm
source.. = src/
output.. = bin/
src.includes = transformations/ATLWFR.atl,\
diff --git a/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLSearchPlan.atl b/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLSearchPlan.atl
new file mode 100644
index 00000000..184b9e52
--- /dev/null
+++ b/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLSearchPlan.atl
@@ -0,0 +1,138 @@
+-- @atlcompiler emftvm
+-- @path ATL=/org.eclipse.m2m.atl.common/model/ATL.ecore
+-- Helpers for generating ATL local search plans
+library ATLSearchPlan;
+
+uses OCLLib;
+
+--- Returns this OclExpression as a Sequence of sub-expressions to be combined in a conjuction (and)
+helper context OclAny def : asConjunction : Sequence(ATL!OclExpression) =
+ Sequence{};
+
+--- Returns this OclExpression as a Sequence of sub-expressions to be combined in a conjuction (and)
+helper context ATL!OclExpression def : asConjunction : Sequence(ATL!OclExpression) =
+ Sequence{self};
+
+--- Returns this OclExpression as a Sequence of sub-expressions to be combined in a conjuction (and)
+helper context ATL!OperatorCallExp def : asConjunction : Sequence(ATL!OclExpression) =
+ if not self.isStatic and self.operationName = 'and' then
+ Sequence{self.source.asConjunction, self.arguments->first().asConjunction}->flatten()
+ else
+ super.asConjunction
+ endif;
+
+--- Returns the VariableExp that self can use as an InputRuleElement.binding, or OclUndefined
+helper context ATL!CollectionOperationCallExp def : canBindWith : ATL!InPatternElement =
+ if not self.isStatic and self.operationName = 'includes' and self.arguments->size() = 1 then
+ self.arguments->first().inPatternElement
+ else
+ super.canBindWith
+ endif;
+
+--- Returns the VariableExp that self can use as an InputRuleElement.binding, or OclUndefined
+helper context ATL!OperatorCallExp def : canBindWith : ATL!InPatternElement =
+ if not self.isStatic and self.operationName = '=' and self.arguments->size() = 1 then
+ if self.source.inPatternElement.oclIsUndefined() then
+ self.arguments->first().inPatternElement
+ else
+ self.source.inPatternElement
+ endif
+ else
+ super.canBindWith
+ endif;
+
+--- Returns the sub-expression of this OclExpression that should be evaluated for the InputRuleElement.binding, or OclUndefined
+helper context ATL!CollectionOperationCallExp def : bindingSubExp : ATL!OclExpression =
+ if self.canBindWith.oclIsUndefined() then
+ super.bindingSubExp
+ else
+ self.source
+ endif;
+
+--- Returns the sub-expression of this OclExpression that should be evaluated for the InputRuleElement.binding, or OclUndefined
+helper context ATL!OperatorCallExp def : bindingSubExp : ATL!OclExpression =
+ if self.canBindWith.oclIsUndefined() then
+ super.bindingSubExp
+ else
+ if self.source.inPatternElement.oclIsUndefined() then
+ self.source
+ else
+ self.arguments->first()
+ endif
+ endif;
+
+--- Returns the contained VariableExp instances that reference InPatternElements
+helper context OclAny def : references : Set(ATL!VariableExp) =
+ Set{};
+
+--- Returns the contained VariableExp instances that reference InPatternElements
+helper context ATL!OclExpression def : references : Set(ATL!VariableExp) =
+ self.eContents()->collect(c | c.references)->flatten();
+
+--- Returns the contained VariableExp instances that reference InPatternElements
+helper context ATL!VariableExp def : references : Set(ATL!VariableExp) =
+ if self.inPatternElement.oclIsUndefined() then
+ super.references
+ else
+ Set{self.inPatternElement}
+ endif;
+
+--- Returns the InPatternElement that self refers to, or OclUndefined
+helper context ATL!VariableExp def : inPatternElement : ATL!InPatternElement =
+ if self.referredVariable.oclIsKindOf(ATL!InPatternElement) then
+ self
+ else
+ OclUndefined
+ endif;
+
+--- Returns all possible InputRuleElement bindings for self
+helper context ATL!InPatternElement def : bindings : Sequence(ATL!OclExpression) =
+ let successors : Sequence(ATL!InPatternElement) =
+ self.inPattern.elements
+ ->subSequence(self.inPattern.elements->indexOf(self), self.inPattern.elements->size())
+ ->select(s | s = self or s.bindings->notEmpty())
+ in
+ self.inPattern.filter.asConjunction
+ ->reject(exp | exp.canBindWith.oclIsUndefined())
+ ->reject(exp |
+ let otherReferences : Set(ATL!VariableExp) =
+ exp.references->excluding(exp.canBindWith)
+ in
+ otherReferences->exists(r | successors->includes(r.referredVariable))
+ )
+ ->select(exp | exp.canBindWith.referredVariable = self);
+
+--- Returns the containing ATL rule, or OclUndefined.
+helper context OclAny def : containingRule : ATL!Rule =
+ let parent : OclAny = self.refImmediateComposite() in
+ if parent.oclIsKindOf(ATL!Rule) then parent
+ else if not parent.oclIsUndefined() then parent.containingRule
+ else OclUndefined
+ endif endif;
+
+--- Returns all InputRuleElement bindings for this rule.
+helper context ATL!MatchedRule def : allBindings : Map(ATL!OclExpression, ATL!InPatternElement) =
+ self.inPattern.elements
+ ->select(e | e.bindings->notEmpty())
+ ->mappedBySingle(e | e.bindings->first());
+
+--- Returns the InputRuleElement for which this OCL expression is part of its binding, or OclUndefined.
+helper context ATL!OclExpression def : partOfBindingFor : ATL!InPatternElement =
+ if self.containingRule.oclIsTypeOf(ATL!MatchedRule) then
+ let ipe : ATL!InPatternElement = self.containingRule.allBindings.get(self) in
+ if ipe.oclIsUndefined() then
+ self.refImmediateComposite().partOfBindingFor
+ else
+ ipe
+ endif
+ else
+ super.partOfBindingFor
+ endif;
+
+--- Returns 'true' if this OCL expression contains an InputRuleElement binding.
+helper context ATL!OperatorCallExp def : containsBinding : Boolean =
+ if not self.isStatic and self.operationName = 'and' then
+ self.source.isBinding or self.arguments->first().isBinding
+ else
+ super.containsBinding
+ endif;
diff --git a/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLSearchPlan.emftvm b/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLSearchPlan.emftvm
new file mode 100644
index 00000000..feb4dbe7
--- /dev/null
+++ b/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLSearchPlan.emftvm
Binary files differ
diff --git a/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLtoEMFTVM.atl b/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLtoEMFTVM.atl
index 88966866..03866a1d 100644
--- a/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLtoEMFTVM.atl
+++ b/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLtoEMFTVM.atl
@@ -8,6 +8,7 @@ module ATLtoEMFTVM;
create OUT : EMFTVM, PBS : Problem from IN : ATL;
uses OCLtoEMFTVM;
+uses ATLSearchPlan;
-- ======================================================================
-- helpers begin
@@ -434,7 +435,8 @@ rule InPatternElement {
rule InPatternElementWithFilter extends InPatternElement {
from s : ATL!InPatternElement in IN (
- not s.inPattern.filter.oclIsUndefined())
+ not s.inPattern.filter.oclIsUndefined() and
+ not s.inPattern.filter.firstNonBindingExp.oclIsUndefined())
to re : EMFTVM!InputRuleElement,
lv : EMFTVM!LocalVariable (
name <- s.varName,
@@ -442,6 +444,30 @@ rule InPatternElementWithFilter extends InPatternElement {
typeModel <- s.type.modelName)
}
+rule InPatternElementWithBinding extends InPatternElement {
+ from s : ATL!InPatternElement in IN (
+ not s.inPattern.filter.oclIsUndefined() and
+ s.bindings->notEmpty())
+ using {
+ bindingLoc : ATL!LocatedElement = s.bindings->first().bindingSubExp;
+ }
+ to re : EMFTVM!InputRuleElement (
+ binding <- ieb),
+ ieb : EMFTVM!CodeBlock (
+ lineNumbers <:= Sequence{iebln},
+ localVariables <- s.inPattern.elements
+ ->collect(e|thisModule.InPatternElementBindingVariable(s, e)),
+ nested <- Sequence{bindingLoc},
+ code <:= Sequence{invokeCb}),
+ iebln : EMFTVM!LineNumber (
+ startLine <- bindingLoc.startLine,
+ startColumn <- bindingLoc.startColumn,
+ endLine <- bindingLoc.endLine,
+ endColumn <- bindingLoc.endColumn,
+ instructions <:= Sequence{invokeCb}),
+ invokeCb : EMFTVM!InvokeCb (codeBlock <- bindingLoc)
+}
+
rule InPatternElementWithAction extends InPatternElement {
from s : ATL!InPatternElement in IN (
not s.inPattern."rule".actionBlock.oclIsUndefined())
@@ -452,6 +478,11 @@ rule InPatternElementWithAction extends InPatternElement {
typeModel <- s.type.modelName)
}
+-- @extends InPatternElementWithFilter, InPatternElementWithBinding
+rule InPatternElementWithBindingFilter {
+ from s : ATL!InPatternElement in IN
+ to re : EMFTVM!InputRuleElement
+}
-- @extends InPatternElementWithFilter, InPatternElementWithAction
rule InPatternElementWithFilterAndAction {
@@ -459,6 +490,18 @@ rule InPatternElementWithFilterAndAction {
to re : EMFTVM!InputRuleElement
}
+-- @extends InPatternElementWithBinding, InPatternElementWithAction
+rule InPatternElementWithBindingAndAction {
+ from s : ATL!InPatternElement in IN
+ to re : EMFTVM!InputRuleElement
+}
+
+-- @extends InPatternElementWithBindingFilter, InPatternElementWithFilterAndAction, InPatternElementWithBindingAndAction
+rule InPatternElementWithBindingFilterAndAction {
+ from s : ATL!InPatternElement in IN
+ to re : EMFTVM!InputRuleElement
+}
+
rule OutPatternElement {
from s : ATL!OutPatternElement in IN (
let r : ATL!Rule = s.outPattern."rule" in
@@ -721,16 +764,17 @@ rule MatchedRule {
rule MatchedRuleWithFilter extends MatchedRule {
from s : ATL!MatchedRule in IN (
- not s.inPattern.filter.oclIsUndefined())
+ not s.inPattern.filter.oclIsUndefined() and
+ not s.inPattern.filter.firstNonBindingExp.oclIsUndefined())
using {
- matchLoc : ATL!LocatedElement = s.inPattern.filter;
+ matchLoc : ATL!LocatedElement = s.inPattern.filter.firstNonBindingExp;
}
to t : EMFTVM!Rule (
matcher <- m),
m : EMFTVM!CodeBlock (
lineNumbers <:= Sequence{mln},
localVariables <- s.inPattern.elements->collect(e|thisModule.resolveTemp(e, 'lv')),
- nested <- Sequence{s.inPattern.filter},
+ nested <- Sequence{matchLoc},
code <:= Sequence{invokeCb}),
mln : EMFTVM!LineNumber (
startLine <- matchLoc.startLine,
@@ -738,7 +782,7 @@ rule MatchedRuleWithFilter extends MatchedRule {
endLine <- matchLoc.endLine,
endColumn <- matchLoc.endColumn,
instructions <:= Sequence{invokeCb}),
- invokeCb : EMFTVM!InvokeCb (codeBlock <- s.inPattern.filter)
+ invokeCb : EMFTVM!InvokeCb (codeBlock <- matchLoc)
}
rule MatchedRuleWithAction extends MatchedRule {
diff --git a/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLtoEMFTVM.emftvm b/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLtoEMFTVM.emftvm
index b3b29a6b..674367da 100644
--- a/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLtoEMFTVM.emftvm
+++ b/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLtoEMFTVM.emftvm
Binary files differ
diff --git a/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/OCLLib.atl b/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/OCLLib.atl
new file mode 100644
index 00000000..ab5aee4e
--- /dev/null
+++ b/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/OCLLib.atl
@@ -0,0 +1,75 @@
+-- @atlcompiler emftvm
+-- @path ATL=/org.eclipse.m2m.atl.common/model/ATL.ecore
+-- OCL helpers
+library OCLLib;
+
+--- Returns 'true' if self is considered static, 'false' otherwise.
+helper context ATL!OclFeatureDefinition def : isStatic : String =
+ self.context_.oclIsUndefined();
+
+--- Returns 'true' if self is considered static, 'false' otherwise.
+helper context ATL!OclFeature def : isStatic : String =
+ self.definition.isStatic;
+
+--- Returns 'true' if self is considered static, 'false' otherwise.
+helper context ATL!PropertyCallExp def : isStatic : Boolean =
+ if self.source.oclIsKindOf(ATL!VariableExp) then
+ self.source.referredVariable.varName = 'thisModule'
+ else self.source.oclIsUndefined() endif;
+
+--- Returns self if it refers to an InPatternElement, or OclUndefined
+helper context OclAny def : inPatternElement : ATL!InPatternElement =
+ OclUndefined;
+
+--- Returns the InPatternElement that self can use as an InputRuleElement.binding, or OclUndefined
+helper context OclAny def : canBindWith : ATL!InPatternElement =
+ OclUndefined;
+
+--- Returns the sub-expression of this OclExpression that should be evaluated for the InputRuleElement.binding, or self
+helper context OclAny def : bindingSubExp : ATL!OclExpression =
+ self;
+
+--- Returns the InputRuleElement for which this OCL expression is part of its binding, or OclUndefined.
+helper context OclAny def : partOfBindingFor : ATL!InPatternElement =
+ OclUndefined;
+
+--- Returns 'true' if this OCL expression is part of an InputRuleElement binding.
+helper context OclAny def : partOfBinding : Boolean =
+ not self.partOfBindingFor.oclIsUndefined();
+
+--- Returns 'true' if this OCL expression contains an InputRuleElement binding.
+helper context OclAny def : containsBinding : Boolean =
+ false;
+
+--- Returns 'true' if this OCL expression is part of or contains an InputRuleElement binding.
+helper context OclAny def : isBinding : Boolean =
+ self.partOfBinding or self.containsBinding;
+
+--- Returns the first contained OclExpression that is not an InputRuleElement binding.
+helper context ATL!OclExpression def : firstNonBindingExp : ATL!OclExpression =
+ if self.partOfBinding then
+ OclUndefined
+ else
+ self
+ endif;
+
+--- Returns the first contained OclExpression that is not an InputRuleElement binding.
+helper context ATL!OperatorCallExp def : firstNonBindingExp : ATL!OclExpression =
+ if not self.isStatic and self.operationName = 'and' then
+ if self.source.firstNonBindingExp.oclIsUndefined() then
+ if self.arguments->first().firstNonBindingExp.oclIsUndefined() then
+ OclUndefined
+ else
+ self.arguments->first()
+ endif
+ else
+ if self.arguments->first().firstNonBindingExp.oclIsUndefined() then
+ self.source
+ else
+ self
+ endif
+ endif
+ else
+ super.firstNonBindingExp
+ endif;
+ \ No newline at end of file
diff --git a/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/OCLLib.emftvm b/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/OCLLib.emftvm
new file mode 100644
index 00000000..89418b17
--- /dev/null
+++ b/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/OCLLib.emftvm
Binary files differ
diff --git a/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/OCLtoEMFTVM.atl b/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/OCLtoEMFTVM.atl
index 59eae753..f39a8441 100644
--- a/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/OCLtoEMFTVM.atl
+++ b/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/OCLtoEMFTVM.atl
@@ -7,6 +7,8 @@ module OCLtoEMFTVM;
create OUT : EMFTVM, PBS : Problem from IN : ATL;
+uses OCLLib;
+
-- ======================================================================
-- helpers begin
-- ======================================================================
@@ -79,12 +81,6 @@ helper context ATL!OclFeatureDefinition def : isAttribute : Boolean =
helper context ATL!OclFeatureDefinition def : isOperation : Boolean =
self.definition.feature.oclIsKindOf(ATL!Operation);
-helper context ATL!OclFeatureDefinition def : isStatic : String =
- self.context_.oclIsUndefined();
-
-helper context ATL!OclFeature def : isStatic : String =
- self.definition.isStatic;
-
helper context ATL!OclFeatureDefinition def : contextType : ATL!"OclType" =
self.context_.context_;
@@ -120,11 +116,6 @@ helper context OclAny def : parentFeatureDef : ATL!OclFeatureDefinition =
else self.debug('Self variable not found in')
endif endif;
-helper context ATL!PropertyCallExp def : isStatic : Boolean =
- if self.source.oclIsKindOf(ATL!VariableExp) then
- self.source.referredVariable.varName = 'thisModule'
- else self.source.oclIsUndefined() endif;
-
helper context ATL!OclExpression def : parentIterators : Sequence(ATL!Iterator) =
if self.loopExp.oclIsUndefined() then Sequence{}
else self.loopExp.iterators endif;
@@ -172,30 +163,6 @@ helper context ATL!OclExpression def : isFilterExpression : Boolean =
(parent.oclIsKindOf(ATL!InPattern) and parent.filter = self)
or parent.isFilterExpression;
---- Returns 'true' if this OCL expression is a rule search plan.
-helper context OclAny def : isSearchPlan : Boolean =
- false;
-
---- Returns 'true' if this OCL expression is a rule search plan.
-helper context ATL!OperationCallExp def : isSearchPlan : Boolean =
- not self.isStatic and (
- (
- (self.operationName = '=' or self.operationName = 'includes') and
- self.arguments->includes(a |
- a.oclIsKindOf(ATL!VariableExp) and a.referredVariable.isMatchedRuleField
- )
- ) or (
- self.operationName = 'and' and
- self.arguments->includes(a |
- a.isSearchPlan
- )
- )
- );
-
---- Returns 'true' if this OCL expression is part of a rule search plan.
-helper context ATL!NavigationOrAttributeCallExp def : isSearchPlanExpression : Boolean =
- not self.isStatic and self.refImmediateComposite().isSearchPlanExpression;
-
-- ======================================================================
-- helpers end
-- ======================================================================
@@ -345,7 +312,7 @@ rule IterateResult {
-------------- OclExpressions -----------------
abstract rule OclExpression {
- from s : ATL!OclExpression in IN
+ from s : ATL!OclExpression in IN (s.partOfBinding implies s.refImmediateComposite().partOfBinding)
to cb : EMFTVM!CodeBlock (
localVariables <- s.parentIterators->union(s.parentAccumulators),
lineNumbers <:= Sequence{ln}),
@@ -397,14 +364,15 @@ rule SuperNavigationOrAttributeCallExp extends OclExpression {
rule OperationCallExp extends OclExpression {
from s : ATL!OperationCallExp in IN (
- not s.isStatic and
+ not s.isStatic and
not s.source.oclIsKindOf(ATL!SuperExp) and
s.operationName <> 'not' and
s.operationName <> 'and' and
s.operationName <> 'or' and
s.operationName <> 'xor' and
s.operationName <> 'implies' and
- s.operationName <> 'oclIsUndefined')
+ s.operationName <> 'oclIsUndefined' and
+ (not s.partOfBinding or s.canBindWith.oclIsUndefined()))
to cb : EMFTVM!CodeBlock (
nested <- s.arguments->prepend(s.source),
code <:= Sequence{invokeAllCbs, invoke}),
@@ -416,6 +384,34 @@ rule OperationCallExp extends OclExpression {
argcount <- s.arguments->size())
}
+rule BindingOperationCallExp extends OclExpression {
+ from s : ATL!OperationCallExp in IN (
+ not s.isStatic and
+ not s.source.oclIsKindOf(ATL!SuperExp) and
+ s.operationName <> 'not' and
+ s.operationName <> 'and' and
+ s.operationName <> 'or' and
+ s.operationName <> 'xor' and
+ s.operationName <> 'implies' and
+ s.operationName <> 'oclIsUndefined' and
+ s.partOfBinding and
+ not s.canBindWith.oclIsUndefined())
+ using {
+ inPatternExp : ATL!OclExpression =
+ if s.source.inPatternElement.oclIsUndefined() then
+ s.arguments->first()
+ else
+ s.source
+ endif;
+ }
+ to cb : EMFTVM!CodeBlock (
+ nested <- Sequence{inPatternExp},
+ code <:= Sequence{invokeAllCbs}),
+ ln : EMFTVM!LineNumber (
+ instructions <:= Sequence{invokeAllCbs}),
+ invokeAllCbs : EMFTVM!InvokeAllCbs -- [..., inPatternExp]
+}
+
rule NotOperationCallExp extends OclExpression {
from s : ATL!OperationCallExp in IN (
not s.isStatic and s.operationName = 'not')
@@ -430,7 +426,7 @@ rule NotOperationCallExp extends OclExpression {
rule AndOperationCallExp extends OclExpression {
from s : ATL!OperationCallExp in IN (
- not s.isStatic and s.operationName = 'and')
+ not s.isStatic and s.operationName = 'and' and (s.partOfBinding or s.firstNonBindingExp = s))
to cb : EMFTVM!CodeBlock (
nested <- s.arguments->prepend(s.source),
code <:= Sequence{invokeCb, _and}),
@@ -440,6 +436,19 @@ rule AndOperationCallExp extends OclExpression {
_and : EMFTVM!And (codeBlock <- s.arguments->first()) -- [..., result]
}
+rule BindingAndOperationCallExp extends OclExpression {
+ from s : ATL!OperationCallExp in IN (
+ not s.isStatic and s.operationName = 'and' and not s.partOfBinding and
+ not s.firstNonBindingExp.oclIsUndefined() and s.firstNonBindingExp <> s and
+ not s.refImmediateComposite().oclIsKindOf(ATL!InPattern))
+ to cb : EMFTVM!CodeBlock (
+ nested <- Sequence{s.firstNonBindingExp},
+ code <:= Sequence{invokeCb}),
+ ln : EMFTVM!LineNumber (
+ instructions <:= Sequence{invokeCb}),
+ invokeCb : EMFTVM!InvokeCb (codeBlock <- s.firstNonBindingExp, argcount <- 0) -- [..., firstNonBindingExp]
+}
+
rule OrOperationCallExp extends OclExpression {
from s : ATL!OperationCallExp in IN (
not s.isStatic and s.operationName = 'or')
@@ -578,12 +587,24 @@ abstract rule VariableExp extends OclExpression {
rule NotSelfVariableExp extends VariableExp {
from s : ATL!VariableExp in IN (
- s.referredVariable.varName <> 'self')
+ s.referredVariable.varName <> 'self' and
+ not (s.referredVariable.oclIsKindOf(ATL!InPatternElement) and s.partOfBinding))
to cb : EMFTVM!CodeBlock,
load : EMFTVM!Load (
localVariable <- s.localVariable())
}
+rule InPatternElementBindingVariableExp extends VariableExp {
+ from s : ATL!VariableExp in IN (
+ s.referredVariable.varName <> 'self' and
+ s.referredVariable.oclIsKindOf(ATL!InPatternElement) and
+ s.partOfBinding and
+ s.referredVariable <> s.partOfBindingFor)
+ to cb : EMFTVM!CodeBlock,
+ load : EMFTVM!Load (
+ localVariable <- thisModule.InPatternElementBindingVariable(s.partOfBindingFor, s.referredVariable))
+}
+
rule SelfVariableExp extends VariableExp {
from s : ATL!VariableExp in IN (
s.referredVariable.varName = 'self')
@@ -868,6 +889,15 @@ lazy rule TuplePart {
}
}
+unique lazy rule InPatternElementBindingVariable {
+ from s : ATL!InPatternElement,
+ ipe : ATL!InPatternElement
+ to lv : EMFTVM!LocalVariable (
+ name <- ipe.varName,
+ type <- ipe.type.typeName,
+ typeModel <- ipe.type.modelName)
+}
+
-- ======================================================================
-- lazy rules end
--- ====================================================================== \ No newline at end of file
+-- ======================================================================
diff --git a/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/OCLtoEMFTVM.emftvm b/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/OCLtoEMFTVM.emftvm
index c20dc3a8..409e757e 100644
--- a/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/OCLtoEMFTVM.emftvm
+++ b/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/OCLtoEMFTVM.emftvm
Binary files differ
diff --git a/tests/org.eclipse.m2m.atl.emftvm.tests/launch/ATLtoEMFTVM RefiningModeTest.launch b/tests/org.eclipse.m2m.atl.emftvm.tests/launch/ATLtoEMFTVM RefiningModeTest.launch
index ea153727..47e3a57c 100644
--- a/tests/org.eclipse.m2m.atl.emftvm.tests/launch/ATLtoEMFTVM RefiningModeTest.launch
+++ b/tests/org.eclipse.m2m.atl.emftvm.tests/launch/ATLtoEMFTVM RefiningModeTest.launch
@@ -1,35 +1,39 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.m2m.atl.emftvm.launcher.EMFTVMTransformation">
-<stringAttribute key="ATL File Name" value="//org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLtoEMFTVM.atl"/>
-<booleanAttribute key="Disable JIT compiler" value="false"/>
-<booleanAttribute key="Display Timing Data" value="true"/>
-<booleanAttribute key="Enable JIT compiler" value="true"/>
-<mapAttribute key="Inout Model Options"/>
-<mapAttribute key="Inout Models"/>
-<mapAttribute key="Inout Models Output Locations"/>
-<mapAttribute key="Input Model Options"/>
-<mapAttribute key="Input Models">
-<mapEntry key="IN" value="platform:/resource/org.eclipse.m2m.atl.emftvm.tests/test-data/RefiningModeTest.atl"/>
-</mapAttribute>
-<mapAttribute key="Metamodel Options">
-<mapEntry key="ATL" value=""/>
-</mapAttribute>
-<mapAttribute key="Metamodels">
-<mapEntry key="ATL" value="http://www.eclipse.org/gmt/2005/ATL"/>
-<mapEntry key="EMFTVM" value="http://www.eclipse.org/m2m/atl/2011/EMFTVM"/>
-<mapEntry key="Problem" value="platform:/plugin/org.eclipse.m2m.atl.common/org/eclipse/m2m/atl/common/resources/Problem.ecore"/>
-</mapAttribute>
-<stringAttribute key="Module Name" value="ATLtoEMFTVM"/>
-<stringAttribute key="Module Path" value="/org.eclipse.m2m.atl.emftvm.compiler/transformations/"/>
-<mapAttribute key="Output Model Options">
-<mapEntry key="OUT" value="derivedFile"/>
-<mapEntry key="PBS" value="derivedFile"/>
-</mapAttribute>
-<mapAttribute key="Output Models">
-<mapEntry key="OUT" value="platform:/resource/org.eclipse.m2m.atl.emftvm.tests/test-data/RefiningModeTest.emftvm"/>
-<mapEntry key="PBS" value="platform:/resource/org.eclipse.m2m.atl.emftvm.tests/test-data/RefiningModeTest-problems.xmi"/>
-</mapAttribute>
-<listAttribute key="Superimpose">
-<listEntry value="//org.eclipse.m2m.atl.emftvm.compiler/transformations/OCLtoEMFTVM.asm"/>
-</listAttribute>
+ <stringAttribute key="ATL File Name" value="//org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLtoEMFTVM.atl"/>
+ <booleanAttribute key="Disable JIT compiler" value="false"/>
+ <booleanAttribute key="Display Profiling Data" value="false"/>
+ <booleanAttribute key="Display Timing Data" value="true"/>
+ <booleanAttribute key="Enable JIT compiler" value="true"/>
+ <mapAttribute key="Inout Model Options"/>
+ <mapAttribute key="Inout Models"/>
+ <mapAttribute key="Inout Models Output Locations"/>
+ <mapAttribute key="Input Model Options"/>
+ <mapAttribute key="Input Models">
+ <mapEntry key="IN" value="platform:/resource/org.eclipse.m2m.atl.emftvm.tests/test-data/RefiningModeTest.atl"/>
+ </mapAttribute>
+ <mapAttribute key="Metamodel Options">
+ <mapEntry key="ATL" value=""/>
+ </mapAttribute>
+ <mapAttribute key="Metamodels">
+ <mapEntry key="ATL" value="http://www.eclipse.org/gmt/2005/ATL"/>
+ <mapEntry key="EMFTVM" value="http://www.eclipse.org/m2m/atl/2011/EMFTVM"/>
+ <mapEntry key="Problem" value="platform:/plugin/org.eclipse.m2m.atl.common/org/eclipse/m2m/atl/common/resources/Problem.ecore"/>
+ </mapAttribute>
+ <stringAttribute key="Module Name" value="ATLtoEMFTVM"/>
+ <stringAttribute key="Module Path" value="/org.eclipse.m2m.atl.emftvm.compiler/transformations/"/>
+ <mapAttribute key="Output Model Options">
+ <mapEntry key="OUT" value="derivedFile"/>
+ <mapEntry key="PBS" value="derivedFile"/>
+ </mapAttribute>
+ <mapAttribute key="Output Models">
+ <mapEntry key="OUT" value="platform:/resource/org.eclipse.m2m.atl.emftvm.tests/test-data/RefiningModeTest.emftvm"/>
+ <mapEntry key="PBS" value="platform:/resource/org.eclipse.m2m.atl.emftvm.tests/test-data/RefiningModeTest-problems.xmi"/>
+ </mapAttribute>
+ <listAttribute key="Superimpose">
+ <listEntry value="//org.eclipse.m2m.atl.emftvm.compiler/transformations/OCLtoEMFTVM.asm"/>
+ <listEntry value="//org.eclipse.m2m.atl.emftvm.compiler/transformations/OCLLib.asm"/>
+ <listEntry value="//org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLSearchPlan.asm"/>
+ </listAttribute>
+ <booleanAttribute key="org.eclipse.debug.core.ATTR_FORCE_SYSTEM_CONSOLE_ENCODING" value="false"/>
</launchConfiguration>
diff --git a/tests/org.eclipse.m2m.atl.emftvm.tests/launch/ATLtoEMFTVM SearchPlanTest.launch b/tests/org.eclipse.m2m.atl.emftvm.tests/launch/ATLtoEMFTVM SearchPlanTest.launch
new file mode 100644
index 00000000..27512ade
--- /dev/null
+++ b/tests/org.eclipse.m2m.atl.emftvm.tests/launch/ATLtoEMFTVM SearchPlanTest.launch
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.m2m.atl.emftvm.launcher.EMFTVMTransformation">
+ <stringAttribute key="ATL File Name" value="//org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLtoEMFTVM.atl"/>
+ <booleanAttribute key="Disable JIT compiler" value="false"/>
+ <booleanAttribute key="Display Profiling Data" value="false"/>
+ <booleanAttribute key="Display Timing Data" value="true"/>
+ <booleanAttribute key="Enable JIT compiler" value="true"/>
+ <mapAttribute key="Inout Model Options"/>
+ <mapAttribute key="Inout Models"/>
+ <mapAttribute key="Inout Models Output Locations"/>
+ <mapAttribute key="Input Model Options"/>
+ <mapAttribute key="Input Models">
+ <mapEntry key="IN" value="platform:/resource/org.eclipse.m2m.atl.emftvm.tests/test-data/SearchPlanTest.atl"/>
+ </mapAttribute>
+ <mapAttribute key="Metamodel Options">
+ <mapEntry key="ATL" value=""/>
+ </mapAttribute>
+ <mapAttribute key="Metamodels">
+ <mapEntry key="ATL" value="http://www.eclipse.org/gmt/2005/ATL"/>
+ <mapEntry key="EMFTVM" value="http://www.eclipse.org/m2m/atl/2011/EMFTVM"/>
+ <mapEntry key="Problem" value="platform:/resource/org.eclipse.m2m.atl.common/model/Problem.ecore"/>
+ </mapAttribute>
+ <stringAttribute key="Module Name" value="ATLtoEMFTVM"/>
+ <stringAttribute key="Module Path" value="/org.eclipse.m2m.atl.emftvm.compiler/transformations/"/>
+ <mapAttribute key="Output Model Options">
+ <mapEntry key="OUT" value="derivedFile"/>
+ <mapEntry key="PBS" value="derivedFile"/>
+ </mapAttribute>
+ <mapAttribute key="Output Models">
+ <mapEntry key="OUT" value="platform:/resource/org.eclipse.m2m.atl.emftvm.tests/test-data/SearchPlanTest.emftvm"/>
+ <mapEntry key="PBS" value="platform:/resource/org.eclipse.m2m.atl.emftvm.tests/test-data/SearchPlanTest-problems.xmi"/>
+ </mapAttribute>
+ <listAttribute key="Superimpose">
+ <listEntry value="//org.eclipse.m2m.atl.emftvm.compiler/transformations/OCLtoEMFTVM.asm"/>
+ <listEntry value="//org.eclipse.m2m.atl.emftvm.compiler/transformations/OCLLib.asm"/>
+ <listEntry value="//org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLSearchPlan.asm"/>
+ </listAttribute>
+ <booleanAttribute key="org.eclipse.debug.core.ATTR_FORCE_SYSTEM_CONSOLE_ENCODING" value="false"/>
+</launchConfiguration>
diff --git a/tests/org.eclipse.m2m.atl.emftvm.tests/launch/ATLtoEMFTVM.launch b/tests/org.eclipse.m2m.atl.emftvm.tests/launch/ATLtoEMFTVM.launch
index 7637cb29..665d52ef 100644
--- a/tests/org.eclipse.m2m.atl.emftvm.tests/launch/ATLtoEMFTVM.launch
+++ b/tests/org.eclipse.m2m.atl.emftvm.tests/launch/ATLtoEMFTVM.launch
@@ -1,36 +1,39 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.m2m.atl.emftvm.launcher.EMFTVMTransformation">
-<stringAttribute key="ATL File Name" value="//org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLtoEMFTVM.atl"/>
-<booleanAttribute key="Disable JIT compiler" value="false"/>
-<booleanAttribute key="Display Profiling Data" value="true"/>
-<booleanAttribute key="Display Timing Data" value="true"/>
-<booleanAttribute key="Enable JIT compiler" value="true"/>
-<mapAttribute key="Inout Model Options"/>
-<mapAttribute key="Inout Models"/>
-<mapAttribute key="Inout Models Output Locations"/>
-<mapAttribute key="Input Model Options"/>
-<mapAttribute key="Input Models">
-<mapEntry key="IN" value="platform:/resource/org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLtoEMFTVM.atl"/>
-</mapAttribute>
-<mapAttribute key="Metamodel Options">
-<mapEntry key="ATL" value=""/>
-</mapAttribute>
-<mapAttribute key="Metamodels">
-<mapEntry key="ATL" value="http://www.eclipse.org/gmt/2005/ATL"/>
-<mapEntry key="EMFTVM" value="http://www.eclipse.org/m2m/atl/2011/EMFTVM"/>
-<mapEntry key="Problem" value="http://www.eclipse.org/gmt/2005/Problem"/>
-</mapAttribute>
-<stringAttribute key="Module Name" value="ATLtoEMFTVM"/>
-<stringAttribute key="Module Path" value="/org.eclipse.m2m.atl.emftvm.compiler/transformations/"/>
-<mapAttribute key="Output Model Options">
-<mapEntry key="OUT" value="derivedFile"/>
-<mapEntry key="PBS" value="derivedFile"/>
-</mapAttribute>
-<mapAttribute key="Output Models">
-<mapEntry key="OUT" value="platform:/resource/org.eclipse.m2m.atl.emftvm.tests/test-data/ATLtoEMFTVM.emftvm"/>
-<mapEntry key="PBS" value="platform:/resource/org.eclipse.m2m.atl.emftvm.tests/test-data/ATLtoEMFTVM-problems.xmi"/>
-</mapAttribute>
-<listAttribute key="Superimpose">
-<listEntry value="//org.eclipse.m2m.atl.emftvm.compiler/transformations/OCLtoEMFTVM.asm"/>
-</listAttribute>
+ <stringAttribute key="ATL File Name" value="//org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLtoEMFTVM.atl"/>
+ <booleanAttribute key="Disable JIT compiler" value="false"/>
+ <booleanAttribute key="Display Profiling Data" value="true"/>
+ <booleanAttribute key="Display Timing Data" value="true"/>
+ <booleanAttribute key="Enable JIT compiler" value="true"/>
+ <mapAttribute key="Inout Model Options"/>
+ <mapAttribute key="Inout Models"/>
+ <mapAttribute key="Inout Models Output Locations"/>
+ <mapAttribute key="Input Model Options"/>
+ <mapAttribute key="Input Models">
+ <mapEntry key="IN" value="platform:/resource/org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLtoEMFTVM.atl"/>
+ </mapAttribute>
+ <mapAttribute key="Metamodel Options">
+ <mapEntry key="ATL" value=""/>
+ </mapAttribute>
+ <mapAttribute key="Metamodels">
+ <mapEntry key="ATL" value="http://www.eclipse.org/gmt/2005/ATL"/>
+ <mapEntry key="EMFTVM" value="http://www.eclipse.org/m2m/atl/2011/EMFTVM"/>
+ <mapEntry key="Problem" value="http://www.eclipse.org/gmt/2005/Problem"/>
+ </mapAttribute>
+ <stringAttribute key="Module Name" value="ATLtoEMFTVM"/>
+ <stringAttribute key="Module Path" value="/org.eclipse.m2m.atl.emftvm.compiler/transformations/"/>
+ <mapAttribute key="Output Model Options">
+ <mapEntry key="OUT" value="derivedFile"/>
+ <mapEntry key="PBS" value="derivedFile"/>
+ </mapAttribute>
+ <mapAttribute key="Output Models">
+ <mapEntry key="OUT" value="platform:/resource/org.eclipse.m2m.atl.emftvm.tests/test-data/ATLtoEMFTVM.emftvm"/>
+ <mapEntry key="PBS" value="platform:/resource/org.eclipse.m2m.atl.emftvm.tests/test-data/ATLtoEMFTVM-problems.xmi"/>
+ </mapAttribute>
+ <listAttribute key="Superimpose">
+ <listEntry value="//org.eclipse.m2m.atl.emftvm.compiler/transformations/OCLtoEMFTVM.asm"/>
+ <listEntry value="//org.eclipse.m2m.atl.emftvm.compiler/transformations/OCLLib.asm"/>
+ <listEntry value="//org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLSearchPlan.asm"/>
+ </listAttribute>
+ <booleanAttribute key="org.eclipse.debug.core.ATTR_FORCE_SYSTEM_CONSOLE_ENCODING" value="false"/>
</launchConfiguration>
diff --git a/tests/org.eclipse.m2m.atl.emftvm.tests/launch/InlineCodeblocks SearchPlanTest.launch b/tests/org.eclipse.m2m.atl.emftvm.tests/launch/InlineCodeblocks SearchPlanTest.launch
new file mode 100644
index 00000000..5fa50327
--- /dev/null
+++ b/tests/org.eclipse.m2m.atl.emftvm.tests/launch/InlineCodeblocks SearchPlanTest.launch
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.m2m.atl.emftvm.launcher.EMFTVMTransformation">
+ <stringAttribute key="ATL File Name" value="//org.eclipse.m2m.atl.emftvm.compiler/transformations/InlineCodeblocks.atl"/>
+ <booleanAttribute key="Disable JIT compiler" value="false"/>
+ <booleanAttribute key="Display Profiling Data" value="false"/>
+ <booleanAttribute key="Display Timing Data" value="true"/>
+ <mapAttribute key="Inout Model Options">
+ <mapEntry key="IN" value="derivedFile"/>
+ </mapAttribute>
+ <mapAttribute key="Inout Models">
+ <mapEntry key="IN" value="platform:/resource/org.eclipse.m2m.atl.emftvm.tests/test-data/SearchPlanTest.emftvm"/>
+ </mapAttribute>
+ <mapAttribute key="Inout Models Output Locations">
+ <mapEntry key="IN" value="platform:/resource/org.eclipse.m2m.atl.emftvm.tests/test-data/SearchPlanTest-inlined.emftvm"/>
+ </mapAttribute>
+ <mapAttribute key="Input Model Options"/>
+ <mapAttribute key="Input Models"/>
+ <mapAttribute key="Metamodel Options"/>
+ <mapAttribute key="Metamodels">
+ <mapEntry key="EMFTVM" value="http://www.eclipse.org/m2m/atl/2011/EMFTVM"/>
+ </mapAttribute>
+ <stringAttribute key="Module Name" value="InlineCodeblocks"/>
+ <stringAttribute key="Module Path" value="/org.eclipse.m2m.atl.emftvm.compiler/transformations/"/>
+ <mapAttribute key="Output Model Options"/>
+ <mapAttribute key="Output Models"/>
+ <listAttribute key="Superimpose"/>
+ <booleanAttribute key="org.eclipse.debug.core.ATTR_FORCE_SYSTEM_CONSOLE_ENCODING" value="false"/>
+ <booleanAttribute key="org.eclipse.debug.core.capture_output" value="false"/>
+ <booleanAttribute key="org.eclipse.debug.ui.ATTR_CONSOLE_OUTPUT_ON" value="false"/>
+ <booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/>
+</launchConfiguration>
diff --git a/tests/org.eclipse.m2m.atl.emftvm.tests/src/org/eclipse/m2m/atl/emftvm/tests/compiler/CompilerTest.java b/tests/org.eclipse.m2m.atl.emftvm.tests/src/org/eclipse/m2m/atl/emftvm/tests/compiler/CompilerTest.java
index c13ee044..b596688c 100644
--- a/tests/org.eclipse.m2m.atl.emftvm.tests/src/org/eclipse/m2m/atl/emftvm/tests/compiler/CompilerTest.java
+++ b/tests/org.eclipse.m2m.atl.emftvm.tests/src/org/eclipse/m2m/atl/emftvm/tests/compiler/CompilerTest.java
@@ -69,10 +69,26 @@ public class CompilerTest extends EMFTVMTest {
public void testBindingStat() {
final Model outModel = compile(URI.createURI("test-data/BindingStatTest.atl", true));
assertEquals(null, validate(outModel));
+
+ final Model refModel = loadTestModel(new ResourceSetImpl(), "/test-data/BindingStatTest.emftvm");
+ assertEquals(refModel.getResource(), outModel.getResource());
+ }
+
+ /**
+ * Tests the compilation output for "SearchPlanTest.atl".
+ */
+ public void testSearchPlanTest() {
+ final Model outModel = compile(URI.createURI("test-data/SearchPlanTest.atl", true));
+ assertEquals(null, validate(outModel));
+
+ final Model refModel = loadTestModel(new ResourceSetImpl(), "/test-data/SearchPlanTest.emftvm");
+ assertEquals(refModel.getResource(), outModel.getResource());
}
/**
- * Tests regression of <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=405673">Bug # 405673</a>.
+ * Tests regression of
+ * <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=405673">Bug #
+ * 405673</a>.
*/
public void testBug405673() {
final Model outModel = compile(URI.createURI("test-data/Regression/Bug405673.atl", true));
@@ -216,8 +232,7 @@ public class CompilerTest extends EMFTVMTest {
/**
* Tests the compilation of a compiler module.
*
- * @param compilerModule
- * the compiler module name
+ * @param compilerModule the compiler module name
*/
protected void runCompilerModuleTest(final String compilerModule) {
final Model outModel = compile(URI
diff --git a/tests/org.eclipse.m2m.atl.emftvm.tests/src/org/eclipse/m2m/atl/emftvm/tests/integration/IntegrationTest.java b/tests/org.eclipse.m2m.atl.emftvm.tests/src/org/eclipse/m2m/atl/emftvm/tests/integration/IntegrationTest.java
index a8cbf70b..44b27efb 100644
--- a/tests/org.eclipse.m2m.atl.emftvm.tests/src/org/eclipse/m2m/atl/emftvm/tests/integration/IntegrationTest.java
+++ b/tests/org.eclipse.m2m.atl.emftvm.tests/src/org/eclipse/m2m/atl/emftvm/tests/integration/IntegrationTest.java
@@ -115,6 +115,27 @@ public class IntegrationTest extends EMFTVMTest {
}
/**
+ * Tests "SearchPlanTest.atl".
+ */
+ public void testSearchPlanTest() {
+ final ResourceSet rs = new ResourceSetImpl();
+ final ExecEnv env = EmftvmFactory.eINSTANCE.createExecEnv();
+ final TimingData td = new TimingData();
+ final Model in = loadTestModel(rs, "/test-data/SearchPlanTest.ecore");
+ final Model out = createTestModel(rs, "/test-data/SearchPlanTest-out.ecore");
+ env.registerInputModel("IN", in);
+ env.registerOutputModel("OUT", out);
+ env.loadModule(createTestModuleResolver(), "SearchPlanTest");
+ td.finishLoading();
+ env.run(td);
+ td.finish();
+
+ final ResourceSet refRs = new ResourceSetImpl();
+ final Model refOut = loadTestModel(refRs, "/test-data/SearchPlanTest-out.ecore");
+ assertEquals(refOut.getResource(), out.getResource());
+ }
+
+ /**
* Tests regression of
* <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=408391">Bug #
* 408391</a>.
diff --git a/tests/org.eclipse.m2m.atl.emftvm.tests/test-data/Regression/Bug425492.emftvm b/tests/org.eclipse.m2m.atl.emftvm.tests/test-data/Regression/Bug425492.emftvm
index 95daa888..9f481424 100644
--- a/tests/org.eclipse.m2m.atl.emftvm.tests/test-data/Regression/Bug425492.emftvm
+++ b/tests/org.eclipse.m2m.atl.emftvm.tests/test-data/Regression/Bug425492.emftvm
Binary files differ
diff --git a/tests/org.eclipse.m2m.atl.emftvm.tests/test-data/SearchPlanTest-out.ecore b/tests/org.eclipse.m2m.atl.emftvm.tests/test-data/SearchPlanTest-out.ecore
new file mode 100644
index 00000000..8cd9d2a2
--- /dev/null
+++ b/tests/org.eclipse.m2m.atl.emftvm.tests/test-data/SearchPlanTest-out.ecore
@@ -0,0 +1,760 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore">
+ <ecore:EPackage name="SearchPlanTest_ClassA">
+ <eClassifiers xsi:type="ecore:EClass" name="ClassA"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_ClassB">
+ <eClassifiers xsi:type="ecore:EClass" name="ClassB"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_ClassA1">
+ <eClassifiers xsi:type="ecore:EClass" name="ClassA1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_ClassB1">
+ <eClassifiers xsi:type="ecore:EClass" name="ClassB1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_ClassA2">
+ <eClassifiers xsi:type="ecore:EClass" name="ClassA2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_ClassB2">
+ <eClassifiers xsi:type="ecore:EClass" name="ClassB2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_ClassA3">
+ <eClassifiers xsi:type="ecore:EClass" name="ClassA3"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_ClassB3">
+ <eClassifiers xsi:type="ecore:EClass" name="ClassB3"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_AbstractClassC">
+ <eClassifiers xsi:type="ecore:EClass" name="AbstractClassC" abstract="true"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_InterfaceD">
+ <eClassifiers xsi:type="ecore:EClass" name="InterfaceD" abstract="true" interface="true"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_AbstractClassC1">
+ <eClassifiers xsi:type="ecore:EClass" name="AbstractClassC1" abstract="true"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_InterfaceD1">
+ <eClassifiers xsi:type="ecore:EClass" name="InterfaceD1" abstract="true" interface="true"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_AbstractClassC2">
+ <eClassifiers xsi:type="ecore:EClass" name="AbstractClassC2" abstract="true"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_InterfaceD2">
+ <eClassifiers xsi:type="ecore:EClass" name="InterfaceD2" abstract="true" interface="true"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_AbstractClassC3">
+ <eClassifiers xsi:type="ecore:EClass" name="AbstractClassC3" abstract="true"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_InterfaceD3">
+ <eClassifiers xsi:type="ecore:EClass" name="InterfaceD3" abstract="true" interface="true"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_DataTypeE">
+ <eClassifiers xsi:type="ecore:EDataType" name="DataTypeE" instanceClassName="java.lang.String"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_DataTypeE1">
+ <eClassifiers xsi:type="ecore:EDataType" name="DataTypeE1" instanceClassName="java.lang.String"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_DataTypeE2">
+ <eClassifiers xsi:type="ecore:EDataType" name="DataTypeE2" instanceClassName="java.lang.String"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_DataTypeE3">
+ <eClassifiers xsi:type="ecore:EDataType" name="DataTypeE3" instanceClassName="java.lang.String"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_http://www.eclipse.org/emf/2002/GenModel">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_http://www.eclipse.org/emf/2002/Ecore">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_http:///org/eclipse/emf/ecore/util/ExtendedMetaData1">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_http://www.eclipse.org/emf/2002/GenModel1">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_http://www.eclipse.org/emf/2002/Ecore1">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_http:///org/eclipse/emf/ecore/util/ExtendedMetaData2">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_http://www.eclipse.org/emf/2002/GenModel2">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_http://www.eclipse.org/emf/2002/Ecore2">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_http:///org/eclipse/emf/ecore/util/ExtendedMetaData3">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData3"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_http://www.eclipse.org/emf/2002/GenModel3">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel3"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_http://www.eclipse.org/emf/2002/Ecore3">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore3"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_http:///org/eclipse/emf/ecore/util/ExtendedMetaData_http:///org/eclipse/emf/ecore/util/ExtendedMetaData_http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_http:///org/eclipse/emf/ecore/util/ExtendedMetaData_http:///org/eclipse/emf/ecore/util/ExtendedMetaData_http://www.eclipse.org/emf/2002/GenModel">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_http:///org/eclipse/emf/ecore/util/ExtendedMetaData_http:///org/eclipse/emf/ecore/util/ExtendedMetaData_http://www.eclipse.org/emf/2002/Ecore">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_http:///org/eclipse/emf/ecore/util/ExtendedMetaData_http://www.eclipse.org/emf/2002/GenModel_http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_http:///org/eclipse/emf/ecore/util/ExtendedMetaData_http://www.eclipse.org/emf/2002/GenModel_http://www.eclipse.org/emf/2002/GenModel">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_http:///org/eclipse/emf/ecore/util/ExtendedMetaData_http://www.eclipse.org/emf/2002/GenModel_http://www.eclipse.org/emf/2002/Ecore">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_http:///org/eclipse/emf/ecore/util/ExtendedMetaData_http://www.eclipse.org/emf/2002/Ecore_http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_http:///org/eclipse/emf/ecore/util/ExtendedMetaData_http://www.eclipse.org/emf/2002/Ecore_http://www.eclipse.org/emf/2002/GenModel">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_http:///org/eclipse/emf/ecore/util/ExtendedMetaData_http://www.eclipse.org/emf/2002/Ecore_http://www.eclipse.org/emf/2002/Ecore">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_http://www.eclipse.org/emf/2002/GenModel_http:///org/eclipse/emf/ecore/util/ExtendedMetaData_http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_http://www.eclipse.org/emf/2002/GenModel_http:///org/eclipse/emf/ecore/util/ExtendedMetaData_http://www.eclipse.org/emf/2002/GenModel">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_http://www.eclipse.org/emf/2002/GenModel_http:///org/eclipse/emf/ecore/util/ExtendedMetaData_http://www.eclipse.org/emf/2002/Ecore">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_http://www.eclipse.org/emf/2002/GenModel_http://www.eclipse.org/emf/2002/GenModel_http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_http://www.eclipse.org/emf/2002/GenModel_http://www.eclipse.org/emf/2002/GenModel_http://www.eclipse.org/emf/2002/GenModel">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_http://www.eclipse.org/emf/2002/GenModel_http://www.eclipse.org/emf/2002/GenModel_http://www.eclipse.org/emf/2002/Ecore">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_http://www.eclipse.org/emf/2002/GenModel_http://www.eclipse.org/emf/2002/Ecore_http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_http://www.eclipse.org/emf/2002/GenModel_http://www.eclipse.org/emf/2002/Ecore_http://www.eclipse.org/emf/2002/GenModel">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_http://www.eclipse.org/emf/2002/GenModel_http://www.eclipse.org/emf/2002/Ecore_http://www.eclipse.org/emf/2002/Ecore">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_http://www.eclipse.org/emf/2002/Ecore_http:///org/eclipse/emf/ecore/util/ExtendedMetaData_http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_http://www.eclipse.org/emf/2002/Ecore_http:///org/eclipse/emf/ecore/util/ExtendedMetaData_http://www.eclipse.org/emf/2002/GenModel">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_http://www.eclipse.org/emf/2002/Ecore_http:///org/eclipse/emf/ecore/util/ExtendedMetaData_http://www.eclipse.org/emf/2002/Ecore">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_http://www.eclipse.org/emf/2002/Ecore_http://www.eclipse.org/emf/2002/GenModel_http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_http://www.eclipse.org/emf/2002/Ecore_http://www.eclipse.org/emf/2002/GenModel_http://www.eclipse.org/emf/2002/GenModel">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_http://www.eclipse.org/emf/2002/Ecore_http://www.eclipse.org/emf/2002/GenModel_http://www.eclipse.org/emf/2002/Ecore">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_http://www.eclipse.org/emf/2002/Ecore_http://www.eclipse.org/emf/2002/Ecore_http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_http://www.eclipse.org/emf/2002/Ecore_http://www.eclipse.org/emf/2002/Ecore_http://www.eclipse.org/emf/2002/GenModel">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_http://www.eclipse.org/emf/2002/Ecore_http://www.eclipse.org/emf/2002/Ecore_http://www.eclipse.org/emf/2002/Ecore">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_http:///org/eclipse/emf/ecore/util/ExtendedMetaData1_http:///org/eclipse/emf/ecore/util/ExtendedMetaData1_http:///org/eclipse/emf/ecore/util/ExtendedMetaData1">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData1"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData1"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_http:///org/eclipse/emf/ecore/util/ExtendedMetaData1_http:///org/eclipse/emf/ecore/util/ExtendedMetaData1_http://www.eclipse.org/emf/2002/GenModel1">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData1"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_http:///org/eclipse/emf/ecore/util/ExtendedMetaData1_http:///org/eclipse/emf/ecore/util/ExtendedMetaData1_http://www.eclipse.org/emf/2002/Ecore1">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData1"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_http:///org/eclipse/emf/ecore/util/ExtendedMetaData1_http://www.eclipse.org/emf/2002/GenModel1_http:///org/eclipse/emf/ecore/util/ExtendedMetaData1">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel1"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_http:///org/eclipse/emf/ecore/util/ExtendedMetaData1_http://www.eclipse.org/emf/2002/GenModel1_http://www.eclipse.org/emf/2002/GenModel1">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_http:///org/eclipse/emf/ecore/util/ExtendedMetaData1_http://www.eclipse.org/emf/2002/GenModel1_http://www.eclipse.org/emf/2002/Ecore1">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_http:///org/eclipse/emf/ecore/util/ExtendedMetaData1_http://www.eclipse.org/emf/2002/Ecore1_http:///org/eclipse/emf/ecore/util/ExtendedMetaData1">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore1"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_http:///org/eclipse/emf/ecore/util/ExtendedMetaData1_http://www.eclipse.org/emf/2002/Ecore1_http://www.eclipse.org/emf/2002/GenModel1">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_http:///org/eclipse/emf/ecore/util/ExtendedMetaData1_http://www.eclipse.org/emf/2002/Ecore1_http://www.eclipse.org/emf/2002/Ecore1">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_http://www.eclipse.org/emf/2002/GenModel1_http:///org/eclipse/emf/ecore/util/ExtendedMetaData1_http:///org/eclipse/emf/ecore/util/ExtendedMetaData1">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel1"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData1"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_http://www.eclipse.org/emf/2002/GenModel1_http:///org/eclipse/emf/ecore/util/ExtendedMetaData1_http://www.eclipse.org/emf/2002/GenModel1">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel1"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_http://www.eclipse.org/emf/2002/GenModel1_http:///org/eclipse/emf/ecore/util/ExtendedMetaData1_http://www.eclipse.org/emf/2002/Ecore1">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel1"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_http://www.eclipse.org/emf/2002/GenModel1_http://www.eclipse.org/emf/2002/GenModel1_http:///org/eclipse/emf/ecore/util/ExtendedMetaData1">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel1"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_http://www.eclipse.org/emf/2002/GenModel1_http://www.eclipse.org/emf/2002/GenModel1_http://www.eclipse.org/emf/2002/GenModel1">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_http://www.eclipse.org/emf/2002/GenModel1_http://www.eclipse.org/emf/2002/GenModel1_http://www.eclipse.org/emf/2002/Ecore1">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_http://www.eclipse.org/emf/2002/GenModel1_http://www.eclipse.org/emf/2002/Ecore1_http:///org/eclipse/emf/ecore/util/ExtendedMetaData1">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore1"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_http://www.eclipse.org/emf/2002/GenModel1_http://www.eclipse.org/emf/2002/Ecore1_http://www.eclipse.org/emf/2002/GenModel1">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_http://www.eclipse.org/emf/2002/GenModel1_http://www.eclipse.org/emf/2002/Ecore1_http://www.eclipse.org/emf/2002/Ecore1">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_http://www.eclipse.org/emf/2002/Ecore1_http:///org/eclipse/emf/ecore/util/ExtendedMetaData1_http:///org/eclipse/emf/ecore/util/ExtendedMetaData1">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore1"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData1"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_http://www.eclipse.org/emf/2002/Ecore1_http:///org/eclipse/emf/ecore/util/ExtendedMetaData1_http://www.eclipse.org/emf/2002/GenModel1">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore1"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_http://www.eclipse.org/emf/2002/Ecore1_http:///org/eclipse/emf/ecore/util/ExtendedMetaData1_http://www.eclipse.org/emf/2002/Ecore1">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore1"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_http://www.eclipse.org/emf/2002/Ecore1_http://www.eclipse.org/emf/2002/GenModel1_http:///org/eclipse/emf/ecore/util/ExtendedMetaData1">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel1"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_http://www.eclipse.org/emf/2002/Ecore1_http://www.eclipse.org/emf/2002/GenModel1_http://www.eclipse.org/emf/2002/GenModel1">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_http://www.eclipse.org/emf/2002/Ecore1_http://www.eclipse.org/emf/2002/GenModel1_http://www.eclipse.org/emf/2002/Ecore1">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_http://www.eclipse.org/emf/2002/Ecore1_http://www.eclipse.org/emf/2002/Ecore1_http:///org/eclipse/emf/ecore/util/ExtendedMetaData1">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore1"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_http://www.eclipse.org/emf/2002/Ecore1_http://www.eclipse.org/emf/2002/Ecore1_http://www.eclipse.org/emf/2002/GenModel1">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_http://www.eclipse.org/emf/2002/Ecore1_http://www.eclipse.org/emf/2002/Ecore1_http://www.eclipse.org/emf/2002/Ecore1">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_http:///org/eclipse/emf/ecore/util/ExtendedMetaData2_http:///org/eclipse/emf/ecore/util/ExtendedMetaData2_http:///org/eclipse/emf/ecore/util/ExtendedMetaData2">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData2"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData2"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_http:///org/eclipse/emf/ecore/util/ExtendedMetaData2_http:///org/eclipse/emf/ecore/util/ExtendedMetaData2_http://www.eclipse.org/emf/2002/GenModel2">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData2"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_http:///org/eclipse/emf/ecore/util/ExtendedMetaData2_http:///org/eclipse/emf/ecore/util/ExtendedMetaData2_http://www.eclipse.org/emf/2002/Ecore2">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData2"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_http:///org/eclipse/emf/ecore/util/ExtendedMetaData2_http://www.eclipse.org/emf/2002/GenModel2_http:///org/eclipse/emf/ecore/util/ExtendedMetaData2">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel2"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_http:///org/eclipse/emf/ecore/util/ExtendedMetaData2_http://www.eclipse.org/emf/2002/GenModel2_http://www.eclipse.org/emf/2002/GenModel2">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_http:///org/eclipse/emf/ecore/util/ExtendedMetaData2_http://www.eclipse.org/emf/2002/GenModel2_http://www.eclipse.org/emf/2002/Ecore2">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_http:///org/eclipse/emf/ecore/util/ExtendedMetaData2_http://www.eclipse.org/emf/2002/Ecore2_http:///org/eclipse/emf/ecore/util/ExtendedMetaData2">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore2"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_http:///org/eclipse/emf/ecore/util/ExtendedMetaData2_http://www.eclipse.org/emf/2002/Ecore2_http://www.eclipse.org/emf/2002/GenModel2">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_http:///org/eclipse/emf/ecore/util/ExtendedMetaData2_http://www.eclipse.org/emf/2002/Ecore2_http://www.eclipse.org/emf/2002/Ecore2">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_http://www.eclipse.org/emf/2002/GenModel2_http:///org/eclipse/emf/ecore/util/ExtendedMetaData2_http:///org/eclipse/emf/ecore/util/ExtendedMetaData2">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel2"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData2"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_http://www.eclipse.org/emf/2002/GenModel2_http:///org/eclipse/emf/ecore/util/ExtendedMetaData2_http://www.eclipse.org/emf/2002/GenModel2">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel2"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_http://www.eclipse.org/emf/2002/GenModel2_http:///org/eclipse/emf/ecore/util/ExtendedMetaData2_http://www.eclipse.org/emf/2002/Ecore2">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel2"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_http://www.eclipse.org/emf/2002/GenModel2_http://www.eclipse.org/emf/2002/GenModel2_http:///org/eclipse/emf/ecore/util/ExtendedMetaData2">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel2"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_http://www.eclipse.org/emf/2002/GenModel2_http://www.eclipse.org/emf/2002/GenModel2_http://www.eclipse.org/emf/2002/GenModel2">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_http://www.eclipse.org/emf/2002/GenModel2_http://www.eclipse.org/emf/2002/GenModel2_http://www.eclipse.org/emf/2002/Ecore2">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_http://www.eclipse.org/emf/2002/GenModel2_http://www.eclipse.org/emf/2002/Ecore2_http:///org/eclipse/emf/ecore/util/ExtendedMetaData2">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore2"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_http://www.eclipse.org/emf/2002/GenModel2_http://www.eclipse.org/emf/2002/Ecore2_http://www.eclipse.org/emf/2002/GenModel2">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_http://www.eclipse.org/emf/2002/GenModel2_http://www.eclipse.org/emf/2002/Ecore2_http://www.eclipse.org/emf/2002/Ecore2">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_http://www.eclipse.org/emf/2002/Ecore2_http:///org/eclipse/emf/ecore/util/ExtendedMetaData2_http:///org/eclipse/emf/ecore/util/ExtendedMetaData2">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore2"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData2"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_http://www.eclipse.org/emf/2002/Ecore2_http:///org/eclipse/emf/ecore/util/ExtendedMetaData2_http://www.eclipse.org/emf/2002/GenModel2">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore2"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_http://www.eclipse.org/emf/2002/Ecore2_http:///org/eclipse/emf/ecore/util/ExtendedMetaData2_http://www.eclipse.org/emf/2002/Ecore2">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore2"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_http://www.eclipse.org/emf/2002/Ecore2_http://www.eclipse.org/emf/2002/GenModel2_http:///org/eclipse/emf/ecore/util/ExtendedMetaData2">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel2"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_http://www.eclipse.org/emf/2002/Ecore2_http://www.eclipse.org/emf/2002/GenModel2_http://www.eclipse.org/emf/2002/GenModel2">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_http://www.eclipse.org/emf/2002/Ecore2_http://www.eclipse.org/emf/2002/GenModel2_http://www.eclipse.org/emf/2002/Ecore2">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_http://www.eclipse.org/emf/2002/Ecore2_http://www.eclipse.org/emf/2002/Ecore2_http:///org/eclipse/emf/ecore/util/ExtendedMetaData2">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore2"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_http://www.eclipse.org/emf/2002/Ecore2_http://www.eclipse.org/emf/2002/Ecore2_http://www.eclipse.org/emf/2002/GenModel2">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_http://www.eclipse.org/emf/2002/Ecore2_http://www.eclipse.org/emf/2002/Ecore2_http://www.eclipse.org/emf/2002/Ecore2">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_http:///org/eclipse/emf/ecore/util/ExtendedMetaData3_http:///org/eclipse/emf/ecore/util/ExtendedMetaData3_http:///org/eclipse/emf/ecore/util/ExtendedMetaData3">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData3"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData3"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData3"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_http:///org/eclipse/emf/ecore/util/ExtendedMetaData3_http:///org/eclipse/emf/ecore/util/ExtendedMetaData3_http://www.eclipse.org/emf/2002/GenModel3">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData3"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel3"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_http:///org/eclipse/emf/ecore/util/ExtendedMetaData3_http:///org/eclipse/emf/ecore/util/ExtendedMetaData3_http://www.eclipse.org/emf/2002/Ecore3">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData3"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore3"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_http:///org/eclipse/emf/ecore/util/ExtendedMetaData3_http://www.eclipse.org/emf/2002/GenModel3_http:///org/eclipse/emf/ecore/util/ExtendedMetaData3">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel3"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData3"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_http:///org/eclipse/emf/ecore/util/ExtendedMetaData3_http://www.eclipse.org/emf/2002/GenModel3_http://www.eclipse.org/emf/2002/GenModel3">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel3"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_http:///org/eclipse/emf/ecore/util/ExtendedMetaData3_http://www.eclipse.org/emf/2002/GenModel3_http://www.eclipse.org/emf/2002/Ecore3">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore3"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_http:///org/eclipse/emf/ecore/util/ExtendedMetaData3_http://www.eclipse.org/emf/2002/Ecore3_http:///org/eclipse/emf/ecore/util/ExtendedMetaData3">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore3"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData3"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_http:///org/eclipse/emf/ecore/util/ExtendedMetaData3_http://www.eclipse.org/emf/2002/Ecore3_http://www.eclipse.org/emf/2002/GenModel3">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel3"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_http:///org/eclipse/emf/ecore/util/ExtendedMetaData3_http://www.eclipse.org/emf/2002/Ecore3_http://www.eclipse.org/emf/2002/Ecore3">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore3"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_http://www.eclipse.org/emf/2002/GenModel3_http:///org/eclipse/emf/ecore/util/ExtendedMetaData3_http:///org/eclipse/emf/ecore/util/ExtendedMetaData3">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel3"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData3"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData3"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_http://www.eclipse.org/emf/2002/GenModel3_http:///org/eclipse/emf/ecore/util/ExtendedMetaData3_http://www.eclipse.org/emf/2002/GenModel3">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel3"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel3"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_http://www.eclipse.org/emf/2002/GenModel3_http:///org/eclipse/emf/ecore/util/ExtendedMetaData3_http://www.eclipse.org/emf/2002/Ecore3">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel3"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore3"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_http://www.eclipse.org/emf/2002/GenModel3_http://www.eclipse.org/emf/2002/GenModel3_http:///org/eclipse/emf/ecore/util/ExtendedMetaData3">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel3"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData3"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_http://www.eclipse.org/emf/2002/GenModel3_http://www.eclipse.org/emf/2002/GenModel3_http://www.eclipse.org/emf/2002/GenModel3">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel3"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_http://www.eclipse.org/emf/2002/GenModel3_http://www.eclipse.org/emf/2002/GenModel3_http://www.eclipse.org/emf/2002/Ecore3">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore3"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_http://www.eclipse.org/emf/2002/GenModel3_http://www.eclipse.org/emf/2002/Ecore3_http:///org/eclipse/emf/ecore/util/ExtendedMetaData3">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore3"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData3"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_http://www.eclipse.org/emf/2002/GenModel3_http://www.eclipse.org/emf/2002/Ecore3_http://www.eclipse.org/emf/2002/GenModel3">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel3"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_http://www.eclipse.org/emf/2002/GenModel3_http://www.eclipse.org/emf/2002/Ecore3_http://www.eclipse.org/emf/2002/Ecore3">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore3"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_http://www.eclipse.org/emf/2002/Ecore3_http:///org/eclipse/emf/ecore/util/ExtendedMetaData3_http:///org/eclipse/emf/ecore/util/ExtendedMetaData3">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore3"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData3"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData3"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_http://www.eclipse.org/emf/2002/Ecore3_http:///org/eclipse/emf/ecore/util/ExtendedMetaData3_http://www.eclipse.org/emf/2002/GenModel3">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore3"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel3"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_http://www.eclipse.org/emf/2002/Ecore3_http:///org/eclipse/emf/ecore/util/ExtendedMetaData3_http://www.eclipse.org/emf/2002/Ecore3">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore3"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore3"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_http://www.eclipse.org/emf/2002/Ecore3_http://www.eclipse.org/emf/2002/GenModel3_http:///org/eclipse/emf/ecore/util/ExtendedMetaData3">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel3"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData3"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_http://www.eclipse.org/emf/2002/Ecore3_http://www.eclipse.org/emf/2002/GenModel3_http://www.eclipse.org/emf/2002/GenModel3">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel3"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_http://www.eclipse.org/emf/2002/Ecore3_http://www.eclipse.org/emf/2002/GenModel3_http://www.eclipse.org/emf/2002/Ecore3">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore3"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_http://www.eclipse.org/emf/2002/Ecore3_http://www.eclipse.org/emf/2002/Ecore3_http:///org/eclipse/emf/ecore/util/ExtendedMetaData3">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore3"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData3"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_http://www.eclipse.org/emf/2002/Ecore3_http://www.eclipse.org/emf/2002/Ecore3_http://www.eclipse.org/emf/2002/GenModel3">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel3"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_http://www.eclipse.org/emf/2002/Ecore3_http://www.eclipse.org/emf/2002/Ecore3_http://www.eclipse.org/emf/2002/Ecore3">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore3"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_http:///org/eclipse/emf/ecore/util/ExtendedMetaData_http://www.eclipse.org/emf/2002/GenModel_http://www.eclipse.org/emf/2002/Ecore">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_http:///org/eclipse/emf/ecore/util/ExtendedMetaData_http://www.eclipse.org/emf/2002/Ecore_http://www.eclipse.org/emf/2002/GenModel">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_http://www.eclipse.org/emf/2002/GenModel_http:///org/eclipse/emf/ecore/util/ExtendedMetaData_http://www.eclipse.org/emf/2002/Ecore">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_http://www.eclipse.org/emf/2002/GenModel_http://www.eclipse.org/emf/2002/Ecore_http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_http://www.eclipse.org/emf/2002/Ecore_http:///org/eclipse/emf/ecore/util/ExtendedMetaData_http://www.eclipse.org/emf/2002/GenModel">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SearchPlanTest_http://www.eclipse.org/emf/2002/Ecore_http://www.eclipse.org/emf/2002/GenModel_http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_http:///org/eclipse/emf/ecore/util/ExtendedMetaData1_http://www.eclipse.org/emf/2002/GenModel1_http://www.eclipse.org/emf/2002/Ecore1">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_http:///org/eclipse/emf/ecore/util/ExtendedMetaData1_http://www.eclipse.org/emf/2002/Ecore1_http://www.eclipse.org/emf/2002/GenModel1">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_http://www.eclipse.org/emf/2002/GenModel1_http:///org/eclipse/emf/ecore/util/ExtendedMetaData1_http://www.eclipse.org/emf/2002/Ecore1">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel1"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_http://www.eclipse.org/emf/2002/GenModel1_http://www.eclipse.org/emf/2002/Ecore1_http:///org/eclipse/emf/ecore/util/ExtendedMetaData1">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore1"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_http://www.eclipse.org/emf/2002/Ecore1_http:///org/eclipse/emf/ecore/util/ExtendedMetaData1_http://www.eclipse.org/emf/2002/GenModel1">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore1"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage1_http://www.eclipse.org/emf/2002/Ecore1_http://www.eclipse.org/emf/2002/GenModel1_http:///org/eclipse/emf/ecore/util/ExtendedMetaData1">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel1"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData1"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_http:///org/eclipse/emf/ecore/util/ExtendedMetaData2_http://www.eclipse.org/emf/2002/GenModel2_http://www.eclipse.org/emf/2002/Ecore2">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_http:///org/eclipse/emf/ecore/util/ExtendedMetaData2_http://www.eclipse.org/emf/2002/Ecore2_http://www.eclipse.org/emf/2002/GenModel2">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_http://www.eclipse.org/emf/2002/GenModel2_http:///org/eclipse/emf/ecore/util/ExtendedMetaData2_http://www.eclipse.org/emf/2002/Ecore2">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel2"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_http://www.eclipse.org/emf/2002/GenModel2_http://www.eclipse.org/emf/2002/Ecore2_http:///org/eclipse/emf/ecore/util/ExtendedMetaData2">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore2"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_http://www.eclipse.org/emf/2002/Ecore2_http:///org/eclipse/emf/ecore/util/ExtendedMetaData2_http://www.eclipse.org/emf/2002/GenModel2">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore2"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage2_http://www.eclipse.org/emf/2002/Ecore2_http://www.eclipse.org/emf/2002/GenModel2_http:///org/eclipse/emf/ecore/util/ExtendedMetaData2">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel2"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData2"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_http:///org/eclipse/emf/ecore/util/ExtendedMetaData3_http://www.eclipse.org/emf/2002/GenModel3_http://www.eclipse.org/emf/2002/Ecore3">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore3"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_http:///org/eclipse/emf/ecore/util/ExtendedMetaData3_http://www.eclipse.org/emf/2002/Ecore3_http://www.eclipse.org/emf/2002/GenModel3">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel3"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_http://www.eclipse.org/emf/2002/GenModel3_http:///org/eclipse/emf/ecore/util/ExtendedMetaData3_http://www.eclipse.org/emf/2002/Ecore3">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel3"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore3"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_http://www.eclipse.org/emf/2002/GenModel3_http://www.eclipse.org/emf/2002/Ecore3_http:///org/eclipse/emf/ecore/util/ExtendedMetaData3">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore3"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData3"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_http://www.eclipse.org/emf/2002/Ecore3_http:///org/eclipse/emf/ecore/util/ExtendedMetaData3_http://www.eclipse.org/emf/2002/GenModel3">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore3"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel3"/>
+ </ecore:EPackage>
+ <ecore:EPackage name="SubPackage3_http://www.eclipse.org/emf/2002/Ecore3_http://www.eclipse.org/emf/2002/GenModel3_http:///org/eclipse/emf/ecore/util/ExtendedMetaData3">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel3"/>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData3"/>
+ </ecore:EPackage>
+</xmi:XMI>
diff --git a/tests/org.eclipse.m2m.atl.emftvm.tests/test-data/SearchPlanTest.atl b/tests/org.eclipse.m2m.atl.emftvm.tests/test-data/SearchPlanTest.atl
new file mode 100644
index 00000000..3bb6775f
--- /dev/null
+++ b/tests/org.eclipse.m2m.atl.emftvm.tests/test-data/SearchPlanTest.atl
@@ -0,0 +1,151 @@
+-- @atlcompiler emftvm
+-- @nsURI ECORE=http://www.eclipse.org/emf/2002/Ecore
+module SearchPlanTest;
+
+create OUT : ECORE from IN : ECORE;
+
+rule PackageClass {
+ from
+ p : ECORE!EPackage,
+ c : ECORE!EClass (
+ p.eClassifiers->select(e | e.oclIsKindOf(ECORE!EClass) and not e."abstract")->includes(c)
+ and
+ c.ePackage = p
+ and
+ p = c.ePackage
+ and
+ c = c
+ )
+ to
+ t : ECORE!EPackage (
+ name <- p.name + '_' + c.name,
+ eClassifiers <- Sequence{thisModule.Class(c)}
+ )
+}
+
+rule PackageAbstractClass {
+ from
+ p : ECORE!EPackage,
+ ac : ECORE!EClass (
+ ac.ePackage = p
+ and
+ p = ac.ePackage
+ and
+ ac."abstract"
+ )
+ to
+ t : ECORE!EPackage (
+ name <- p.name + '_' + ac.name,
+ eClassifiers <- Sequence{thisModule.Class(ac)}
+ )
+}
+
+rule PackageDataType {
+ from
+ p : ECORE!EPackage,
+ d : ECORE!EDataType (
+ d.ePackage = p
+ and
+ d.instanceClassName <> ''
+ )
+ to
+ t : ECORE!EPackage (
+ name <- p.name + '_' + d.name,
+ eClassifiers <- Sequence{thisModule.DataType(d)}
+ )
+}
+
+rule PackageAnnotation {
+ from
+ p : ECORE!EPackage,
+ a : ECORE!EAnnotation (
+ p.eAnnotations->includes(a)
+ )
+ to
+ t : ECORE!EPackage (
+ name <- p.name + '_' + a.source,
+ eAnnotations <- Sequence{thisModule.Annotation(a)}
+ )
+}
+
+nodefault rule PackageAnnotation3 {
+ from
+ p : ECORE!EPackage,
+ a1 : ECORE!EAnnotation,
+ a2 : ECORE!EAnnotation,
+ a3 : ECORE!EAnnotation (
+ p.eAnnotations->includes(a1)
+ and
+ p.eAnnotations->includes(a2)
+ and
+ p.eAnnotations->includes(a3)
+ )
+ to
+ t : ECORE!EPackage (
+ name <- p.name + '_' + a1.source + '_' + a2.source + '_' + a3.source,
+ eAnnotations <- Sequence{
+ thisModule.Annotation(a1),
+ thisModule.Annotation(a2),
+ thisModule.Annotation(a3)
+ }
+ )
+}
+
+rule PackageAnnotation3plus {
+ from
+ p : ECORE!EPackage,
+ a1 : ECORE!EAnnotation,
+ a2 : ECORE!EAnnotation,
+ a3 : ECORE!EAnnotation (
+ a1 <> a3
+ and
+ p.eAnnotations->includes(a1)
+ and
+ a1 <> a2
+ and
+ p.eAnnotations->includes(a2)
+ and
+ p.eAnnotations->includes(a3)
+ and
+ a2 <> a3
+ )
+ to
+ t : ECORE!EPackage (
+ name <- p.name + '_' + a1.source + '_' + a2.source + '_' + a3.source,
+ eAnnotations <- Sequence{
+ thisModule.Annotation(a1),
+ thisModule.Annotation(a2),
+ thisModule.Annotation(a3)
+ }
+ )
+}
+
+unique lazy rule Class {
+ from
+ s : ECORE!EClass
+ to
+ t : ECORE!EClass (
+ "abstract" <- s."abstract",
+ interface <- s.interface,
+ name <- s.name
+ )
+}
+
+unique lazy rule DataType {
+ from
+ s : ECORE!EDataType
+ to
+ t : ECORE!EDataType (
+ name <- s.name,
+ instanceClassName <- s.instanceClassName
+ )
+}
+
+lazy rule Annotation {
+ from
+ s : ECORE!EAnnotation
+ to
+ t : ECORE!EAnnotation (
+ source <- s.source
+ )
+}
diff --git a/tests/org.eclipse.m2m.atl.emftvm.tests/test-data/SearchPlanTest.ecore b/tests/org.eclipse.m2m.atl.emftvm.tests/test-data/SearchPlanTest.ecore
new file mode 100644
index 00000000..97c94a7d
--- /dev/null
+++ b/tests/org.eclipse.m2m.atl.emftvm.tests/test-data/SearchPlanTest.ecore
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="SearchPlanTest" nsURI="SearchPlanTest" nsPrefix="SearchPlanTest">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore"/>
+ <eClassifiers xsi:type="ecore:EClass" name="ClassA"/>
+ <eClassifiers xsi:type="ecore:EClass" name="ClassB"/>
+ <eClassifiers xsi:type="ecore:EClass" name="AbstractClassC" abstract="true"/>
+ <eClassifiers xsi:type="ecore:EClass" name="InterfaceD" abstract="true" interface="true"/>
+ <eClassifiers xsi:type="ecore:EDataType" name="DataTypeE" instanceClassName="java.lang.String"/>
+ <eSubpackages name="SubPackage1" nsURI="SubPackage1" nsPrefix="SubPackage1">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel1"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore1"/>
+ <eClassifiers xsi:type="ecore:EClass" name="ClassA1"/>
+ <eClassifiers xsi:type="ecore:EClass" name="ClassB1"/>
+ <eClassifiers xsi:type="ecore:EClass" name="AbstractClassC1" abstract="true"/>
+ <eClassifiers xsi:type="ecore:EClass" name="InterfaceD1" abstract="true" interface="true"/>
+ <eClassifiers xsi:type="ecore:EDataType" name="DataTypeE1" instanceClassName="java.lang.String"/>
+ </eSubpackages>
+ <eSubpackages name="SubPackage2" nsURI="SubPackage2" nsPrefix="SubPackage2">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel2"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore2"/>
+ <eClassifiers xsi:type="ecore:EClass" name="ClassA2"/>
+ <eClassifiers xsi:type="ecore:EClass" name="ClassB2"/>
+ <eClassifiers xsi:type="ecore:EClass" name="AbstractClassC2" abstract="true"/>
+ <eClassifiers xsi:type="ecore:EClass" name="InterfaceD2" abstract="true" interface="true"/>
+ <eClassifiers xsi:type="ecore:EDataType" name="DataTypeE2" instanceClassName="java.lang.String"/>
+ </eSubpackages>
+ <eSubpackages name="SubPackage3" nsURI="SubPackage2" nsPrefix="SubPackage2">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel3"/>
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore3"/>
+ <eClassifiers xsi:type="ecore:EClass" name="ClassA3"/>
+ <eClassifiers xsi:type="ecore:EClass" name="ClassB3"/>
+ <eClassifiers xsi:type="ecore:EClass" name="AbstractClassC3" abstract="true"/>
+ <eClassifiers xsi:type="ecore:EClass" name="InterfaceD3" abstract="true" interface="true"/>
+ <eClassifiers xsi:type="ecore:EDataType" name="DataTypeE3" instanceClassName="java.lang.String"/>
+ </eSubpackages>
+</ecore:EPackage>
diff --git a/tests/org.eclipse.m2m.atl.emftvm.tests/test-data/SearchPlanTest.emftvm b/tests/org.eclipse.m2m.atl.emftvm.tests/test-data/SearchPlanTest.emftvm
new file mode 100644
index 00000000..61a53b90
--- /dev/null
+++ b/tests/org.eclipse.m2m.atl.emftvm.tests/test-data/SearchPlanTest.emftvm
Binary files differ
diff --git a/tests/org.eclipse.m2m.atl.emftvm.tests/transformations/.gitignore b/tests/org.eclipse.m2m.atl.emftvm.tests/transformations/.gitignore
index cbb34c7d..190853f0 100644
--- a/tests/org.eclipse.m2m.atl.emftvm.tests/transformations/.gitignore
+++ b/tests/org.eclipse.m2m.atl.emftvm.tests/transformations/.gitignore
@@ -1 +1,2 @@
/CountFindtypeNew.emftvm
+/TestATLSearchPlan.emftvm
diff --git a/tests/org.eclipse.m2m.atl.emftvm.tests/transformations/TestATLSearchPlan.atl b/tests/org.eclipse.m2m.atl.emftvm.tests/transformations/TestATLSearchPlan.atl
new file mode 100644
index 00000000..67feb4b6
--- /dev/null
+++ b/tests/org.eclipse.m2m.atl.emftvm.tests/transformations/TestATLSearchPlan.atl
@@ -0,0 +1,84 @@
+-- @atlcompiler emftvm
+-- @path ATL=/org.eclipse.m2m.atl.common/model/ATL.ecore
+query TestATLSearchPlan = ('canBindWith for all OclExpressions:\n\n' +
+ ATL!OclExpression.allInstances()
+ ->iterate(exp; acc: String = '' |
+ let conj : Sequence(ATL!OclExpression) = exp.asConjunction in
+ let conjStr : String = conj->collect(ce |
+ Tuple{element=ce, location=ce.location, canBindWith=ce.canBindWith}
+ ).toString()
+ in
+ if acc = '' then
+ conjStr
+ else
+ acc + '\n' + conjStr
+ endif
+ ) +
+ '\n\nbindings for all InPatternElements:\n\n' +
+ ATL!InPatternElement.allInstances()
+ ->iterate(ipe; acc: String = '' |
+ let bindings : Sequence(ATL!OclExpression) = ipe.bindings in
+ let bindingStr : String = Tuple{element=ipe.qualifiedName, bindings=bindings->collect(binding |
+ Tuple{b=binding, loc=binding.location, ref=binding.references
+ ->reject(r | r = binding.canBindWith)
+ ->collect(r | r.referredVariable.qualifiedName + '@' + r.location)
+ }
+ )}.toString()
+ in
+ if acc = '' then
+ bindingStr
+ else
+ acc + '\n' + bindingStr
+ endif
+ ) +
+ '\n\nisBinding for all OclExpressions:\n\n' +
+ ATL!OclExpression.allInstances()
+ ->iterate(exp; acc: String = '' |
+ let expStr : String = Tuple{
+ element=exp,
+ location=exp.location,
+ isBinding=exp.isBinding,
+ partOfBinding=exp.partOfBinding,
+ partOfBindingFor=exp.partOfBindingFor.qualifiedName,
+ containsBinding=exp.containsBinding,
+ _firstNonBindingExp=exp.firstNonBindingExp
+ }.toString()
+ in
+ if acc = '' then
+ expStr
+ else
+ acc + '\n' + expStr
+ endif
+ ) +
+ '\n\nFirst non-binding filter expression for all MatchedRules with filters:\n\n' +
+ ATL!MatchedRule.allInstances()->reject(r | r.inPattern.filter.oclIsUndefined())
+ ->iterate(r; acc: String = '' |
+ let rStr : String = Tuple{
+ "rule"=r,
+ location=r.location,
+ firstNonBindingExp=
+ let nbe : ATL!OclExpression = r.inPattern.filter.firstNonBindingExp in
+ if nbe.oclIsUndefined() then
+ 'OclUndefined'
+ else
+ nbe.toString() + '@' + nbe.location
+ endif
+ }.toString()
+ in
+ if acc = '' then
+ rStr
+ else
+ acc + '\n' + rStr
+ endif
+ )).debug();
+
+uses ATLSearchPlan;
+
+helper context OclAny def : qualifiedName : String =
+ 'OclUndefined';
+
+helper context ATL!VariableDeclaration def : qualifiedName : String =
+ self.varName;
+
+helper context ATL!InPatternElement def : qualifiedName : String =
+ self.inPattern."rule".name + '::' + self.varName;

Back to the top