diff options
author | Adolfo SBH | 2016-03-14 11:51:12 +0000 |
---|---|---|
committer | Ed Willink | 2016-03-23 17:54:52 +0000 |
commit | c87d7ad122685e6b7585aa1b4eb5c03a88b572d1 (patch) | |
tree | c1ab918e757bdbd72ff9bee0059b68a145429108 | |
parent | 0590dcf2aaa30c9c70bd472948f730ee241702ef (diff) | |
download | org.eclipse.qvtd-c87d7ad122685e6b7585aa1b4eb5c03a88b572d1.tar.gz org.eclipse.qvtd-c87d7ad122685e6b7585aa1b4eb5c03a88b572d1.tar.xz org.eclipse.qvtd-c87d7ad122685e6b7585aa1b4eb5c03a88b572d1.zip |
[cs2as] - New lookup description and new lookup.ocl file for example1
2 files changed, 93 insertions, 92 deletions
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/example1/Source2Target.cs2as b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/example1/Source2Target.cs2as index c0440bede..72a5db7ef 100644 --- a/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/example1/Source2Target.cs2as +++ b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/example1/Source2Target.cs2as @@ -6,21 +6,18 @@ mappings { ownedA := ownedX.resolve; } - map _target::A1 from X { - when isA1; + map _target::A1 from X when isA1 { name := name; ownsB := ownsY.oclAsType(Y1).resolve; } - map _target::A2 from X { - when isA2; + map _target::A2 from X when isA2 { name := name; ownsC := ownsY.oclAsType(Y2).resolve; } - map _target::A3 from X { - when isA3; + map _target::A3 from X when isA3 { name := name; ownsC := ownsY.oclAsType(Y2).resolve; } @@ -35,15 +32,13 @@ mappings { ownsD := ownsZ.resolve; } - map _target::D from Z { - when parentIsY1; + map _target::D from Z when parentIsY1 { toA := toY.oclAsType(_'source'::Y1).resolve.toA1; refsB := if refers = null then null else resolve.lookup(B,refers) endif; } - map _target::D from Z { - when parentIsY2; + map _target::D from Z when parentIsY2{ toA := toY.oclAsType(_'source'::Y2).resolve.toA2; refsC := if refers = null then null else resolve.lookup(C,refers) endif; } @@ -69,21 +64,23 @@ nameresolution { name-qualifier PathNameCS name-segments-property path; /*from source */ TRoot { - new-scope ownsA; + scopes-resetting A1, A2 using ownedA; } A1 { named-element /*name-property name*/ - qualifying B using ownsB; + qualifies B using ownsB; - new-scope following ownsB for ownsB; + for ownsB + scopes B using following ownsB; } A2 { named-element - qualifying C using ownsC; + qualifies C using ownsC; - new-scope following ownsC for ownsC; + for ownsC + scopes C using following ownsC; } B { @@ -94,5 +91,5 @@ nameresolution { named-element; } - D{} -- FIXME, just to generate the env method + --D{} -- FIXME, just to generate the env method }
\ No newline at end of file diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/example1/Source2TargetLookup.ocl b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/example1/Source2TargetLookup.ocl index 688a46329..88905a2bf 100644 --- a/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/example1/Source2TargetLookup.ocl +++ b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/example1/Source2TargetLookup.ocl @@ -6,105 +6,109 @@ package ocl ---- Default Environment related functionality context OclElement -- -def : env() : lookup::LookupEnvironment[1] = - _env(null) - -def : _env(child : OclElement) : lookup::LookupEnvironment[1] = - parentEnv() - def : _exported_env(importer : OclElement) : lookup::LookupEnvironment[1] = lookup::LookupEnvironment { } -def : parentEnv() : lookup::LookupEnvironment[1] = - let parent = oclContainer() in if parent = null then lookup::LookupEnvironment { } else parent._env(self) endif +-- Domain specific default functionality +def : unqualified_env_A1() : lookup::LookupEnvironment[1] = + _unqualified_env_A1(null) +def : unqualified_env_A2() : lookup::LookupEnvironment[1] = + _unqualified_env_A2(null) +def : unqualified_env_B() : lookup::LookupEnvironment[1] = + _unqualified_env_B(null) +def : unqualified_env_C() : lookup::LookupEnvironment[1] = + _unqualified_env_C(null) + +def : _unqualified_env_A1(child : OclElement) : lookup::LookupEnvironment[1] = + parentEnv_A1() +def : _unqualified_env_A2(child : OclElement) : lookup::LookupEnvironment[1] = + parentEnv_A2() +def : _unqualified_env_B(child : OclElement) : lookup::LookupEnvironment[1] = + parentEnv_B() +def : _unqualified_env_C(child : OclElement) : lookup::LookupEnvironment[1] = + parentEnv_C() + +def : parentEnv_A1() : lookup::LookupEnvironment[1] = + let parent = oclContainer() in if parent = null then lookup::LookupEnvironment { } else parent._unqualified_env_A1(self) endif +def : parentEnv_A2() : lookup::LookupEnvironment[1] = + let parent = oclContainer() in if parent = null then lookup::LookupEnvironment { } else parent._unqualified_env_A2(self) endif +def : parentEnv_B() : lookup::LookupEnvironment[1] = + let parent = oclContainer() in if parent = null then lookup::LookupEnvironment { } else parent._unqualified_env_B(self) endif +def : parentEnv_C() : lookup::LookupEnvironment[1] = + let parent = oclContainer() in if parent = null then lookup::LookupEnvironment { } else parent._unqualified_env_C(self) endif +-- End of domain specific default functionality endpackage package lookup - context LookupEnvironment -def : nestedEnv() : LookupEnvironment = +def : nestedEnv() : LookupEnvironment[1] = LookupEnvironment { parentEnv = self } - -def : addElementsOf(element : ocl::OclElement) : LookupEnvironment = - let newEnv = element._env(null) - in LookupEnvironment { - namedElements = self.namedElements->including(newEnv.namedElements) - } - -def : addElementsOf(elements : Collection(ocl::OclElement)) : LookupEnvironment = - elements->iterate(element ; acc : LookupEnvironment = self - | acc.addElementsOf(element)) - endpackage package _target + context TRoot - -def : _env(child : ocl::OclElement) : lookup::LookupEnvironment = - parentEnv() +def : _unqualified_env_A1(child : ocl::OclElement) : lookup::LookupEnvironment = + let env = lookup::LookupEnvironment {} + in env .addElements(ownedA) -context A1 -def : _qualified_env() : lookup::LookupEnvironment = - let env = lookup::LookupEnvironment{} +def : _unqualified_env_A2(child : ocl::OclElement) : lookup::LookupEnvironment = + let env = lookup::LookupEnvironment {} in env - .addElements(ownsB) - + .addElements(ownedA) + + +context A1 + def : _lookupQualifiedB(bName : String) : B[?] = let foundB = _lookupB(_qualified_env(), bName) in if foundB->isEmpty() then null else foundB->first() endif - def : lookupQualifiedB(aPathElementCS : _source::PathElementCS) : B[?] = _lookupQualifiedB(aPathElementCS.name) - -def : _env(child : ocl::OclElement) : lookup::LookupEnvironment = - if ownsB->includes(child) - then parentEnv().nestedEnv() - .addElements(ownsB->select(x | self.ownsB->indexOf(x) < self.ownsB->indexOf(child))) - else parentEnv() - endif -context A2 + def : _qualified_env() : lookup::LookupEnvironment = let env = lookup::LookupEnvironment{} in env - .addElements(ownsC) - + .addElements(ownsB) +def : _unqualified_env_B(child : ocl::OclElement) : lookup::LookupEnvironment = + if ownsB->includes(child) + then parentEnv_B() + .addElements(ownsB->select(x | self.ownsB->indexOf(x) < self.ownsB->indexOf(child))) + + else parentEnv_B() + endif + +context A2 + def : _lookupQualifiedC(cName : String) : C[?] = let foundC = _lookupC(_qualified_env(), cName) in if foundC->isEmpty() then null else foundC->first() endif - def : lookupQualifiedC(aPathElementCS : _source::PathElementCS) : C[?] = _lookupQualifiedC(aPathElementCS.name) - -def : _env(child : ocl::OclElement) : lookup::LookupEnvironment = - if ownsC->includes(child) - then parentEnv().nestedEnv() + +def : _qualified_env() : lookup::LookupEnvironment = + let env = lookup::LookupEnvironment{} + in env + .addElements(ownsC) +def : _unqualified_env_C(child : ocl::OclElement) : lookup::LookupEnvironment = + if ownsC->includes(child) + then parentEnv_C() .addElements(ownsC->select(x | self.ownsC->indexOf(x) < self.ownsC->indexOf(child))) - else parentEnv() + + else parentEnv_C() endif -context B - -def : _env(child : ocl::OclElement) : lookup::LookupEnvironment = - parentEnv() -context C - -def : _env(child : ocl::OclElement) : lookup::LookupEnvironment = - parentEnv() -context D - -def : _env(child : ocl::OclElement) : lookup::LookupEnvironment = - parentEnv() context Visitable -- A1 lookup @@ -117,17 +121,17 @@ in if foundA1->isEmpty() and not (env.parentEnv = null) -- Note: when calling this method, the source element of the argument passed to this method, will be the contextual -- object on which error reports will be handled -def : _lookupA1(aName : String) : A1[?] = -let foundA1 = _lookupA1(env(), aName) +def : _lookupUnqualifiedA1(aName : String) : A1[?] = +let foundA1 = _lookupA1(unqualified_env_A1(), aName) in if foundA1->isEmpty() then null else foundA1->first() -- LookupVisitor will report ambiguous result endif - def : lookupA1(aPathElementCS : _source::PathElementCS) : A1[?] = - _lookupA1(aPathElementCS.name) + _lookupUnqualifiedA1(aPathElementCS.name) + -- A2 lookup def : _lookupA2(env : lookup::LookupEnvironment, aName : String) : OrderedSet(A2) = let foundA2 = env.namedElements->selectByKind(A2)->select(name = aName) @@ -138,17 +142,17 @@ in if foundA2->isEmpty() and not (env.parentEnv = null) -- Note: when calling this method, the source element of the argument passed to this method, will be the contextual -- object on which error reports will be handled -def : _lookupA2(aName : String) : A2[?] = -let foundA2 = _lookupA2(env(), aName) +def : _lookupUnqualifiedA2(aName : String) : A2[?] = +let foundA2 = _lookupA2(unqualified_env_A2(), aName) in if foundA2->isEmpty() then null else foundA2->first() -- LookupVisitor will report ambiguous result endif - def : lookupA2(aPathElementCS : _source::PathElementCS) : A2[?] = - _lookupA2(aPathElementCS.name) + _lookupUnqualifiedA2(aPathElementCS.name) + -- B lookup def : _lookupB(env : lookup::LookupEnvironment, bName : String) : OrderedSet(B) = let foundB = env.namedElements->selectByKind(B)->select(name = bName) @@ -159,15 +163,14 @@ in if foundB->isEmpty() and not (env.parentEnv = null) -- Note: when calling this method, the source element of the argument passed to this method, will be the contextual -- object on which error reports will be handled -def : _lookupB(bName : String) : B[?] = -let foundB = _lookupB(env(), bName) +def : _lookupUnqualifiedB(bName : String) : B[?] = +let foundB = _lookupB(unqualified_env_B(), bName) in if foundB->isEmpty() then null else foundB->first() -- LookupVisitor will report ambiguous result endif - def : lookupB(aPathElementCS : _source::PathElementCS) : B[?] = - _lookupB(aPathElementCS.name) + _lookupUnqualifiedB(aPathElementCS.name) -- QN B lookup @@ -178,9 +181,10 @@ def : lookupB(segments : OrderedSet(_source::PathElementCS)) : B[?] = if segments->size() = 1 then lookupB(segments->first()) else let qualifierSegments = segments->subOrderedSet(1,segments->size()-1), - qualifier = lookupA1(segments->first()) + qualifier = lookupA1(qualifierSegments->first()) in qualifier?.lookupQualifiedB(segments->last()) endif + -- C lookup def : _lookupC(env : lookup::LookupEnvironment, cName : String) : OrderedSet(C) = let foundC = env.namedElements->selectByKind(C)->select(name = cName) @@ -191,15 +195,14 @@ in if foundC->isEmpty() and not (env.parentEnv = null) -- Note: when calling this method, the source element of the argument passed to this method, will be the contextual -- object on which error reports will be handled -def : _lookupC(cName : String) : C[?] = -let foundC = _lookupC(env(), cName) +def : _lookupUnqualifiedC(cName : String) : C[?] = +let foundC = _lookupC(unqualified_env_C(), cName) in if foundC->isEmpty() then null else foundC->first() -- LookupVisitor will report ambiguous result endif - def : lookupC(aPathElementCS : _source::PathElementCS) : C[?] = - _lookupC(aPathElementCS.name) + _lookupUnqualifiedC(aPathElementCS.name) -- QN C lookup @@ -210,9 +213,10 @@ def : lookupC(segments : OrderedSet(_source::PathElementCS)) : C[?] = if segments->size() = 1 then lookupC(segments->first()) else let qualifierSegments = segments->subOrderedSet(1,segments->size()-1), - qualifier = lookupA2(segments->first()) + qualifier = lookupA2(qualifierSegments->first()) in qualifier?.lookupQualifiedC(segments->last()) endif + endpackage |