diff options
author | Dennis Wagelaar | 2023-03-11 18:08:34 +0000 |
---|---|---|
committer | Dennis Wagelaar | 2023-03-11 18:08:34 +0000 |
commit | 5e9a5225bb8b24b209b9bb2ad3621c6ac85b9e3f (patch) | |
tree | 6c36f328106852a2b1cc1081dba8abac8ee504ce | |
parent | 7751eae75b1818fc2632707845b6519bad377ce0 (diff) | |
download | org.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>
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 Binary files differnew file mode 100644 index 00000000..feb4dbe7 --- /dev/null +++ b/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLSearchPlan.emftvm 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 Binary files differindex 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 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 Binary files differnew file mode 100644 index 00000000..89418b17 --- /dev/null +++ b/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/OCLLib.emftvm 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differnew file mode 100644 index 00000000..61a53b90 --- /dev/null +++ b/tests/org.eclipse.m2m.atl.emftvm.tests/test-data/SearchPlanTest.emftvm 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; |