Das Type-Mapping kann in Xpand-Templates einfach durch das Einbinden des Type-Mapping Xtend-Skriptes genutzt werden:
«REM» use the type mapping «ENDREM» «EXTENSION de::genesez::common::typemapping::TypeMapping»
Das Xtend-Skript stellt prinzipiell zwei verschiedene Funktionen bereit, bei denen jeweils optional noch ein Kontext-Parameter angegeben werden kann:
bildet den als Parameter übergebenen Typ auf den Namen des Typs in der Zielsprache ab
wertet die Typ-Modifikatoren (des Metamodellelementes) aus und gibt die entsprechenden Multi-Value-Typen zurück
Als Beispiel hier die Deklaration von Attributen in Java:
«IF isSingleValuedType() -»
«EXPAND _Modifier -» «type.mapName().asTypeName()» \
«EXPAND Type::Generics» «asAttribute()» «EXPAND _DefaultValue»;
«ELSE -»
«EXPAND _Modifier -» «mapType() -» \
<«type.mapName().asTypeName()»> \
«asAttribute()» = new «mapType("Implementation")» \
<«type.mapName().asTypeName() -»>();
«ENDIF -»Bei einem normalen, single-value Typen ( multiplicity == 1) wird lediglich der verwendete Typ auf den zu verwendenden Namen in der Zielsprache gemappt. Ist der übergebene Typ ein MClassifier oder ein MGeneric, so wird das eigentliche Type-Mapping nicht durchgeführt sondern lediglich der übergebene Typ unverändert wieder zurückgegeben. Bei MExternal und MPrimitiveType werden die Informationen aus der Type-Mapping-Datei ausgewertet und der Typ als String zurückgegeben. Der Aufruf von asTypeName() wird zur Anwendung der Naming Conventions durchgeführt.
Bei multi-value Typen ( multiplicity > 1) wird zuerst der Typ gemappt. Im obigen Beispiel wird dazu als Parameter ein MAttribute übergeben. Das Type-Mapping wertet dann die Typ-Modifikatoren unique und ordered aus und gibt den entsprechenden Multi-Value-Typ zurück. Der eigentlich verwendete Typ im Modell wird auf den Namen in der Zielsprache gemappt und als Typ-Parameter der Collection angegeben.