Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdolfo SBH2016-03-14 11:51:12 +0000
committerEd Willink2016-03-23 17:54:52 +0000
commitc87d7ad122685e6b7585aa1b4eb5c03a88b572d1 (patch)
treec1ab918e757bdbd72ff9bee0059b68a145429108
parent0590dcf2aaa30c9c70bd472948f730ee241702ef (diff)
downloadorg.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
-rw-r--r--tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/example1/Source2Target.cs2as29
-rw-r--r--tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/example1/Source2TargetLookup.ocl156
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

Back to the top