blob: 3586d8387186590199577c59a9ba71dbc2462243 [file] [log] [blame]
source cs : 'ClassesCS.ecore#/'
target as : 'Classes.ecore#/'
mappings {
map as::Root from RootCS {
ownedPackages := ownedPackages.resolve;
}
map as::Package from PackageCS {
name := name;
ownedClasses := ownedClasses.resolve;
ownedPackages := ownedPackages.resolve;
}
map as::Class from ClassCS {
name := name;
ownedOperations := operations.resolve;
ownedProperties := properties.resolve;
superClass := if _extends = null then null else resolve.lookup(Class,_extends) endif;
}
map as::Property from PropertyCS {
name := name;
type := resolve.lookup(Class, typeRef);
}
map as::Operation from OperationCS {
name := name;
type := resolve.lookup(Class, resultRef);
ownedParameters := params->collect(x | classes::Parameter{ /*FIXME*/ });
ownedExpressions := bodyExps.resolve;
}
map as::PropertyCallExp from NameExpCS when isPropCallExp {
ownedCallExp := ownedNameExp?.resolve;
referredProperty := if oclContainer().oclIsKindOf(NameExpCS)
then resolve.lookupFrom(Property, resolve.owningSource.type, name)
else resolve.lookup(Property, name)
endif;
type := resolve.oclAsType(as::PropertyCallExp).referredProperty.type;
}
map as::OperationCallExp from NameExpCS when isOpCallExp {
ownedCallExp := ownedNameExp?.resolve;
ownedArguments := roundedBrackets.args.resolve;
referredOperation := if oclContainer().oclIsKindOf(NameExpCS)
then resolve.lookupFrom(Operation, resolve.owningSource.type, name, resolve.oclAsType(as::OperationCallExp).ownedArguments) /*FIXME cast */
else resolve.lookup(Operation, name, resolve.oclAsType(as::OperationCallExp).ownedArguments) /*FIXME cast */
endif;
type := resolve.oclAsType(as::OperationCallExp).referredOperation.type;
}
map as::Argument from ArgumentCS {
name := name;
}
}
disambiguation {
NameExpCS {
isOpCallExp := roundedBrackets <> null;
isPropCallExp := roundedBrackets = null;
}
}
nameresolution {
named-element NamedElement name-property name; /*from target */
name-referencer PathElementCS name-property name; /*from source */
name-qualifier PathNameCS name-segments-property path; /*from source */
Root {
scopes
Package using ownedPackages;
}
Package {
named-element
qualifies Package using ownedPackages,
Class using ownedClasses;
scopes-occluding
Package using ownedPackages
Class using ownedClasses;
}
Class {
named-element
qualifies Operation using ownedOperations,
Property using ownedProperties;
scopes-occluding
Operation using ownedOperations occluding self->closure(superClass).ownedOperations
Property using ownedProperties occluding self->closure(superClass).ownedProperties;
exports
Operation using ownedOperations
Property using ownedProperties;
}
Operation {
named-element
filtered by args : OrderedSet(Argument)
when args->size() = ownedParameters->size() and
args->forAll(x | x.name = ownedParameters->at(args->indexOf(x)).name);
}
Property {
named-element;
}
}
helpers {
}