diff --git a/plugins/org.eclipse.emf.codegen.ecore/src/org/eclipse/emf/codegen/ecore/genmodel/GenDecoration.java b/plugins/org.eclipse.emf.codegen.ecore/src/org/eclipse/emf/codegen/ecore/genmodel/GenDecoration.java
index 0aa9891..5973349 100644
--- a/plugins/org.eclipse.emf.codegen.ecore/src/org/eclipse/emf/codegen/ecore/genmodel/GenDecoration.java
+++ b/plugins/org.eclipse.emf.codegen.ecore/src/org/eclipse/emf/codegen/ecore/genmodel/GenDecoration.java
@@ -58,10 +58,6 @@
   /**
    * The '<em><b>None</b></em>' literal value.
    * <!-- begin-user-doc -->
-   * <p>
-   * If the meaning of '<em><b>None</b></em>' literal object isn't clear,
-   * there really should be more of a description here...
-   * </p>
    * <!-- end-user-doc -->
    * @see #NONE
    * @model name="None"
@@ -73,10 +69,6 @@
   /**
    * The '<em><b>Manual</b></em>' literal value.
    * <!-- begin-user-doc -->
-   * <p>
-   * If the meaning of '<em><b>Manual</b></em>' literal object isn't clear,
-   * there really should be more of a description here...
-   * </p>
    * <!-- end-user-doc -->
    * @see #MANUAL
    * @model name="Manual"
@@ -88,10 +80,6 @@
   /**
    * The '<em><b>Live</b></em>' literal value.
    * <!-- begin-user-doc -->
-   * <p>
-   * If the meaning of '<em><b>Live</b></em>' literal object isn't clear,
-   * there really should be more of a description here...
-   * </p>
    * <!-- end-user-doc -->
    * @see #LIVE
    * @model name="Live"
diff --git a/plugins/org.eclipse.emf.codegen.ecore/src/org/eclipse/emf/codegen/ecore/genmodel/GenDelegationKind.java b/plugins/org.eclipse.emf.codegen.ecore/src/org/eclipse/emf/codegen/ecore/genmodel/GenDelegationKind.java
index 72b3196..bd60c21 100644
--- a/plugins/org.eclipse.emf.codegen.ecore/src/org/eclipse/emf/codegen/ecore/genmodel/GenDelegationKind.java
+++ b/plugins/org.eclipse.emf.codegen.ecore/src/org/eclipse/emf/codegen/ecore/genmodel/GenDelegationKind.java
@@ -99,10 +99,6 @@
   /**
    * The '<em><b>Dynamic</b></em>' literal value.
    * <!-- begin-user-doc -->
-   * <p>
-   * If the meaning of '<em><b>Dynamic</b></em>' literal object isn't clear,
-   * there really should be more of a description here...
-   * </p>
    * <!-- end-user-doc -->
    * @see #DYNAMIC_LITERAL
    * @model name="Dynamic"
diff --git a/plugins/org.eclipse.emf.codegen.ecore/src/org/eclipse/emf/codegen/ecore/genmodel/GenModel.java b/plugins/org.eclipse.emf.codegen.ecore/src/org/eclipse/emf/codegen/ecore/genmodel/GenModel.java
index 977e645..3cea022 100644
--- a/plugins/org.eclipse.emf.codegen.ecore/src/org/eclipse/emf/codegen/ecore/genmodel/GenModel.java
+++ b/plugins/org.eclipse.emf.codegen.ecore/src/org/eclipse/emf/codegen/ecore/genmodel/GenModel.java
@@ -2302,10 +2302,6 @@
    * Returns the value of the '<em><b>Eclipse Platform Version</b></em>' attribute.
    * The literals are from the enumeration {@link org.eclipse.emf.codegen.ecore.genmodel.GenEclipsePlatformVersion}.
    * <!-- begin-user-doc -->
-   * <p>
-   * If the meaning of the '<em>Eclipse Platform Version</em>' attribute isn't clear,
-   * there really should be more of a description here...
-   * </p>
    * <!-- end-user-doc -->
    * <!-- begin-model-doc -->
    * @since 2.14
diff --git a/plugins/org.eclipse.emf.codegen.ecore/src/org/eclipse/emf/codegen/ecore/genmodel/GenRuntimeVersion.java b/plugins/org.eclipse.emf.codegen.ecore/src/org/eclipse/emf/codegen/ecore/genmodel/GenRuntimeVersion.java
index 721af4d..ffa1425 100644
--- a/plugins/org.eclipse.emf.codegen.ecore/src/org/eclipse/emf/codegen/ecore/genmodel/GenRuntimeVersion.java
+++ b/plugins/org.eclipse.emf.codegen.ecore/src/org/eclipse/emf/codegen/ecore/genmodel/GenRuntimeVersion.java
@@ -288,10 +288,6 @@
   /**
    * The '<em><b>EMF211</b></em>' literal value.
    * <!-- begin-user-doc -->
-   * <p>
-   * If the meaning of '<em><b>EMF211</b></em>' literal object isn't clear,
-   * there really should be more of a description here...
-   * </p>
    * <!-- end-user-doc -->
    * @see #EMF211
    * @model literal="2.11"
@@ -303,10 +299,6 @@
   /**
    * The '<em><b>EMF212</b></em>' literal value.
    * <!-- begin-user-doc -->
-   * <p>
-   * If the meaning of '<em><b>EMF212</b></em>' literal object isn't clear,
-   * there really should be more of a description here...
-   * </p>
    * <!-- end-user-doc -->
    * @see #EMF212
    * @model literal="2.12"
@@ -318,10 +310,6 @@
   /**
    * The '<em><b>EMF213</b></em>' literal value.
    * <!-- begin-user-doc -->
-   * <p>
-   * If the meaning of '<em><b>EMF213</b></em>' literal object isn't clear,
-   * there really should be more of a description here...
-   * </p>
    * <!-- end-user-doc -->
    * @see #EMF213
    * @model literal="2.13"
@@ -333,8 +321,6 @@
   /**
    * The '<em><b>EMF214</b></em>' literal value.
    * <!-- begin-user-doc -->
-   * <p>
-   * </p>
    * <!-- end-user-doc -->
    * <!-- begin-model-doc -->
    * @since 2.14
diff --git a/plugins/org.eclipse.emf.codegen.ecore/src/org/eclipse/emf/codegen/ecore/templates/model/Class.java b/plugins/org.eclipse.emf.codegen.ecore/src/org/eclipse/emf/codegen/ecore/templates/model/Class.java
index 230b673..ebb637d 100644
--- a/plugins/org.eclipse.emf.codegen.ecore/src/org/eclipse/emf/codegen/ecore/templates/model/Class.java
+++ b/plugins/org.eclipse.emf.codegen.ecore/src/org/eclipse/emf/codegen/ecore/templates/model/Class.java
@@ -219,499 +219,495 @@
   protected final String TEXT_200 = "}.";
   protected final String TEXT_201 = NL + "\t * It is bidirectional and its opposite is '{@link ";
   protected final String TEXT_202 = "</em>}'.";
-  protected final String TEXT_203 = NL + "\t * <!-- begin-user-doc -->";
-  protected final String TEXT_204 = NL + "\t * <p>" + NL + "\t * If the meaning of the '<em>";
-  protected final String TEXT_205 = "</em>' ";
-  protected final String TEXT_206 = " isn't clear," + NL + "\t * there really should be more of a description here..." + NL + "\t * </p>";
-  protected final String TEXT_207 = NL + "\t * <!-- end-user-doc -->";
-  protected final String TEXT_208 = NL + "\t * <!-- begin-model-doc -->" + NL + "\t * ";
-  protected final String TEXT_209 = NL + "\t * <!-- end-model-doc -->";
-  protected final String TEXT_210 = NL + "\t * @return the value of the '<em>";
-  protected final String TEXT_211 = NL + "\t * @see ";
-  protected final String TEXT_212 = NL + "\t * @see #isSet";
-  protected final String TEXT_213 = NL + "\t * @see #unset";
-  protected final String TEXT_214 = NL + "\t * @see #set";
-  protected final String TEXT_215 = NL + "\t * @model ";
-  protected final String TEXT_216 = NL + "\t *        ";
-  protected final String TEXT_217 = NL + "\t * @model";
-  protected final String TEXT_218 = ")eDynamicGet(";
-  protected final String TEXT_219 = " - ESTATIC_FEATURE_COUNT";
-  protected final String TEXT_220 = ", true, ";
-  protected final String TEXT_221 = ").";
-  protected final String TEXT_222 = ")eGet(";
-  protected final String TEXT_223 = ", true)";
-  protected final String TEXT_224 = "__ESETTING_DELEGATE.dynamicGet(this, null, 0, true, false)";
-  protected final String TEXT_225 = NL + "\t\tif (eContainerFeatureID() != ";
-  protected final String TEXT_226 = ") return null;" + NL + "\t\treturn (";
-  protected final String TEXT_227 = "eContainer";
-  protected final String TEXT_228 = "eInternalContainer";
-  protected final String TEXT_229 = "();";
-  protected final String TEXT_230 = " != null && ";
-  protected final String TEXT_231 = ".eIsProxy())" + NL + "\t\t{" + NL + "\t\t\t";
-  protected final String TEXT_232 = " old";
-  protected final String TEXT_233 = ";" + NL + "\t\t\t";
-  protected final String TEXT_234 = "eResolveProxy(old";
-  protected final String TEXT_235 = ");" + NL + "\t\t\tif (";
-  protected final String TEXT_236 = " != old";
-  protected final String TEXT_237 = ")" + NL + "\t\t\t{";
-  protected final String TEXT_238 = NL + "\t\t\t\t";
-  protected final String TEXT_239 = " msgs = old";
-  protected final String TEXT_240 = ".eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ";
-  protected final String TEXT_241 = ", null, null);";
-  protected final String TEXT_242 = " msgs =  old";
-  protected final String TEXT_243 = ".eInverseRemove(this, ";
-  protected final String TEXT_244 = ".class, null);";
-  protected final String TEXT_245 = NL + "\t\t\t\tif (new";
-  protected final String TEXT_246 = ".eInternalContainer() == null)" + NL + "\t\t\t\t{";
-  protected final String TEXT_247 = NL + "\t\t\t\t\tmsgs = new";
-  protected final String TEXT_248 = ".eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ";
-  protected final String TEXT_249 = ", null, msgs);";
-  protected final String TEXT_250 = NL + "\t\t\t\t\tmsgs =  new";
-  protected final String TEXT_251 = ".eInverseAdd(this, ";
-  protected final String TEXT_252 = ".class, msgs);";
-  protected final String TEXT_253 = NL + "\t\t\t\t}" + NL + "\t\t\t\tif (msgs != null) msgs.dispatch();";
-  protected final String TEXT_254 = NL + "\t\t\t\teVirtualSet(";
-  protected final String TEXT_255 = NL + "\t\t\t\tif (eNotificationRequired())" + NL + "\t\t\t\t\teNotify(new ";
-  protected final String TEXT_256 = "(this, ";
-  protected final String TEXT_257 = ".RESOLVE, ";
-  protected final String TEXT_258 = ", old";
-  protected final String TEXT_259 = "));";
-  protected final String TEXT_260 = NL + "\t\t\t}" + NL + "\t\t}";
-  protected final String TEXT_261 = NL + "\t\treturn (";
-  protected final String TEXT_262 = " & ";
-  protected final String TEXT_263 = "_EFLAG) != 0;";
-  protected final String TEXT_264 = "_EFLAG_VALUES[(";
-  protected final String TEXT_265 = "_EFLAG) >>> ";
-  protected final String TEXT_266 = "_EFLAG_OFFSET];";
-  protected final String TEXT_267 = " = basicGet";
-  protected final String TEXT_268 = "();" + NL + "\t\treturn ";
-  protected final String TEXT_269 = ".eIsProxy() ? ";
-  protected final String TEXT_270 = "eResolveProxy(";
-  protected final String TEXT_271 = ") : ";
-  protected final String TEXT_272 = NL + "\t\treturn new ";
-  protected final String TEXT_273 = "((";
-  protected final String TEXT_274 = ".Internal)((";
-  protected final String TEXT_275 = ".Internal.Wrapper)get";
-  protected final String TEXT_276 = "()).featureMap().";
-  protected final String TEXT_277 = "list(";
-  protected final String TEXT_278 = ")get";
-  protected final String TEXT_279 = "().";
-  protected final String TEXT_280 = NL + "\t\treturn ((";
-  protected final String TEXT_281 = "()).featureMap().list(";
-  protected final String TEXT_282 = NL + "\t\treturn get";
-  protected final String TEXT_283 = "().list(";
-  protected final String TEXT_284 = "()).featureMap().get(";
-  protected final String TEXT_285 = "get";
-  protected final String TEXT_286 = "().get(";
-  protected final String TEXT_287 = NL + "\t\t// TODO: implement this method to return the '";
-  protected final String TEXT_288 = "' ";
-  protected final String TEXT_289 = NL + "\t\t// Ensure that you remove @generated or mark it @generated NOT";
-  protected final String TEXT_290 = NL + "\t\t// The list is expected to implement org.eclipse.emf.ecore.util.InternalEList and org.eclipse.emf.ecore.EStructuralFeature.Setting" + NL + "\t\t// so it's likely that an appropriate subclass of org.eclipse.emf.ecore.util.";
-  protected final String TEXT_291 = "EcoreEMap";
-  protected final String TEXT_292 = "BasicFeatureMap";
-  protected final String TEXT_293 = "EcoreEList";
-  protected final String TEXT_294 = " should be used.";
-  protected final String TEXT_295 = NL + "\t\tthrow new UnsupportedOperationException();";
-  protected final String TEXT_296 = " basicGet";
-  protected final String TEXT_297 = ", false, ";
-  protected final String TEXT_298 = "__ESETTING_DELEGATE.dynamicGet(this, null, 0, false, false)";
-  protected final String TEXT_299 = ")eInternalContainer();";
-  protected final String TEXT_300 = ")((";
-  protected final String TEXT_301 = ", false);";
-  protected final String TEXT_302 = NL + "\t\t// -> do not perform proxy resolution" + NL + "\t\t// Ensure that you remove @generated or mark it @generated NOT" + NL + "\t\tthrow new UnsupportedOperationException();";
-  protected final String TEXT_303 = " msgs)" + NL + "\t{";
-  protected final String TEXT_304 = NL + "\t\tmsgs = eBasicSetContainer(";
-  protected final String TEXT_305 = ", msgs);";
-  protected final String TEXT_306 = NL + "\t\treturn msgs;";
-  protected final String TEXT_307 = NL + "\t\tmsgs = eDynamicInverseAdd(";
-  protected final String TEXT_308 = NL + "\t\tObject old";
-  protected final String TEXT_309 = " = eVirtualSet(";
-  protected final String TEXT_310 = ", new";
-  protected final String TEXT_311 = ";" + NL + "\t\t";
-  protected final String TEXT_312 = " = new";
-  protected final String TEXT_313 = NL + "\t\tboolean isSetChange = old";
-  protected final String TEXT_314 = " == EVIRTUAL_NO_VALUE;";
-  protected final String TEXT_315 = NL + "\t\tboolean old";
-  protected final String TEXT_316 = "ESet = (";
-  protected final String TEXT_317 = "_ESETFLAG) != 0;";
-  protected final String TEXT_318 = "_ESETFLAG;";
-  protected final String TEXT_319 = "ESet = ";
-  protected final String TEXT_320 = "ESet;";
-  protected final String TEXT_321 = "ESet = true;";
-  protected final String TEXT_322 = NL + "\t\tif (eNotificationRequired())" + NL + "\t\t{";
-  protected final String TEXT_323 = " notification = new ";
-  protected final String TEXT_324 = ".SET, ";
-  protected final String TEXT_325 = "isSetChange ? null : old";
-  protected final String TEXT_326 = "old";
-  protected final String TEXT_327 = "isSetChange";
-  protected final String TEXT_328 = "!old";
-  protected final String TEXT_329 = "ESet";
-  protected final String TEXT_330 = " == EVIRTUAL_NO_VALUE ? null : old";
-  protected final String TEXT_331 = NL + "\t\t\tif (msgs == null) msgs = notification; else msgs.add(notification);" + NL + "\t\t}";
-  protected final String TEXT_332 = "()).featureMap()).basicAdd(";
-  protected final String TEXT_333 = ".Internal)get";
-  protected final String TEXT_334 = "()).basicAdd(";
-  protected final String TEXT_335 = NL + "\t\t// TODO: implement this method to set the contained '";
-  protected final String TEXT_336 = NL + "\t\t// -> this method is automatically invoked to keep the containment relationship in synch" + NL + "\t\t// -> do not modify other features" + NL + "\t\t// -> return msgs, after adding any generated Notification to it (if it is null, a NotificationChain object must be created first)" + NL + "\t\t// Ensure that you remove @generated or mark it @generated NOT" + NL + "\t\tthrow new UnsupportedOperationException();";
-  protected final String TEXT_337 = NL + "\t/**" + NL + "\t * Sets the value of the '{@link ";
-  protected final String TEXT_338 = NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @param value the new value of the '<em>";
-  protected final String TEXT_339 = NL + "\t * @see #";
-  protected final String TEXT_340 = " value);" + NL;
-  protected final String TEXT_341 = ")" + NL + "\t{";
-  protected final String TEXT_342 = NL + "\t\teDynamicSet(";
-  protected final String TEXT_343 = "new ";
-  protected final String TEXT_344 = "new";
-  protected final String TEXT_345 = NL + "\t\teSet(";
-  protected final String TEXT_346 = "__ESETTING_DELEGATE.dynamicSet(this, null, 0, ";
-  protected final String TEXT_347 = NL + "\t\tif (new";
-  protected final String TEXT_348 = " != eInternalContainer() || (eContainerFeatureID() != ";
-  protected final String TEXT_349 = " && new";
-  protected final String TEXT_350 = " != null))" + NL + "\t\t{" + NL + "\t\t\tif (";
-  protected final String TEXT_351 = ".isAncestor(this, ";
-  protected final String TEXT_352 = "))" + NL + "\t\t\t\tthrow new ";
-  protected final String TEXT_353 = "(\"Recursive containment not allowed for \" + toString());";
-  protected final String TEXT_354 = " msgs = null;" + NL + "\t\t\tif (eInternalContainer() != null)" + NL + "\t\t\t\tmsgs = eBasicRemoveFromContainer(msgs);" + NL + "\t\t\tif (new";
-  protected final String TEXT_355 = " != null)" + NL + "\t\t\t\tmsgs = ";
-  protected final String TEXT_356 = ".class, msgs);" + NL + "\t\t\tmsgs = basicSet";
-  protected final String TEXT_357 = ", msgs);" + NL + "\t\t\tif (msgs != null) msgs.dispatch();" + NL + "\t\t}";
-  protected final String TEXT_358 = NL + "\t\telse if (eNotificationRequired())" + NL + "\t\t\teNotify(new ";
-  protected final String TEXT_359 = " != ";
-  protected final String TEXT_360 = ")" + NL + "\t\t{" + NL + "\t\t\t";
-  protected final String TEXT_361 = " msgs = null;" + NL + "\t\t\tif (";
-  protected final String TEXT_362 = " != null)";
-  protected final String TEXT_363 = NL + "\t\t\t\tmsgs = ";
-  protected final String TEXT_364 = ", null, msgs);" + NL + "\t\t\tif (new";
-  protected final String TEXT_365 = ".class, msgs);" + NL + "\t\t\tif (new";
-  protected final String TEXT_366 = NL + "\t\t\tmsgs = basicSet";
-  protected final String TEXT_367 = NL + "\t\telse" + NL + "\t\t{";
-  protected final String TEXT_368 = NL + "\t\t\tboolean old";
-  protected final String TEXT_369 = "ESet = eVirtualIsSet(";
-  protected final String TEXT_370 = NL + "\t\t\tif (eNotificationRequired())" + NL + "\t\t\t\teNotify(new ";
-  protected final String TEXT_371 = ", !old";
-  protected final String TEXT_372 = "ESet));";
-  protected final String TEXT_373 = NL + "\t\t}";
-  protected final String TEXT_374 = ") ";
-  protected final String TEXT_375 = "_EFLAG; else ";
-  protected final String TEXT_376 = " &= ~";
-  protected final String TEXT_377 = "_EFLAG;";
-  protected final String TEXT_378 = " == null) new";
-  protected final String TEXT_379 = "_EDEFAULT;" + NL + "\t\t";
-  protected final String TEXT_380 = " & ~";
-  protected final String TEXT_381 = "_EFLAG | ";
-  protected final String TEXT_382 = ".VALUES.indexOf(new";
-  protected final String TEXT_383 = "_EFLAG_OFFSET;";
-  protected final String TEXT_384 = " == null ? ";
-  protected final String TEXT_385 = " : new";
-  protected final String TEXT_386 = NL + "\t\tif (eNotificationRequired())" + NL + "\t\t\teNotify(new ";
-  protected final String TEXT_387 = "isSetChange ? ";
-  protected final String TEXT_388 = " : old";
-  protected final String TEXT_389 = " == EVIRTUAL_NO_VALUE ? ";
-  protected final String TEXT_390 = NL + "\t\t((";
-  protected final String TEXT_391 = "()).featureMap()).set(";
-  protected final String TEXT_392 = "()).set(";
-  protected final String TEXT_393 = NL + "\t\t// TODO: implement this method to set the '";
-  protected final String TEXT_394 = NL + "\t\t// Ensure that you remove @generated or mark it @generated NOT" + NL + "\t\tthrow new UnsupportedOperationException();";
-  protected final String TEXT_395 = " basicUnset";
-  protected final String TEXT_396 = NL + "\t\treturn eDynamicInverseRemove(";
-  protected final String TEXT_397 = "basicGet";
-  protected final String TEXT_398 = "(), ";
-  protected final String TEXT_399 = "Object old";
-  protected final String TEXT_400 = "eVirtualUnset(";
-  protected final String TEXT_401 = " = null;";
-  protected final String TEXT_402 = " != EVIRTUAL_NO_VALUE;";
-  protected final String TEXT_403 = "ESet = false;";
-  protected final String TEXT_404 = NL + "\t\tif (eNotificationRequired())" + NL + "\t\t{" + NL + "\t\t\t";
-  protected final String TEXT_405 = ".UNSET, ";
-  protected final String TEXT_406 = "isSetChange ? old";
-  protected final String TEXT_407 = " : null";
-  protected final String TEXT_408 = ", null, ";
-  protected final String TEXT_409 = ");" + NL + "\t\t\tif (msgs == null) msgs = notification; else msgs.add(notification);" + NL + "\t\t}" + NL + "\t\treturn msgs;";
-  protected final String TEXT_410 = NL + "\t\t// TODO: implement this method to unset the contained '";
-  protected final String TEXT_411 = NL + "\t/**" + NL + "\t * Unsets the value of the '{@link ";
-  protected final String TEXT_412 = NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->";
-  protected final String TEXT_413 = NL + "\tvoid unset";
-  protected final String TEXT_414 = NL + "\tpublic void unset";
-  protected final String TEXT_415 = NL + "\t\teDynamicUnset(";
-  protected final String TEXT_416 = NL + "\t\teUnset(";
-  protected final String TEXT_417 = "__ESETTING_DELEGATE.dynamicUnset(this, null, 0);";
-  protected final String TEXT_418 = " != null) ((";
-  protected final String TEXT_419 = ".Unsettable";
-  protected final String TEXT_420 = ").unset();";
-  protected final String TEXT_421 = " != null)" + NL + "\t\t{" + NL + "\t\t\t";
-  protected final String TEXT_422 = " msgs = null;";
-  protected final String TEXT_423 = NL + "\t\t\tmsgs = ";
-  protected final String TEXT_424 = NL + "\t\t\tmsgs = basicUnset";
-  protected final String TEXT_425 = "(msgs);" + NL + "\t\t\tif (msgs != null) msgs.dispatch();" + NL + "\t\t}" + NL + "\t\telse" + NL + "\t\t{";
-  protected final String TEXT_426 = ", null, null, old";
-  protected final String TEXT_427 = " = eVirtualUnset(";
-  protected final String TEXT_428 = "_EFLAG_DEFAULT;";
-  protected final String TEXT_429 = " : ";
-  protected final String TEXT_430 = "()).featureMap()).clear(";
-  protected final String TEXT_431 = "()).clear(";
-  protected final String TEXT_432 = NL + "\t\t// TODO: implement this method to unset the '";
-  protected final String TEXT_433 = NL + "\t/**" + NL + "\t * Returns whether the value of the '{@link ";
-  protected final String TEXT_434 = " is set.";
-  protected final String TEXT_435 = NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @return whether the value of the '<em>";
-  protected final String TEXT_436 = NL + "\tboolean isSet";
-  protected final String TEXT_437 = NL + "\tpublic boolean isSet";
-  protected final String TEXT_438 = NL + "\t\treturn eDynamicIsSet(";
-  protected final String TEXT_439 = NL + "\t\treturn eIsSet(";
-  protected final String TEXT_440 = "__ESETTING_DELEGATE.dynamicIsSet(this, null, 0);";
-  protected final String TEXT_441 = " != null && ((";
-  protected final String TEXT_442 = ").isSet();";
-  protected final String TEXT_443 = NL + "\t\treturn eVirtualIsSet(";
-  protected final String TEXT_444 = NL + "\t\treturn !((";
-  protected final String TEXT_445 = "()).featureMap()).isEmpty(";
-  protected final String TEXT_446 = "()).isEmpty(";
-  protected final String TEXT_447 = NL + "\t\t// TODO: implement this method to return whether the '";
-  protected final String TEXT_448 = " is set" + NL + "\t\t// Ensure that you remove @generated or mark it @generated NOT" + NL + "\t\tthrow new UnsupportedOperationException();";
-  protected final String TEXT_449 = NL + "\t/**" + NL + "\t * The cached validation expression for the '{@link #";
-  protected final String TEXT_450 = ") <em>";
-  protected final String TEXT_451 = "</em>}' invariant operation." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @see #";
-  protected final String TEXT_452 = "__EEXPRESSION = \"";
-  protected final String TEXT_453 = NL + "\t/**" + NL + "\t * The cached invocation delegate for the '{@link #";
-  protected final String TEXT_454 = "</em>}' operation." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @see #";
-  protected final String TEXT_455 = ".Internal.InvocationDelegate ";
-  protected final String TEXT_456 = "__EINVOCATION_DELEGATE = ((";
-  protected final String TEXT_457 = ").getInvocationDelegate();" + NL;
-  protected final String TEXT_458 = NL + "\t/**";
-  protected final String TEXT_459 = NL + "\t * <!-- begin-model-doc -->";
-  protected final String TEXT_460 = NL + "\t * @param ";
-  protected final String TEXT_461 = NL + "\t *   ";
-  protected final String TEXT_462 = NL + "\t{";
-  protected final String TEXT_463 = NL + "\t\treturn" + NL + "\t\t\t";
-  protected final String TEXT_464 = ".validate" + NL + "\t\t\t\t(";
-  protected final String TEXT_465 = "," + NL + "\t\t\t\t this," + NL + "\t\t\t\t ";
-  protected final String TEXT_466 = "," + NL + "\t\t\t\t ";
-  protected final String TEXT_467 = "," + NL + "\t\t\t\t \"";
-  protected final String TEXT_468 = "\",";
-  protected final String TEXT_469 = NL + "\t\t\t\t ";
-  protected final String TEXT_470 = "__EEXPRESSION," + NL + "\t\t\t\t ";
-  protected final String TEXT_471 = ".ERROR," + NL + "\t\t\t\t ";
-  protected final String TEXT_472 = ".DIAGNOSTIC_SOURCE," + NL + "\t\t\t\t ";
-  protected final String TEXT_473 = NL + "\t\t// TODO: implement this method" + NL + "\t\t// -> specify the condition that violates the invariant" + NL + "\t\t// -> verify the details of the diagnostic, including severity and message" + NL + "\t\t// Ensure that you remove @generated or mark it @generated NOT" + NL + "\t\tif (false)" + NL + "\t\t{" + NL + "\t\t\tif (";
-  protected final String TEXT_474 = " != null)" + NL + "\t\t\t{" + NL + "\t\t\t\t";
-  protected final String TEXT_475 = ".add" + NL + "\t\t\t\t\t(new ";
-  protected final String TEXT_476 = NL + "\t\t\t\t\t\t(";
-  protected final String TEXT_477 = ".ERROR," + NL + "\t\t\t\t\t\t ";
-  protected final String TEXT_478 = ".DIAGNOSTIC_SOURCE," + NL + "\t\t\t\t\t\t ";
-  protected final String TEXT_479 = "," + NL + "\t\t\t\t\t\t ";
-  protected final String TEXT_480 = ".INSTANCE.getString(\"_UI_GenericInvariant_diagnostic\", new Object[] { \"";
-  protected final String TEXT_481 = "\", ";
-  protected final String TEXT_482 = ".getObjectLabel(this, ";
-  protected final String TEXT_483 = ") }),";
-  protected final String TEXT_484 = NL + "\t\t\t\t\t\t new Object [] { this }));" + NL + "\t\t\t}" + NL + "\t\t\treturn false;" + NL + "\t\t}" + NL + "\t\treturn true;";
-  protected final String TEXT_485 = NL + "\t\ttry" + NL + "\t\t{";
-  protected final String TEXT_486 = "__EINVOCATION_DELEGATE.dynamicInvoke(this, ";
-  protected final String TEXT_487 = ".UnmodifiableEList<Object>(";
-  protected final String TEXT_488 = "null";
-  protected final String TEXT_489 = NL + "\t\t\treturn ";
-  protected final String TEXT_490 = NL + "\t\t}" + NL + "\t\tcatch (";
-  protected final String TEXT_491 = " ite)" + NL + "\t\t{" + NL + "\t\t\tthrow new ";
-  protected final String TEXT_492 = "(ite);" + NL + "\t\t}";
-  protected final String TEXT_493 = NL + "\t\t// TODO: implement this method" + NL + "\t\t// Ensure that you remove @generated or mark it @generated NOT" + NL + "\t\tthrow new UnsupportedOperationException();";
-  protected final String TEXT_494 = " eInverseAdd(";
-  protected final String TEXT_495 = " otherEnd, int featureID, ";
-  protected final String TEXT_496 = " msgs)" + NL + "\t{" + NL + "\t\tswitch (featureID";
-  protected final String TEXT_497 = ")" + NL + "\t\t{";
-  protected final String TEXT_498 = NL + "\t\t\tcase ";
-  protected final String TEXT_499 = ":";
-  protected final String TEXT_500 = NL + "\t\t\t\treturn ((";
-  protected final String TEXT_501 = ".InternalMapView";
-  protected final String TEXT_502 = "()).eMap()).basicAdd(otherEnd, msgs);";
-  protected final String TEXT_503 = NL + "\t\t\t\treturn (";
-  protected final String TEXT_504 = "()).basicAdd(otherEnd, msgs);";
-  protected final String TEXT_505 = NL + "\t\t\t\tif (eInternalContainer() != null)" + NL + "\t\t\t\t\tmsgs = eBasicRemoveFromContainer(msgs);";
-  protected final String TEXT_506 = NL + "\t\t\t\treturn basicSet";
-  protected final String TEXT_507 = ")otherEnd, msgs);";
-  protected final String TEXT_508 = NL + "\t\t\t\treturn eBasicSetContainer(otherEnd, ";
-  protected final String TEXT_509 = NL + "\t\t\t\tif (";
-  protected final String TEXT_510 = NL + "\t\t\t\t\tmsgs = ";
-  protected final String TEXT_511 = NL + "\t\treturn super.eInverseAdd(otherEnd, featureID, msgs);";
-  protected final String TEXT_512 = NL + "\t\treturn eDynamicInverseAdd(otherEnd, featureID, msgs);";
-  protected final String TEXT_513 = " eInverseRemove(";
-  protected final String TEXT_514 = "()).eMap()).basicRemove(otherEnd, msgs);";
-  protected final String TEXT_515 = ".Internal.Wrapper)";
-  protected final String TEXT_516 = "()).featureMap()).basicRemove(otherEnd, msgs);";
-  protected final String TEXT_517 = "()).basicRemove(otherEnd, msgs);";
-  protected final String TEXT_518 = NL + "\t\t\t\treturn eBasicSetContainer(null, ";
-  protected final String TEXT_519 = NL + "\t\t\t\treturn basicUnset";
-  protected final String TEXT_520 = "(msgs);";
-  protected final String TEXT_521 = "(null, msgs);";
-  protected final String TEXT_522 = NL + "\t\treturn super.eInverseRemove(otherEnd, featureID, msgs);";
-  protected final String TEXT_523 = NL + "\t\treturn eDynamicInverseRemove(otherEnd, featureID, msgs);";
-  protected final String TEXT_524 = " eBasicRemoveFromContainerFeature(";
-  protected final String TEXT_525 = " msgs)" + NL + "\t{" + NL + "\t\tswitch (eContainerFeatureID()";
-  protected final String TEXT_526 = ":" + NL + "\t\t\t\treturn eInternalContainer().eInverseRemove(this, ";
-  protected final String TEXT_527 = NL + "\t\treturn super.eBasicRemoveFromContainerFeature(msgs);";
-  protected final String TEXT_528 = NL + "\t\treturn eDynamicBasicRemoveFromContainer(msgs);";
-  protected final String TEXT_529 = NL + "\tpublic Object eGet(int featureID, boolean resolve, boolean coreType)" + NL + "\t{" + NL + "\t\tswitch (featureID";
-  protected final String TEXT_530 = NL + "\t\t\t\treturn ";
-  protected final String TEXT_531 = "() ? Boolean.TRUE : Boolean.FALSE;";
-  protected final String TEXT_532 = NL + "\t\t\t\treturn new ";
-  protected final String TEXT_533 = "());";
-  protected final String TEXT_534 = NL + "\t\t\t\tif (resolve) return ";
-  protected final String TEXT_535 = "();" + NL + "\t\t\t\treturn basicGet";
-  protected final String TEXT_536 = NL + "\t\t\t\tif (coreType) return ((";
-  protected final String TEXT_537 = "()).eMap();" + NL + "\t\t\t\telse return ";
-  protected final String TEXT_538 = NL + "\t\t\t\tif (coreType) return ";
-  protected final String TEXT_539 = "();" + NL + "\t\t\t\telse return ";
-  protected final String TEXT_540 = "().map();";
-  protected final String TEXT_541 = "()).featureMap();" + NL + "\t\t\t\treturn ";
-  protected final String TEXT_542 = "();" + NL + "\t\t\t\treturn ((";
-  protected final String TEXT_543 = "()).getWrapper();";
-  protected final String TEXT_544 = NL + "\t\treturn super.eGet(featureID, resolve, coreType);";
-  protected final String TEXT_545 = NL + "\t\treturn eDynamicGet(featureID, resolve, coreType);";
-  protected final String TEXT_546 = NL + "\tpublic void eSet(int featureID, Object newValue)" + NL + "\t{" + NL + "\t\tswitch (featureID";
-  protected final String TEXT_547 = NL + "\t\t\t\t((";
-  protected final String TEXT_548 = "()).featureMap()).set(newValue);";
-  protected final String TEXT_549 = "()).set(newValue);";
-  protected final String TEXT_550 = ".Setting)((";
-  protected final String TEXT_551 = "()).eMap()).set(newValue);";
-  protected final String TEXT_552 = ".Setting)";
-  protected final String TEXT_553 = "().clear();" + NL + "\t\t\t\t";
-  protected final String TEXT_554 = "().addAll((";
-  protected final String TEXT_555 = "<? extends ";
-  protected final String TEXT_556 = ">";
-  protected final String TEXT_557 = ")newValue);";
-  protected final String TEXT_558 = NL + "\t\t\t\tset";
-  protected final String TEXT_559 = "(((";
-  protected final String TEXT_560 = ")newValue).";
-  protected final String TEXT_561 = "newValue);";
-  protected final String TEXT_562 = NL + "\t\t\t\treturn;";
-  protected final String TEXT_563 = NL + "\t\tsuper.eSet(featureID, newValue);";
-  protected final String TEXT_564 = NL + "\t\teDynamicSet(featureID, newValue);";
-  protected final String TEXT_565 = NL + "\tpublic void eUnset(int featureID)" + NL + "\t{" + NL + "\t\tswitch (featureID";
-  protected final String TEXT_566 = "()).featureMap().clear();";
-  protected final String TEXT_567 = "().clear();";
-  protected final String TEXT_568 = NL + "\t\t\t\tunset";
-  protected final String TEXT_569 = ")null);";
-  protected final String TEXT_570 = NL + "\t\tsuper.eUnset(featureID);";
-  protected final String TEXT_571 = NL + "\t\teDynamicUnset(featureID);";
-  protected final String TEXT_572 = NL + "\tpublic boolean eIsSet(int featureID)" + NL + "\t{" + NL + "\t\tswitch (featureID";
-  protected final String TEXT_573 = NL + "\t\t\t\treturn isSet";
-  protected final String TEXT_574 = NL + "\t\t\t\treturn !((";
-  protected final String TEXT_575 = "()).featureMap().isEmpty();";
-  protected final String TEXT_576 = " != null && !";
-  protected final String TEXT_577 = ".featureMap().isEmpty();";
-  protected final String TEXT_578 = ".isEmpty();";
-  protected final String TEXT_579 = ");" + NL + "\t\t\t\treturn ";
-  protected final String TEXT_580 = NL + "\t\t\t\treturn !";
-  protected final String TEXT_581 = "().isEmpty();";
-  protected final String TEXT_582 = " != null;";
-  protected final String TEXT_583 = NL + "\t\t\t\treturn eVirtualGet(";
-  protected final String TEXT_584 = ") != null;";
-  protected final String TEXT_585 = NL + "\t\t\t\treturn basicGet";
-  protected final String TEXT_586 = "() != null;";
-  protected final String TEXT_587 = "_EFLAG) != 0) != ";
-  protected final String TEXT_588 = "_EFLAG) != ";
-  protected final String TEXT_589 = ") != ";
-  protected final String TEXT_590 = "() != ";
-  protected final String TEXT_591 = " != null : !";
-  protected final String TEXT_592 = ".equals(";
-  protected final String TEXT_593 = "() != null : !";
-  protected final String TEXT_594 = NL + "\t\treturn super.eIsSet(featureID);";
-  protected final String TEXT_595 = NL + "\t\treturn eDynamicIsSet(featureID);";
-  protected final String TEXT_596 = NL + "\tpublic int eBaseStructuralFeatureID(int derivedFeatureID, Class";
-  protected final String TEXT_597 = " baseClass)" + NL + "\t{";
-  protected final String TEXT_598 = NL + "\t\tif (baseClass == ";
-  protected final String TEXT_599 = ".class)" + NL + "\t\t{" + NL + "\t\t\tswitch (derivedFeatureID";
-  protected final String TEXT_600 = NL + "\t\t\t\tcase ";
-  protected final String TEXT_601 = ": return ";
-  protected final String TEXT_602 = NL + "\t\t\t\tdefault: return -1;" + NL + "\t\t\t}" + NL + "\t\t}";
-  protected final String TEXT_603 = NL + "\t\treturn super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);" + NL + "\t}";
-  protected final String TEXT_604 = NL + NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
-  protected final String TEXT_605 = NL + "\tpublic int eDerivedStructuralFeatureID(int baseFeatureID, Class";
-  protected final String TEXT_606 = ".class)" + NL + "\t\t{" + NL + "\t\t\tswitch (baseFeatureID)" + NL + "\t\t\t{";
-  protected final String TEXT_607 = ".class)" + NL + "\t\t{" + NL + "\t\t\tswitch (baseFeatureID";
-  protected final String TEXT_608 = NL + "\t\treturn super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);" + NL + "\t}" + NL;
-  protected final String TEXT_609 = NL + "\tpublic int eDerivedOperationID(int baseOperationID, Class";
-  protected final String TEXT_610 = ".class)" + NL + "\t\t{" + NL + "\t\t\tswitch (baseOperationID)" + NL + "\t\t\t{";
-  protected final String TEXT_611 = NL + "\t\t\t\tdefault: return super.eDerivedOperationID(baseOperationID, baseClass);" + NL + "\t\t\t}" + NL + "\t\t}";
-  protected final String TEXT_612 = ".class)" + NL + "\t\t{" + NL + "\t\t\tswitch (baseOperationID";
-  protected final String TEXT_613 = NL + "\t\treturn super.eDerivedOperationID(baseOperationID, baseClass);" + NL + "\t}" + NL;
-  protected final String TEXT_614 = NL + "\tprotected Object[] eVirtualValues()" + NL + "\t{" + NL + "\t\treturn ";
-  protected final String TEXT_615 = ";" + NL + "\t}" + NL + "" + NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
-  protected final String TEXT_616 = NL + "\tprotected void eSetVirtualValues(Object[] newValues)" + NL + "\t{" + NL + "\t\t";
-  protected final String TEXT_617 = " = newValues;" + NL + "\t}" + NL;
-  protected final String TEXT_618 = NL + "\tprotected int eVirtualIndexBits(int offset)" + NL + "\t{" + NL + "\t\tswitch (offset)" + NL + "\t\t{";
-  protected final String TEXT_619 = " :" + NL + "\t\t\t\treturn ";
-  protected final String TEXT_620 = NL + "\t\t\tdefault :" + NL + "\t\t\t\tthrow new IndexOutOfBoundsException();" + NL + "\t\t}" + NL + "\t}" + NL + "" + NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
-  protected final String TEXT_621 = NL + "\tprotected void eSetVirtualIndexBits(int offset, int newIndexBits)" + NL + "\t{" + NL + "\t\tswitch (offset)" + NL + "\t\t{";
-  protected final String TEXT_622 = " :" + NL + "\t\t\t\t";
-  protected final String TEXT_623 = " = newIndexBits;" + NL + "\t\t\t\tbreak;";
-  protected final String TEXT_624 = NL + "\t\t\tdefault :" + NL + "\t\t\t\tthrow new IndexOutOfBoundsException();" + NL + "\t\t}" + NL + "\t}" + NL;
-  protected final String TEXT_625 = NL + "\t@SuppressWarnings(";
-  protected final String TEXT_626 = "\"unchecked\"";
-  protected final String TEXT_627 = "{\"rawtypes\", \"unchecked\" }";
-  protected final String TEXT_628 = NL + "\tpublic Object eInvoke(int operationID, ";
-  protected final String TEXT_629 = " arguments) throws ";
-  protected final String TEXT_630 = NL + "\t{" + NL + "\t\tswitch (operationID";
-  protected final String TEXT_631 = NL + "\t\t\t\ttry" + NL + "\t\t\t\t{";
-  protected final String TEXT_632 = "arguments.get(";
-  protected final String TEXT_633 = ");" + NL + "\t\t\t\t";
-  protected final String TEXT_634 = "return null;";
-  protected final String TEXT_635 = "return ";
-  protected final String TEXT_636 = NL + "\t\t\t\t}" + NL + "\t\t\t\tcatch (";
-  protected final String TEXT_637 = " throwable)" + NL + "\t\t\t\t{" + NL + "\t\t\t\t\tthrow new ";
-  protected final String TEXT_638 = "(throwable);" + NL + "\t\t\t\t}";
-  protected final String TEXT_639 = NL + "\t\treturn super.eInvoke(operationID, arguments);";
-  protected final String TEXT_640 = NL + "\t\treturn eDynamicInvoke(operationID, arguments);";
-  protected final String TEXT_641 = NL + "\tpublic String toString()" + NL + "\t{" + NL + "\t\tif (eIsProxy()) return super.toString();" + NL + "" + NL + "\t\t";
-  protected final String TEXT_642 = " result = new ";
-  protected final String TEXT_643 = "(super.toString());";
-  protected final String TEXT_644 = NL + "\t\tresult.append(\" (";
-  protected final String TEXT_645 = ": \");";
-  protected final String TEXT_646 = NL + "\t\tresult.append(\", ";
-  protected final String TEXT_647 = NL + "\t\tif (eVirtualIsSet(";
-  protected final String TEXT_648 = ")) result.append(eVirtualGet(";
-  protected final String TEXT_649 = ")); else result.append(\"<unset>\");";
-  protected final String TEXT_650 = "_ESETFLAG) != 0";
-  protected final String TEXT_651 = ") result.append((";
-  protected final String TEXT_652 = "_EFLAG) != 0); else result.append(\"<unset>\");";
-  protected final String TEXT_653 = ") result.append(";
-  protected final String TEXT_654 = "_EFLAG_OFFSET]); else result.append(\"<unset>\");";
-  protected final String TEXT_655 = "); else result.append(\"<unset>\");";
-  protected final String TEXT_656 = NL + "\t\tresult.append(eVirtualGet(";
-  protected final String TEXT_657 = NL + "\t\tresult.append((";
-  protected final String TEXT_658 = "_EFLAG) != 0);";
-  protected final String TEXT_659 = NL + "\t\tresult.append(";
-  protected final String TEXT_660 = "_EFLAG_OFFSET]);";
-  protected final String TEXT_661 = NL + "\t\tresult.append(')');" + NL + "\t\treturn result.toString();" + NL + "\t}" + NL;
-  protected final String TEXT_662 = NL + "\tprotected int hash = -1;" + NL + "" + NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
-  protected final String TEXT_663 = NL + "\tpublic int getHash()" + NL + "\t{" + NL + "\t\tif (hash == -1)" + NL + "\t\t{" + NL + "\t\t\t";
-  protected final String TEXT_664 = " theKey = getKey();" + NL + "\t\t\thash = (theKey == null ? 0 : theKey.hashCode());" + NL + "\t\t}" + NL + "\t\treturn hash;" + NL + "\t}" + NL + "" + NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
-  protected final String TEXT_665 = NL + "\tpublic void setHash(int hash)" + NL + "\t{" + NL + "\t\tthis.hash = hash;" + NL + "\t}" + NL + "" + NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
-  protected final String TEXT_666 = " getKey()" + NL + "\t{";
-  protected final String TEXT_667 = "(getTypedKey());";
-  protected final String TEXT_668 = NL + "\t\treturn getTypedKey();";
-  protected final String TEXT_669 = NL + "\tpublic void setKey(";
-  protected final String TEXT_670 = " key)" + NL + "\t{";
-  protected final String TEXT_671 = NL + "\t\tgetTypedKey().addAll(";
-  protected final String TEXT_672 = "key);";
-  protected final String TEXT_673 = NL + "\t\tsetTypedKey(key);";
-  protected final String TEXT_674 = NL + "\t\tsetTypedKey(((";
-  protected final String TEXT_675 = ")key).";
-  protected final String TEXT_676 = NL + "\t\tsetTypedKey((";
-  protected final String TEXT_677 = ")key);";
-  protected final String TEXT_678 = " getValue()" + NL + "\t{";
-  protected final String TEXT_679 = "(getTypedValue());";
-  protected final String TEXT_680 = NL + "\t\treturn getTypedValue();";
-  protected final String TEXT_681 = " setValue(";
-  protected final String TEXT_682 = " value)" + NL + "\t{" + NL + "\t\t";
-  protected final String TEXT_683 = " oldValue = getValue();";
-  protected final String TEXT_684 = NL + "\t\tgetTypedValue().clear();" + NL + "\t\tgetTypedValue().addAll(";
-  protected final String TEXT_685 = "value);";
-  protected final String TEXT_686 = NL + "\t\tsetTypedValue(value);";
-  protected final String TEXT_687 = NL + "\t\tsetTypedValue(((";
-  protected final String TEXT_688 = ")value).";
-  protected final String TEXT_689 = NL + "\t\tsetTypedValue((";
-  protected final String TEXT_690 = ")value);";
-  protected final String TEXT_691 = NL + "\t\treturn oldValue;" + NL + "\t}" + NL + "" + NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
-  protected final String TEXT_692 = " getEMap()" + NL + "\t{" + NL + "\t\t";
-  protected final String TEXT_693 = " container = eContainer();" + NL + "\t\treturn container == null ? null : (";
-  protected final String TEXT_694 = ")container.eGet(eContainmentFeature());" + NL + "\t}" + NL;
-  protected final String TEXT_695 = NL + "} //";
+  protected final String TEXT_203 = NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->";
+  protected final String TEXT_204 = NL + "\t * <!-- begin-model-doc -->" + NL + "\t * ";
+  protected final String TEXT_205 = NL + "\t * <!-- end-model-doc -->";
+  protected final String TEXT_206 = NL + "\t * @return the value of the '<em>";
+  protected final String TEXT_207 = "</em>' ";
+  protected final String TEXT_208 = NL + "\t * @see ";
+  protected final String TEXT_209 = NL + "\t * @see #isSet";
+  protected final String TEXT_210 = NL + "\t * @see #unset";
+  protected final String TEXT_211 = NL + "\t * @see #set";
+  protected final String TEXT_212 = NL + "\t * @model ";
+  protected final String TEXT_213 = NL + "\t *        ";
+  protected final String TEXT_214 = NL + "\t * @model";
+  protected final String TEXT_215 = ")eDynamicGet(";
+  protected final String TEXT_216 = " - ESTATIC_FEATURE_COUNT";
+  protected final String TEXT_217 = ", true, ";
+  protected final String TEXT_218 = ").";
+  protected final String TEXT_219 = ")eGet(";
+  protected final String TEXT_220 = ", true)";
+  protected final String TEXT_221 = "__ESETTING_DELEGATE.dynamicGet(this, null, 0, true, false)";
+  protected final String TEXT_222 = NL + "\t\tif (eContainerFeatureID() != ";
+  protected final String TEXT_223 = ") return null;" + NL + "\t\treturn (";
+  protected final String TEXT_224 = "eContainer";
+  protected final String TEXT_225 = "eInternalContainer";
+  protected final String TEXT_226 = "();";
+  protected final String TEXT_227 = " != null && ";
+  protected final String TEXT_228 = ".eIsProxy())" + NL + "\t\t{" + NL + "\t\t\t";
+  protected final String TEXT_229 = " old";
+  protected final String TEXT_230 = ";" + NL + "\t\t\t";
+  protected final String TEXT_231 = "eResolveProxy(old";
+  protected final String TEXT_232 = ");" + NL + "\t\t\tif (";
+  protected final String TEXT_233 = " != old";
+  protected final String TEXT_234 = ")" + NL + "\t\t\t{";
+  protected final String TEXT_235 = NL + "\t\t\t\t";
+  protected final String TEXT_236 = " msgs = old";
+  protected final String TEXT_237 = ".eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ";
+  protected final String TEXT_238 = ", null, null);";
+  protected final String TEXT_239 = " msgs =  old";
+  protected final String TEXT_240 = ".eInverseRemove(this, ";
+  protected final String TEXT_241 = ".class, null);";
+  protected final String TEXT_242 = NL + "\t\t\t\tif (new";
+  protected final String TEXT_243 = ".eInternalContainer() == null)" + NL + "\t\t\t\t{";
+  protected final String TEXT_244 = NL + "\t\t\t\t\tmsgs = new";
+  protected final String TEXT_245 = ".eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ";
+  protected final String TEXT_246 = ", null, msgs);";
+  protected final String TEXT_247 = NL + "\t\t\t\t\tmsgs =  new";
+  protected final String TEXT_248 = ".eInverseAdd(this, ";
+  protected final String TEXT_249 = ".class, msgs);";
+  protected final String TEXT_250 = NL + "\t\t\t\t}" + NL + "\t\t\t\tif (msgs != null) msgs.dispatch();";
+  protected final String TEXT_251 = NL + "\t\t\t\teVirtualSet(";
+  protected final String TEXT_252 = NL + "\t\t\t\tif (eNotificationRequired())" + NL + "\t\t\t\t\teNotify(new ";
+  protected final String TEXT_253 = "(this, ";
+  protected final String TEXT_254 = ".RESOLVE, ";
+  protected final String TEXT_255 = ", old";
+  protected final String TEXT_256 = "));";
+  protected final String TEXT_257 = NL + "\t\t\t}" + NL + "\t\t}";
+  protected final String TEXT_258 = NL + "\t\treturn (";
+  protected final String TEXT_259 = " & ";
+  protected final String TEXT_260 = "_EFLAG) != 0;";
+  protected final String TEXT_261 = "_EFLAG_VALUES[(";
+  protected final String TEXT_262 = "_EFLAG) >>> ";
+  protected final String TEXT_263 = "_EFLAG_OFFSET];";
+  protected final String TEXT_264 = " = basicGet";
+  protected final String TEXT_265 = "();" + NL + "\t\treturn ";
+  protected final String TEXT_266 = ".eIsProxy() ? ";
+  protected final String TEXT_267 = "eResolveProxy(";
+  protected final String TEXT_268 = ") : ";
+  protected final String TEXT_269 = NL + "\t\treturn new ";
+  protected final String TEXT_270 = "((";
+  protected final String TEXT_271 = ".Internal)((";
+  protected final String TEXT_272 = ".Internal.Wrapper)get";
+  protected final String TEXT_273 = "()).featureMap().";
+  protected final String TEXT_274 = "list(";
+  protected final String TEXT_275 = ")get";
+  protected final String TEXT_276 = "().";
+  protected final String TEXT_277 = NL + "\t\treturn ((";
+  protected final String TEXT_278 = "()).featureMap().list(";
+  protected final String TEXT_279 = NL + "\t\treturn get";
+  protected final String TEXT_280 = "().list(";
+  protected final String TEXT_281 = "()).featureMap().get(";
+  protected final String TEXT_282 = "get";
+  protected final String TEXT_283 = "().get(";
+  protected final String TEXT_284 = NL + "\t\t// TODO: implement this method to return the '";
+  protected final String TEXT_285 = "' ";
+  protected final String TEXT_286 = NL + "\t\t// Ensure that you remove @generated or mark it @generated NOT";
+  protected final String TEXT_287 = NL + "\t\t// The list is expected to implement org.eclipse.emf.ecore.util.InternalEList and org.eclipse.emf.ecore.EStructuralFeature.Setting" + NL + "\t\t// so it's likely that an appropriate subclass of org.eclipse.emf.ecore.util.";
+  protected final String TEXT_288 = "EcoreEMap";
+  protected final String TEXT_289 = "BasicFeatureMap";
+  protected final String TEXT_290 = "EcoreEList";
+  protected final String TEXT_291 = " should be used.";
+  protected final String TEXT_292 = NL + "\t\tthrow new UnsupportedOperationException();";
+  protected final String TEXT_293 = " basicGet";
+  protected final String TEXT_294 = ", false, ";
+  protected final String TEXT_295 = "__ESETTING_DELEGATE.dynamicGet(this, null, 0, false, false)";
+  protected final String TEXT_296 = ")eInternalContainer();";
+  protected final String TEXT_297 = ")((";
+  protected final String TEXT_298 = ", false);";
+  protected final String TEXT_299 = NL + "\t\t// -> do not perform proxy resolution" + NL + "\t\t// Ensure that you remove @generated or mark it @generated NOT" + NL + "\t\tthrow new UnsupportedOperationException();";
+  protected final String TEXT_300 = " msgs)" + NL + "\t{";
+  protected final String TEXT_301 = NL + "\t\tmsgs = eBasicSetContainer(";
+  protected final String TEXT_302 = ", msgs);";
+  protected final String TEXT_303 = NL + "\t\treturn msgs;";
+  protected final String TEXT_304 = NL + "\t\tmsgs = eDynamicInverseAdd(";
+  protected final String TEXT_305 = NL + "\t\tObject old";
+  protected final String TEXT_306 = " = eVirtualSet(";
+  protected final String TEXT_307 = ", new";
+  protected final String TEXT_308 = ";" + NL + "\t\t";
+  protected final String TEXT_309 = " = new";
+  protected final String TEXT_310 = NL + "\t\tboolean isSetChange = old";
+  protected final String TEXT_311 = " == EVIRTUAL_NO_VALUE;";
+  protected final String TEXT_312 = NL + "\t\tboolean old";
+  protected final String TEXT_313 = "ESet = (";
+  protected final String TEXT_314 = "_ESETFLAG) != 0;";
+  protected final String TEXT_315 = "_ESETFLAG;";
+  protected final String TEXT_316 = "ESet = ";
+  protected final String TEXT_317 = "ESet;";
+  protected final String TEXT_318 = "ESet = true;";
+  protected final String TEXT_319 = NL + "\t\tif (eNotificationRequired())" + NL + "\t\t{";
+  protected final String TEXT_320 = " notification = new ";
+  protected final String TEXT_321 = ".SET, ";
+  protected final String TEXT_322 = "isSetChange ? null : old";
+  protected final String TEXT_323 = "old";
+  protected final String TEXT_324 = "isSetChange";
+  protected final String TEXT_325 = "!old";
+  protected final String TEXT_326 = "ESet";
+  protected final String TEXT_327 = " == EVIRTUAL_NO_VALUE ? null : old";
+  protected final String TEXT_328 = NL + "\t\t\tif (msgs == null) msgs = notification; else msgs.add(notification);" + NL + "\t\t}";
+  protected final String TEXT_329 = "()).featureMap()).basicAdd(";
+  protected final String TEXT_330 = ".Internal)get";
+  protected final String TEXT_331 = "()).basicAdd(";
+  protected final String TEXT_332 = NL + "\t\t// TODO: implement this method to set the contained '";
+  protected final String TEXT_333 = NL + "\t\t// -> this method is automatically invoked to keep the containment relationship in synch" + NL + "\t\t// -> do not modify other features" + NL + "\t\t// -> return msgs, after adding any generated Notification to it (if it is null, a NotificationChain object must be created first)" + NL + "\t\t// Ensure that you remove @generated or mark it @generated NOT" + NL + "\t\tthrow new UnsupportedOperationException();";
+  protected final String TEXT_334 = NL + "\t/**" + NL + "\t * Sets the value of the '{@link ";
+  protected final String TEXT_335 = NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @param value the new value of the '<em>";
+  protected final String TEXT_336 = NL + "\t * @see #";
+  protected final String TEXT_337 = " value);" + NL;
+  protected final String TEXT_338 = ")" + NL + "\t{";
+  protected final String TEXT_339 = NL + "\t\teDynamicSet(";
+  protected final String TEXT_340 = "new ";
+  protected final String TEXT_341 = "new";
+  protected final String TEXT_342 = NL + "\t\teSet(";
+  protected final String TEXT_343 = "__ESETTING_DELEGATE.dynamicSet(this, null, 0, ";
+  protected final String TEXT_344 = NL + "\t\tif (new";
+  protected final String TEXT_345 = " != eInternalContainer() || (eContainerFeatureID() != ";
+  protected final String TEXT_346 = " && new";
+  protected final String TEXT_347 = " != null))" + NL + "\t\t{" + NL + "\t\t\tif (";
+  protected final String TEXT_348 = ".isAncestor(this, ";
+  protected final String TEXT_349 = "))" + NL + "\t\t\t\tthrow new ";
+  protected final String TEXT_350 = "(\"Recursive containment not allowed for \" + toString());";
+  protected final String TEXT_351 = " msgs = null;" + NL + "\t\t\tif (eInternalContainer() != null)" + NL + "\t\t\t\tmsgs = eBasicRemoveFromContainer(msgs);" + NL + "\t\t\tif (new";
+  protected final String TEXT_352 = " != null)" + NL + "\t\t\t\tmsgs = ";
+  protected final String TEXT_353 = ".class, msgs);" + NL + "\t\t\tmsgs = basicSet";
+  protected final String TEXT_354 = ", msgs);" + NL + "\t\t\tif (msgs != null) msgs.dispatch();" + NL + "\t\t}";
+  protected final String TEXT_355 = NL + "\t\telse if (eNotificationRequired())" + NL + "\t\t\teNotify(new ";
+  protected final String TEXT_356 = " != ";
+  protected final String TEXT_357 = ")" + NL + "\t\t{" + NL + "\t\t\t";
+  protected final String TEXT_358 = " msgs = null;" + NL + "\t\t\tif (";
+  protected final String TEXT_359 = " != null)";
+  protected final String TEXT_360 = NL + "\t\t\t\tmsgs = ";
+  protected final String TEXT_361 = ", null, msgs);" + NL + "\t\t\tif (new";
+  protected final String TEXT_362 = ".class, msgs);" + NL + "\t\t\tif (new";
+  protected final String TEXT_363 = NL + "\t\t\tmsgs = basicSet";
+  protected final String TEXT_364 = NL + "\t\telse" + NL + "\t\t{";
+  protected final String TEXT_365 = NL + "\t\t\tboolean old";
+  protected final String TEXT_366 = "ESet = eVirtualIsSet(";
+  protected final String TEXT_367 = NL + "\t\t\tif (eNotificationRequired())" + NL + "\t\t\t\teNotify(new ";
+  protected final String TEXT_368 = ", !old";
+  protected final String TEXT_369 = "ESet));";
+  protected final String TEXT_370 = NL + "\t\t}";
+  protected final String TEXT_371 = ") ";
+  protected final String TEXT_372 = "_EFLAG; else ";
+  protected final String TEXT_373 = " &= ~";
+  protected final String TEXT_374 = "_EFLAG;";
+  protected final String TEXT_375 = " == null) new";
+  protected final String TEXT_376 = "_EDEFAULT;" + NL + "\t\t";
+  protected final String TEXT_377 = " & ~";
+  protected final String TEXT_378 = "_EFLAG | ";
+  protected final String TEXT_379 = ".VALUES.indexOf(new";
+  protected final String TEXT_380 = "_EFLAG_OFFSET;";
+  protected final String TEXT_381 = " == null ? ";
+  protected final String TEXT_382 = " : new";
+  protected final String TEXT_383 = NL + "\t\tif (eNotificationRequired())" + NL + "\t\t\teNotify(new ";
+  protected final String TEXT_384 = "isSetChange ? ";
+  protected final String TEXT_385 = " : old";
+  protected final String TEXT_386 = " == EVIRTUAL_NO_VALUE ? ";
+  protected final String TEXT_387 = NL + "\t\t((";
+  protected final String TEXT_388 = "()).featureMap()).set(";
+  protected final String TEXT_389 = "()).set(";
+  protected final String TEXT_390 = NL + "\t\t// TODO: implement this method to set the '";
+  protected final String TEXT_391 = NL + "\t\t// Ensure that you remove @generated or mark it @generated NOT" + NL + "\t\tthrow new UnsupportedOperationException();";
+  protected final String TEXT_392 = " basicUnset";
+  protected final String TEXT_393 = NL + "\t\treturn eDynamicInverseRemove(";
+  protected final String TEXT_394 = "basicGet";
+  protected final String TEXT_395 = "(), ";
+  protected final String TEXT_396 = "Object old";
+  protected final String TEXT_397 = "eVirtualUnset(";
+  protected final String TEXT_398 = " = null;";
+  protected final String TEXT_399 = " != EVIRTUAL_NO_VALUE;";
+  protected final String TEXT_400 = "ESet = false;";
+  protected final String TEXT_401 = NL + "\t\tif (eNotificationRequired())" + NL + "\t\t{" + NL + "\t\t\t";
+  protected final String TEXT_402 = ".UNSET, ";
+  protected final String TEXT_403 = "isSetChange ? old";
+  protected final String TEXT_404 = " : null";
+  protected final String TEXT_405 = ", null, ";
+  protected final String TEXT_406 = ");" + NL + "\t\t\tif (msgs == null) msgs = notification; else msgs.add(notification);" + NL + "\t\t}" + NL + "\t\treturn msgs;";
+  protected final String TEXT_407 = NL + "\t\t// TODO: implement this method to unset the contained '";
+  protected final String TEXT_408 = NL + "\t/**" + NL + "\t * Unsets the value of the '{@link ";
+  protected final String TEXT_409 = NL + "\tvoid unset";
+  protected final String TEXT_410 = NL + "\tpublic void unset";
+  protected final String TEXT_411 = NL + "\t\teDynamicUnset(";
+  protected final String TEXT_412 = NL + "\t\teUnset(";
+  protected final String TEXT_413 = "__ESETTING_DELEGATE.dynamicUnset(this, null, 0);";
+  protected final String TEXT_414 = " != null) ((";
+  protected final String TEXT_415 = ".Unsettable";
+  protected final String TEXT_416 = ").unset();";
+  protected final String TEXT_417 = " != null)" + NL + "\t\t{" + NL + "\t\t\t";
+  protected final String TEXT_418 = " msgs = null;";
+  protected final String TEXT_419 = NL + "\t\t\tmsgs = ";
+  protected final String TEXT_420 = NL + "\t\t\tmsgs = basicUnset";
+  protected final String TEXT_421 = "(msgs);" + NL + "\t\t\tif (msgs != null) msgs.dispatch();" + NL + "\t\t}" + NL + "\t\telse" + NL + "\t\t{";
+  protected final String TEXT_422 = ", null, null, old";
+  protected final String TEXT_423 = " = eVirtualUnset(";
+  protected final String TEXT_424 = "_EFLAG_DEFAULT;";
+  protected final String TEXT_425 = " : ";
+  protected final String TEXT_426 = "()).featureMap()).clear(";
+  protected final String TEXT_427 = "()).clear(";
+  protected final String TEXT_428 = NL + "\t\t// TODO: implement this method to unset the '";
+  protected final String TEXT_429 = NL + "\t/**" + NL + "\t * Returns whether the value of the '{@link ";
+  protected final String TEXT_430 = " is set.";
+  protected final String TEXT_431 = NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @return whether the value of the '<em>";
+  protected final String TEXT_432 = NL + "\tboolean isSet";
+  protected final String TEXT_433 = NL + "\tpublic boolean isSet";
+  protected final String TEXT_434 = NL + "\t\treturn eDynamicIsSet(";
+  protected final String TEXT_435 = NL + "\t\treturn eIsSet(";
+  protected final String TEXT_436 = "__ESETTING_DELEGATE.dynamicIsSet(this, null, 0);";
+  protected final String TEXT_437 = " != null && ((";
+  protected final String TEXT_438 = ").isSet();";
+  protected final String TEXT_439 = NL + "\t\treturn eVirtualIsSet(";
+  protected final String TEXT_440 = NL + "\t\treturn !((";
+  protected final String TEXT_441 = "()).featureMap()).isEmpty(";
+  protected final String TEXT_442 = "()).isEmpty(";
+  protected final String TEXT_443 = NL + "\t\t// TODO: implement this method to return whether the '";
+  protected final String TEXT_444 = " is set" + NL + "\t\t// Ensure that you remove @generated or mark it @generated NOT" + NL + "\t\tthrow new UnsupportedOperationException();";
+  protected final String TEXT_445 = NL + "\t/**" + NL + "\t * The cached validation expression for the '{@link #";
+  protected final String TEXT_446 = ") <em>";
+  protected final String TEXT_447 = "</em>}' invariant operation." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @see #";
+  protected final String TEXT_448 = "__EEXPRESSION = \"";
+  protected final String TEXT_449 = NL + "\t/**" + NL + "\t * The cached invocation delegate for the '{@link #";
+  protected final String TEXT_450 = "</em>}' operation." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @see #";
+  protected final String TEXT_451 = ".Internal.InvocationDelegate ";
+  protected final String TEXT_452 = "__EINVOCATION_DELEGATE = ((";
+  protected final String TEXT_453 = ").getInvocationDelegate();" + NL;
+  protected final String TEXT_454 = NL + "\t/**";
+  protected final String TEXT_455 = NL + "\t * <!-- begin-model-doc -->";
+  protected final String TEXT_456 = NL + "\t * @param ";
+  protected final String TEXT_457 = NL + "\t *   ";
+  protected final String TEXT_458 = NL + "\t{";
+  protected final String TEXT_459 = NL + "\t\treturn" + NL + "\t\t\t";
+  protected final String TEXT_460 = ".validate" + NL + "\t\t\t\t(";
+  protected final String TEXT_461 = "," + NL + "\t\t\t\t this," + NL + "\t\t\t\t ";
+  protected final String TEXT_462 = "," + NL + "\t\t\t\t ";
+  protected final String TEXT_463 = "," + NL + "\t\t\t\t \"";
+  protected final String TEXT_464 = "\",";
+  protected final String TEXT_465 = NL + "\t\t\t\t ";
+  protected final String TEXT_466 = "__EEXPRESSION," + NL + "\t\t\t\t ";
+  protected final String TEXT_467 = ".ERROR," + NL + "\t\t\t\t ";
+  protected final String TEXT_468 = ".DIAGNOSTIC_SOURCE," + NL + "\t\t\t\t ";
+  protected final String TEXT_469 = NL + "\t\t// TODO: implement this method" + NL + "\t\t// -> specify the condition that violates the invariant" + NL + "\t\t// -> verify the details of the diagnostic, including severity and message" + NL + "\t\t// Ensure that you remove @generated or mark it @generated NOT" + NL + "\t\tif (false)" + NL + "\t\t{" + NL + "\t\t\tif (";
+  protected final String TEXT_470 = " != null)" + NL + "\t\t\t{" + NL + "\t\t\t\t";
+  protected final String TEXT_471 = ".add" + NL + "\t\t\t\t\t(new ";
+  protected final String TEXT_472 = NL + "\t\t\t\t\t\t(";
+  protected final String TEXT_473 = ".ERROR," + NL + "\t\t\t\t\t\t ";
+  protected final String TEXT_474 = ".DIAGNOSTIC_SOURCE," + NL + "\t\t\t\t\t\t ";
+  protected final String TEXT_475 = "," + NL + "\t\t\t\t\t\t ";
+  protected final String TEXT_476 = ".INSTANCE.getString(\"_UI_GenericInvariant_diagnostic\", new Object[] { \"";
+  protected final String TEXT_477 = "\", ";
+  protected final String TEXT_478 = ".getObjectLabel(this, ";
+  protected final String TEXT_479 = ") }),";
+  protected final String TEXT_480 = NL + "\t\t\t\t\t\t new Object [] { this }));" + NL + "\t\t\t}" + NL + "\t\t\treturn false;" + NL + "\t\t}" + NL + "\t\treturn true;";
+  protected final String TEXT_481 = NL + "\t\ttry" + NL + "\t\t{";
+  protected final String TEXT_482 = "__EINVOCATION_DELEGATE.dynamicInvoke(this, ";
+  protected final String TEXT_483 = ".UnmodifiableEList<Object>(";
+  protected final String TEXT_484 = "null";
+  protected final String TEXT_485 = NL + "\t\t\treturn ";
+  protected final String TEXT_486 = NL + "\t\t}" + NL + "\t\tcatch (";
+  protected final String TEXT_487 = " ite)" + NL + "\t\t{" + NL + "\t\t\tthrow new ";
+  protected final String TEXT_488 = "(ite);" + NL + "\t\t}";
+  protected final String TEXT_489 = NL + "\t\t// TODO: implement this method" + NL + "\t\t// Ensure that you remove @generated or mark it @generated NOT" + NL + "\t\tthrow new UnsupportedOperationException();";
+  protected final String TEXT_490 = " eInverseAdd(";
+  protected final String TEXT_491 = " otherEnd, int featureID, ";
+  protected final String TEXT_492 = " msgs)" + NL + "\t{" + NL + "\t\tswitch (featureID";
+  protected final String TEXT_493 = ")" + NL + "\t\t{";
+  protected final String TEXT_494 = NL + "\t\t\tcase ";
+  protected final String TEXT_495 = ":";
+  protected final String TEXT_496 = NL + "\t\t\t\treturn ((";
+  protected final String TEXT_497 = ".InternalMapView";
+  protected final String TEXT_498 = "()).eMap()).basicAdd(otherEnd, msgs);";
+  protected final String TEXT_499 = NL + "\t\t\t\treturn (";
+  protected final String TEXT_500 = "()).basicAdd(otherEnd, msgs);";
+  protected final String TEXT_501 = NL + "\t\t\t\tif (eInternalContainer() != null)" + NL + "\t\t\t\t\tmsgs = eBasicRemoveFromContainer(msgs);";
+  protected final String TEXT_502 = NL + "\t\t\t\treturn basicSet";
+  protected final String TEXT_503 = ")otherEnd, msgs);";
+  protected final String TEXT_504 = NL + "\t\t\t\treturn eBasicSetContainer(otherEnd, ";
+  protected final String TEXT_505 = NL + "\t\t\t\tif (";
+  protected final String TEXT_506 = NL + "\t\t\t\t\tmsgs = ";
+  protected final String TEXT_507 = NL + "\t\treturn super.eInverseAdd(otherEnd, featureID, msgs);";
+  protected final String TEXT_508 = NL + "\t\treturn eDynamicInverseAdd(otherEnd, featureID, msgs);";
+  protected final String TEXT_509 = " eInverseRemove(";
+  protected final String TEXT_510 = "()).eMap()).basicRemove(otherEnd, msgs);";
+  protected final String TEXT_511 = ".Internal.Wrapper)";
+  protected final String TEXT_512 = "()).featureMap()).basicRemove(otherEnd, msgs);";
+  protected final String TEXT_513 = "()).basicRemove(otherEnd, msgs);";
+  protected final String TEXT_514 = NL + "\t\t\t\treturn eBasicSetContainer(null, ";
+  protected final String TEXT_515 = NL + "\t\t\t\treturn basicUnset";
+  protected final String TEXT_516 = "(msgs);";
+  protected final String TEXT_517 = "(null, msgs);";
+  protected final String TEXT_518 = NL + "\t\treturn super.eInverseRemove(otherEnd, featureID, msgs);";
+  protected final String TEXT_519 = NL + "\t\treturn eDynamicInverseRemove(otherEnd, featureID, msgs);";
+  protected final String TEXT_520 = " eBasicRemoveFromContainerFeature(";
+  protected final String TEXT_521 = " msgs)" + NL + "\t{" + NL + "\t\tswitch (eContainerFeatureID()";
+  protected final String TEXT_522 = ":" + NL + "\t\t\t\treturn eInternalContainer().eInverseRemove(this, ";
+  protected final String TEXT_523 = NL + "\t\treturn super.eBasicRemoveFromContainerFeature(msgs);";
+  protected final String TEXT_524 = NL + "\t\treturn eDynamicBasicRemoveFromContainer(msgs);";
+  protected final String TEXT_525 = NL + "\tpublic Object eGet(int featureID, boolean resolve, boolean coreType)" + NL + "\t{" + NL + "\t\tswitch (featureID";
+  protected final String TEXT_526 = NL + "\t\t\t\treturn ";
+  protected final String TEXT_527 = "() ? Boolean.TRUE : Boolean.FALSE;";
+  protected final String TEXT_528 = NL + "\t\t\t\treturn new ";
+  protected final String TEXT_529 = "());";
+  protected final String TEXT_530 = NL + "\t\t\t\tif (resolve) return ";
+  protected final String TEXT_531 = "();" + NL + "\t\t\t\treturn basicGet";
+  protected final String TEXT_532 = NL + "\t\t\t\tif (coreType) return ((";
+  protected final String TEXT_533 = "()).eMap();" + NL + "\t\t\t\telse return ";
+  protected final String TEXT_534 = NL + "\t\t\t\tif (coreType) return ";
+  protected final String TEXT_535 = "();" + NL + "\t\t\t\telse return ";
+  protected final String TEXT_536 = "().map();";
+  protected final String TEXT_537 = "()).featureMap();" + NL + "\t\t\t\treturn ";
+  protected final String TEXT_538 = "();" + NL + "\t\t\t\treturn ((";
+  protected final String TEXT_539 = "()).getWrapper();";
+  protected final String TEXT_540 = NL + "\t\treturn super.eGet(featureID, resolve, coreType);";
+  protected final String TEXT_541 = NL + "\t\treturn eDynamicGet(featureID, resolve, coreType);";
+  protected final String TEXT_542 = NL + "\tpublic void eSet(int featureID, Object newValue)" + NL + "\t{" + NL + "\t\tswitch (featureID";
+  protected final String TEXT_543 = NL + "\t\t\t\t((";
+  protected final String TEXT_544 = "()).featureMap()).set(newValue);";
+  protected final String TEXT_545 = "()).set(newValue);";
+  protected final String TEXT_546 = ".Setting)((";
+  protected final String TEXT_547 = "()).eMap()).set(newValue);";
+  protected final String TEXT_548 = ".Setting)";
+  protected final String TEXT_549 = "().clear();" + NL + "\t\t\t\t";
+  protected final String TEXT_550 = "().addAll((";
+  protected final String TEXT_551 = "<? extends ";
+  protected final String TEXT_552 = ">";
+  protected final String TEXT_553 = ")newValue);";
+  protected final String TEXT_554 = NL + "\t\t\t\tset";
+  protected final String TEXT_555 = "(((";
+  protected final String TEXT_556 = ")newValue).";
+  protected final String TEXT_557 = "newValue);";
+  protected final String TEXT_558 = NL + "\t\t\t\treturn;";
+  protected final String TEXT_559 = NL + "\t\tsuper.eSet(featureID, newValue);";
+  protected final String TEXT_560 = NL + "\t\teDynamicSet(featureID, newValue);";
+  protected final String TEXT_561 = NL + "\tpublic void eUnset(int featureID)" + NL + "\t{" + NL + "\t\tswitch (featureID";
+  protected final String TEXT_562 = "()).featureMap().clear();";
+  protected final String TEXT_563 = "().clear();";
+  protected final String TEXT_564 = NL + "\t\t\t\tunset";
+  protected final String TEXT_565 = ")null);";
+  protected final String TEXT_566 = NL + "\t\tsuper.eUnset(featureID);";
+  protected final String TEXT_567 = NL + "\t\teDynamicUnset(featureID);";
+  protected final String TEXT_568 = NL + "\tpublic boolean eIsSet(int featureID)" + NL + "\t{" + NL + "\t\tswitch (featureID";
+  protected final String TEXT_569 = NL + "\t\t\t\treturn isSet";
+  protected final String TEXT_570 = NL + "\t\t\t\treturn !((";
+  protected final String TEXT_571 = "()).featureMap().isEmpty();";
+  protected final String TEXT_572 = " != null && !";
+  protected final String TEXT_573 = ".featureMap().isEmpty();";
+  protected final String TEXT_574 = ".isEmpty();";
+  protected final String TEXT_575 = ");" + NL + "\t\t\t\treturn ";
+  protected final String TEXT_576 = NL + "\t\t\t\treturn !";
+  protected final String TEXT_577 = "().isEmpty();";
+  protected final String TEXT_578 = " != null;";
+  protected final String TEXT_579 = NL + "\t\t\t\treturn eVirtualGet(";
+  protected final String TEXT_580 = ") != null;";
+  protected final String TEXT_581 = NL + "\t\t\t\treturn basicGet";
+  protected final String TEXT_582 = "() != null;";
+  protected final String TEXT_583 = "_EFLAG) != 0) != ";
+  protected final String TEXT_584 = "_EFLAG) != ";
+  protected final String TEXT_585 = ") != ";
+  protected final String TEXT_586 = "() != ";
+  protected final String TEXT_587 = " != null : !";
+  protected final String TEXT_588 = ".equals(";
+  protected final String TEXT_589 = "() != null : !";
+  protected final String TEXT_590 = NL + "\t\treturn super.eIsSet(featureID);";
+  protected final String TEXT_591 = NL + "\t\treturn eDynamicIsSet(featureID);";
+  protected final String TEXT_592 = NL + "\tpublic int eBaseStructuralFeatureID(int derivedFeatureID, Class";
+  protected final String TEXT_593 = " baseClass)" + NL + "\t{";
+  protected final String TEXT_594 = NL + "\t\tif (baseClass == ";
+  protected final String TEXT_595 = ".class)" + NL + "\t\t{" + NL + "\t\t\tswitch (derivedFeatureID";
+  protected final String TEXT_596 = NL + "\t\t\t\tcase ";
+  protected final String TEXT_597 = ": return ";
+  protected final String TEXT_598 = NL + "\t\t\t\tdefault: return -1;" + NL + "\t\t\t}" + NL + "\t\t}";
+  protected final String TEXT_599 = NL + "\t\treturn super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);" + NL + "\t}";
+  protected final String TEXT_600 = NL + NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
+  protected final String TEXT_601 = NL + "\tpublic int eDerivedStructuralFeatureID(int baseFeatureID, Class";
+  protected final String TEXT_602 = ".class)" + NL + "\t\t{" + NL + "\t\t\tswitch (baseFeatureID)" + NL + "\t\t\t{";
+  protected final String TEXT_603 = ".class)" + NL + "\t\t{" + NL + "\t\t\tswitch (baseFeatureID";
+  protected final String TEXT_604 = NL + "\t\treturn super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);" + NL + "\t}" + NL;
+  protected final String TEXT_605 = NL + "\tpublic int eDerivedOperationID(int baseOperationID, Class";
+  protected final String TEXT_606 = ".class)" + NL + "\t\t{" + NL + "\t\t\tswitch (baseOperationID)" + NL + "\t\t\t{";
+  protected final String TEXT_607 = NL + "\t\t\t\tdefault: return super.eDerivedOperationID(baseOperationID, baseClass);" + NL + "\t\t\t}" + NL + "\t\t}";
+  protected final String TEXT_608 = ".class)" + NL + "\t\t{" + NL + "\t\t\tswitch (baseOperationID";
+  protected final String TEXT_609 = NL + "\t\treturn super.eDerivedOperationID(baseOperationID, baseClass);" + NL + "\t}" + NL;
+  protected final String TEXT_610 = NL + "\tprotected Object[] eVirtualValues()" + NL + "\t{" + NL + "\t\treturn ";
+  protected final String TEXT_611 = ";" + NL + "\t}" + NL + "" + NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
+  protected final String TEXT_612 = NL + "\tprotected void eSetVirtualValues(Object[] newValues)" + NL + "\t{" + NL + "\t\t";
+  protected final String TEXT_613 = " = newValues;" + NL + "\t}" + NL;
+  protected final String TEXT_614 = NL + "\tprotected int eVirtualIndexBits(int offset)" + NL + "\t{" + NL + "\t\tswitch (offset)" + NL + "\t\t{";
+  protected final String TEXT_615 = " :" + NL + "\t\t\t\treturn ";
+  protected final String TEXT_616 = NL + "\t\t\tdefault :" + NL + "\t\t\t\tthrow new IndexOutOfBoundsException();" + NL + "\t\t}" + NL + "\t}" + NL + "" + NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
+  protected final String TEXT_617 = NL + "\tprotected void eSetVirtualIndexBits(int offset, int newIndexBits)" + NL + "\t{" + NL + "\t\tswitch (offset)" + NL + "\t\t{";
+  protected final String TEXT_618 = " :" + NL + "\t\t\t\t";
+  protected final String TEXT_619 = " = newIndexBits;" + NL + "\t\t\t\tbreak;";
+  protected final String TEXT_620 = NL + "\t\t\tdefault :" + NL + "\t\t\t\tthrow new IndexOutOfBoundsException();" + NL + "\t\t}" + NL + "\t}" + NL;
+  protected final String TEXT_621 = NL + "\t@SuppressWarnings(";
+  protected final String TEXT_622 = "\"unchecked\"";
+  protected final String TEXT_623 = "{\"rawtypes\", \"unchecked\" }";
+  protected final String TEXT_624 = NL + "\tpublic Object eInvoke(int operationID, ";
+  protected final String TEXT_625 = " arguments) throws ";
+  protected final String TEXT_626 = NL + "\t{" + NL + "\t\tswitch (operationID";
+  protected final String TEXT_627 = NL + "\t\t\t\ttry" + NL + "\t\t\t\t{";
+  protected final String TEXT_628 = "arguments.get(";
+  protected final String TEXT_629 = ");" + NL + "\t\t\t\t";
+  protected final String TEXT_630 = "return null;";
+  protected final String TEXT_631 = "return ";
+  protected final String TEXT_632 = NL + "\t\t\t\t}" + NL + "\t\t\t\tcatch (";
+  protected final String TEXT_633 = " throwable)" + NL + "\t\t\t\t{" + NL + "\t\t\t\t\tthrow new ";
+  protected final String TEXT_634 = "(throwable);" + NL + "\t\t\t\t}";
+  protected final String TEXT_635 = NL + "\t\treturn super.eInvoke(operationID, arguments);";
+  protected final String TEXT_636 = NL + "\t\treturn eDynamicInvoke(operationID, arguments);";
+  protected final String TEXT_637 = NL + "\tpublic String toString()" + NL + "\t{" + NL + "\t\tif (eIsProxy()) return super.toString();" + NL + "" + NL + "\t\t";
+  protected final String TEXT_638 = " result = new ";
+  protected final String TEXT_639 = "(super.toString());";
+  protected final String TEXT_640 = NL + "\t\tresult.append(\" (";
+  protected final String TEXT_641 = ": \");";
+  protected final String TEXT_642 = NL + "\t\tresult.append(\", ";
+  protected final String TEXT_643 = NL + "\t\tif (eVirtualIsSet(";
+  protected final String TEXT_644 = ")) result.append(eVirtualGet(";
+  protected final String TEXT_645 = ")); else result.append(\"<unset>\");";
+  protected final String TEXT_646 = "_ESETFLAG) != 0";
+  protected final String TEXT_647 = ") result.append((";
+  protected final String TEXT_648 = "_EFLAG) != 0); else result.append(\"<unset>\");";
+  protected final String TEXT_649 = ") result.append(";
+  protected final String TEXT_650 = "_EFLAG_OFFSET]); else result.append(\"<unset>\");";
+  protected final String TEXT_651 = "); else result.append(\"<unset>\");";
+  protected final String TEXT_652 = NL + "\t\tresult.append(eVirtualGet(";
+  protected final String TEXT_653 = NL + "\t\tresult.append((";
+  protected final String TEXT_654 = "_EFLAG) != 0);";
+  protected final String TEXT_655 = NL + "\t\tresult.append(";
+  protected final String TEXT_656 = "_EFLAG_OFFSET]);";
+  protected final String TEXT_657 = NL + "\t\tresult.append(')');" + NL + "\t\treturn result.toString();" + NL + "\t}" + NL;
+  protected final String TEXT_658 = NL + "\tprotected int hash = -1;" + NL + "" + NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
+  protected final String TEXT_659 = NL + "\tpublic int getHash()" + NL + "\t{" + NL + "\t\tif (hash == -1)" + NL + "\t\t{" + NL + "\t\t\t";
+  protected final String TEXT_660 = " theKey = getKey();" + NL + "\t\t\thash = (theKey == null ? 0 : theKey.hashCode());" + NL + "\t\t}" + NL + "\t\treturn hash;" + NL + "\t}" + NL + "" + NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
+  protected final String TEXT_661 = NL + "\tpublic void setHash(int hash)" + NL + "\t{" + NL + "\t\tthis.hash = hash;" + NL + "\t}" + NL + "" + NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
+  protected final String TEXT_662 = " getKey()" + NL + "\t{";
+  protected final String TEXT_663 = "(getTypedKey());";
+  protected final String TEXT_664 = NL + "\t\treturn getTypedKey();";
+  protected final String TEXT_665 = NL + "\tpublic void setKey(";
+  protected final String TEXT_666 = " key)" + NL + "\t{";
+  protected final String TEXT_667 = NL + "\t\tgetTypedKey().addAll(";
+  protected final String TEXT_668 = "key);";
+  protected final String TEXT_669 = NL + "\t\tsetTypedKey(key);";
+  protected final String TEXT_670 = NL + "\t\tsetTypedKey(((";
+  protected final String TEXT_671 = ")key).";
+  protected final String TEXT_672 = NL + "\t\tsetTypedKey((";
+  protected final String TEXT_673 = ")key);";
+  protected final String TEXT_674 = " getValue()" + NL + "\t{";
+  protected final String TEXT_675 = "(getTypedValue());";
+  protected final String TEXT_676 = NL + "\t\treturn getTypedValue();";
+  protected final String TEXT_677 = " setValue(";
+  protected final String TEXT_678 = " value)" + NL + "\t{" + NL + "\t\t";
+  protected final String TEXT_679 = " oldValue = getValue();";
+  protected final String TEXT_680 = NL + "\t\tgetTypedValue().clear();" + NL + "\t\tgetTypedValue().addAll(";
+  protected final String TEXT_681 = "value);";
+  protected final String TEXT_682 = NL + "\t\tsetTypedValue(value);";
+  protected final String TEXT_683 = NL + "\t\tsetTypedValue(((";
+  protected final String TEXT_684 = ")value).";
+  protected final String TEXT_685 = NL + "\t\tsetTypedValue((";
+  protected final String TEXT_686 = ")value);";
+  protected final String TEXT_687 = NL + "\t\treturn oldValue;" + NL + "\t}" + NL + "" + NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
+  protected final String TEXT_688 = " getEMap()" + NL + "\t{" + NL + "\t\t";
+  protected final String TEXT_689 = " container = eContainer();" + NL + "\t\treturn container == null ? null : (";
+  protected final String TEXT_690 = ")container.eGet(eContainmentFeature());" + NL + "\t}" + NL;
+  protected final String TEXT_691 = NL + "} //";
 
   public String generate(Object argument)
   {
@@ -1830,49 +1826,41 @@
     }
     }
     stringBuffer.append(TEXT_203);
-    if (!genFeature.hasDocumentation()) {
-    stringBuffer.append(TEXT_204);
-    stringBuffer.append(genFeature.getFormattedName());
-    stringBuffer.append(TEXT_205);
-    stringBuffer.append(genFeature.getFeatureKind());
-    stringBuffer.append(TEXT_206);
-    }
-    stringBuffer.append(TEXT_207);
     if (genFeature.hasDocumentation()) {
-    stringBuffer.append(TEXT_208);
+    stringBuffer.append(TEXT_204);
     stringBuffer.append(genFeature.getDocumentation(genModel.getIndentation(stringBuffer)));
-    stringBuffer.append(TEXT_209);
-    }
-    stringBuffer.append(TEXT_210);
-    stringBuffer.append(genFeature.getFormattedName());
     stringBuffer.append(TEXT_205);
+    }
+    stringBuffer.append(TEXT_206);
+    stringBuffer.append(genFeature.getFormattedName());
+    stringBuffer.append(TEXT_207);
     stringBuffer.append(genFeature.getFeatureKind());
     stringBuffer.append(TEXT_189);
     if (genFeature.getTypeGenEnum() != null) {
-    stringBuffer.append(TEXT_211);
+    stringBuffer.append(TEXT_208);
     stringBuffer.append(genFeature.getTypeGenEnum().getQualifiedName());
     }
     if (genFeature.isUnsettable()) {
     if (!genFeature.isSuppressedIsSetVisibility()) {
-    stringBuffer.append(TEXT_212);
+    stringBuffer.append(TEXT_209);
     stringBuffer.append(genFeature.getAccessorName());
     stringBuffer.append(TEXT_21);
     }
     if (genFeature.isChangeable() && !genFeature.isSuppressedUnsetVisibility()) {
-    stringBuffer.append(TEXT_213);
+    stringBuffer.append(TEXT_210);
     stringBuffer.append(genFeature.getAccessorName());
     stringBuffer.append(TEXT_21);
     }
     }
     if (genFeature.isChangeable() && !genFeature.isListType() && !genFeature.isSuppressedSetVisibility()) {
-    stringBuffer.append(TEXT_214);
+    stringBuffer.append(TEXT_211);
     stringBuffer.append(genFeature.getAccessorName());
     stringBuffer.append(TEXT_93);
     stringBuffer.append(genFeature.getRawImportedBoundType());
     stringBuffer.append(TEXT_86);
     }
     if (!genModel.isSuppressEMFMetaData()) {
-    stringBuffer.append(TEXT_211);
+    stringBuffer.append(TEXT_208);
     stringBuffer.append(genPackage.getQualifiedPackageInterfaceName());
     stringBuffer.append(TEXT_20);
     stringBuffer.append(genFeature.getFeatureAccessorName());
@@ -1880,20 +1868,20 @@
     }
     if (genFeature.isBidirectional() && !genFeature.getReverse().getGenClass().isMapEntry()) { GenFeature reverseGenFeature = genFeature.getReverse(); 
     if (!reverseGenFeature.isSuppressedGetVisibility()) {
-    stringBuffer.append(TEXT_211);
+    stringBuffer.append(TEXT_208);
     stringBuffer.append(reverseGenFeature.getGenClass().getRawQualifiedInterfaceName());
     stringBuffer.append(TEXT_15);
     stringBuffer.append(reverseGenFeature.getGetAccessor());
     }
     }
     if (!genModel.isSuppressEMFModelTags()) { boolean first = true; for (StringTokenizer stringTokenizer = new StringTokenizer(genFeature.getModelInfo(), "\n\r"); stringTokenizer.hasMoreTokens(); ) { String modelInfo = stringTokenizer.nextToken(); if (first) { first = false;
-    stringBuffer.append(TEXT_215);
+    stringBuffer.append(TEXT_212);
     stringBuffer.append(modelInfo);
     } else {
-    stringBuffer.append(TEXT_216);
+    stringBuffer.append(TEXT_213);
     stringBuffer.append(modelInfo);
     }} if (first) {
-    stringBuffer.append(TEXT_217);
+    stringBuffer.append(TEXT_214);
     }}
     stringBuffer.append(TEXT_112);
     //Class/getGenFeature.javadoc.override.javajetinc
@@ -1938,18 +1926,18 @@
     }
     stringBuffer.append(TEXT_93);
     stringBuffer.append(genFeature.getObjectType(genClass));
-    stringBuffer.append(TEXT_218);
+    stringBuffer.append(TEXT_215);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     if (genClass.hasStaticFeatures()){
-    stringBuffer.append(TEXT_219);
+    stringBuffer.append(TEXT_216);
     }
     stringBuffer.append(TEXT_149);
     stringBuffer.append(genFeature.getQualifiedFeatureAccessor());
-    stringBuffer.append(TEXT_220);
+    stringBuffer.append(TEXT_217);
     stringBuffer.append(!genFeature.isEffectiveSuppressEMFTypes());
     stringBuffer.append(TEXT_86);
     if (!isJDK50 && genFeature.isPrimitiveType()) {
-    stringBuffer.append(TEXT_221);
+    stringBuffer.append(TEXT_218);
     stringBuffer.append(genFeature.getPrimitiveValueFunction());
     stringBuffer.append(TEXT_21);
     }
@@ -1965,11 +1953,11 @@
     }
     stringBuffer.append(TEXT_93);
     stringBuffer.append(genFeature.getObjectType(genClass));
-    stringBuffer.append(TEXT_222);
+    stringBuffer.append(TEXT_219);
     stringBuffer.append(genFeature.getQualifiedFeatureAccessor());
-    stringBuffer.append(TEXT_223);
+    stringBuffer.append(TEXT_220);
     if (!isJDK50 && genFeature.isPrimitiveType()) {
-    stringBuffer.append(TEXT_221);
+    stringBuffer.append(TEXT_218);
     stringBuffer.append(genFeature.getPrimitiveValueFunction());
     stringBuffer.append(TEXT_21);
     }
@@ -1984,9 +1972,9 @@
     stringBuffer.append(genFeature.getObjectType(genClass));
     stringBuffer.append(TEXT_86);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_224);
-    if (!isJDK50 && genFeature.isPrimitiveType()) {
     stringBuffer.append(TEXT_221);
+    if (!isJDK50 && genFeature.isPrimitiveType()) {
+    stringBuffer.append(TEXT_218);
     stringBuffer.append(genFeature.getPrimitiveValueFunction());
     stringBuffer.append(TEXT_21);
     }
@@ -2029,18 +2017,18 @@
     stringBuffer.append(genFeature.isMapType() && genFeature.isEffectiveSuppressEMFTypes() ? ".map()" : "");
     stringBuffer.append(TEXT_6);
     } else if (genFeature.isContainer()) {
-    stringBuffer.append(TEXT_225);
+    stringBuffer.append(TEXT_222);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(positiveOffsetCorrection);
-    stringBuffer.append(TEXT_226);
+    stringBuffer.append(TEXT_223);
     stringBuffer.append(genFeature.getImportedType(genClass));
     stringBuffer.append(TEXT_86);
     if (genFeature.isResolveProxies()) {
-    stringBuffer.append(TEXT_227);
+    stringBuffer.append(TEXT_224);
     } else {
-    stringBuffer.append(TEXT_228);
+    stringBuffer.append(TEXT_225);
     }
-    stringBuffer.append(TEXT_229);
+    stringBuffer.append(TEXT_226);
     } else {
     if (genFeature.isResolveProxies()) {
     if (genModel.isVirtualDelegation()) {
@@ -2061,27 +2049,27 @@
     }
     stringBuffer.append(TEXT_136);
     stringBuffer.append(genFeature.getSafeName());
-    stringBuffer.append(TEXT_230);
+    stringBuffer.append(TEXT_227);
     stringBuffer.append(genFeature.getSafeNameAsEObject());
-    stringBuffer.append(TEXT_231);
+    stringBuffer.append(TEXT_228);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.InternalEObject"));
-    stringBuffer.append(TEXT_232);
+    stringBuffer.append(TEXT_229);
     stringBuffer.append(genFeature.getCapName());
     stringBuffer.append(TEXT_76);
     stringBuffer.append(genFeature.getAsInternalEObject(genFeature.getSafeName(), false));
-    stringBuffer.append(TEXT_233);
+    stringBuffer.append(TEXT_230);
     stringBuffer.append(genFeature.getSafeName());
     stringBuffer.append(TEXT_76);
     stringBuffer.append(genFeature.getNonEObjectInternalTypeCast(genClass));
-    stringBuffer.append(TEXT_234);
+    stringBuffer.append(TEXT_231);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_235);
+    stringBuffer.append(TEXT_232);
     stringBuffer.append(genFeature.getSafeName());
-    stringBuffer.append(TEXT_236);
+    stringBuffer.append(TEXT_233);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_237);
+    stringBuffer.append(TEXT_234);
     if (genFeature.isEffectiveContains()) {
-    stringBuffer.append(TEXT_238);
+    stringBuffer.append(TEXT_235);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.InternalEObject"));
     stringBuffer.append(TEXT_155);
     stringBuffer.append(genFeature.getCapName());
@@ -2089,49 +2077,49 @@
     stringBuffer.append(genFeature.getAsInternalEObject(genFeature.getSafeName(), false));
     stringBuffer.append(TEXT_6);
     if (!genFeature.isBidirectional()) {
+    stringBuffer.append(TEXT_235);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.notify.NotificationChain"));
+    stringBuffer.append(TEXT_236);
+    stringBuffer.append(genFeature.getCapName());
+    stringBuffer.append(TEXT_237);
+    stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
+    stringBuffer.append(negativeOffsetCorrection);
     stringBuffer.append(TEXT_238);
+    } else { GenFeature reverseFeature = genFeature.getReverse(); GenClass targetClass = reverseFeature.getGenClass(); String reverseOffsetCorrection = targetClass.hasOffsetCorrection() ? " + " + genClass.getOffsetCorrectionField(genFeature) : "";
+    stringBuffer.append(TEXT_235);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.notify.NotificationChain"));
     stringBuffer.append(TEXT_239);
     stringBuffer.append(genFeature.getCapName());
     stringBuffer.append(TEXT_240);
-    stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
-    stringBuffer.append(negativeOffsetCorrection);
+    stringBuffer.append(targetClass.getQualifiedFeatureID(reverseFeature));
+    stringBuffer.append(reverseOffsetCorrection);
+    stringBuffer.append(TEXT_149);
+    stringBuffer.append(targetClass.getRawImportedInterfaceName());
     stringBuffer.append(TEXT_241);
-    } else { GenFeature reverseFeature = genFeature.getReverse(); GenClass targetClass = reverseFeature.getGenClass(); String reverseOffsetCorrection = targetClass.hasOffsetCorrection() ? " + " + genClass.getOffsetCorrectionField(genFeature) : "";
-    stringBuffer.append(TEXT_238);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.notify.NotificationChain"));
+    }
     stringBuffer.append(TEXT_242);
     stringBuffer.append(genFeature.getCapName());
     stringBuffer.append(TEXT_243);
-    stringBuffer.append(targetClass.getQualifiedFeatureID(reverseFeature));
-    stringBuffer.append(reverseOffsetCorrection);
-    stringBuffer.append(TEXT_149);
-    stringBuffer.append(targetClass.getRawImportedInterfaceName());
-    stringBuffer.append(TEXT_244);
-    }
-    stringBuffer.append(TEXT_245);
-    stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_246);
     if (!genFeature.isBidirectional()) {
+    stringBuffer.append(TEXT_244);
+    stringBuffer.append(genFeature.getCapName());
+    stringBuffer.append(TEXT_245);
+    stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
+    stringBuffer.append(negativeOffsetCorrection);
+    stringBuffer.append(TEXT_246);
+    } else { GenFeature reverseFeature = genFeature.getReverse(); GenClass targetClass = reverseFeature.getGenClass(); String reverseOffsetCorrection = targetClass.hasOffsetCorrection() ? " + " + genClass.getOffsetCorrectionField(genFeature) : "";
     stringBuffer.append(TEXT_247);
     stringBuffer.append(genFeature.getCapName());
     stringBuffer.append(TEXT_248);
-    stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
-    stringBuffer.append(negativeOffsetCorrection);
-    stringBuffer.append(TEXT_249);
-    } else { GenFeature reverseFeature = genFeature.getReverse(); GenClass targetClass = reverseFeature.getGenClass(); String reverseOffsetCorrection = targetClass.hasOffsetCorrection() ? " + " + genClass.getOffsetCorrectionField(genFeature) : "";
-    stringBuffer.append(TEXT_250);
-    stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_251);
     stringBuffer.append(targetClass.getQualifiedFeatureID(reverseFeature));
     stringBuffer.append(reverseOffsetCorrection);
     stringBuffer.append(TEXT_149);
     stringBuffer.append(targetClass.getRawImportedInterfaceName());
-    stringBuffer.append(TEXT_252);
+    stringBuffer.append(TEXT_249);
     }
-    stringBuffer.append(TEXT_253);
+    stringBuffer.append(TEXT_250);
     } else if (genModel.isVirtualDelegation()) {
-    stringBuffer.append(TEXT_254);
+    stringBuffer.append(TEXT_251);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(positiveOffsetCorrection);
     stringBuffer.append(TEXT_149);
@@ -2139,23 +2127,23 @@
     stringBuffer.append(TEXT_146);
     }
     if (!genModel.isSuppressNotification()) {
-    stringBuffer.append(TEXT_255);
+    stringBuffer.append(TEXT_252);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.impl.ENotificationImpl"));
-    stringBuffer.append(TEXT_256);
+    stringBuffer.append(TEXT_253);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.notify.Notification"));
-    stringBuffer.append(TEXT_257);
+    stringBuffer.append(TEXT_254);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(positiveOffsetCorrection);
-    stringBuffer.append(TEXT_258);
+    stringBuffer.append(TEXT_255);
     stringBuffer.append(genFeature.getCapName());
     stringBuffer.append(TEXT_149);
     stringBuffer.append(genFeature.getSafeName());
-    stringBuffer.append(TEXT_259);
+    stringBuffer.append(TEXT_256);
     }
-    stringBuffer.append(TEXT_260);
+    stringBuffer.append(TEXT_257);
     }
     if (!genFeature.isResolveProxies() && genModel.isVirtualDelegation() && !genFeature.isPrimitiveType()) {
-    stringBuffer.append(TEXT_261);
+    stringBuffer.append(TEXT_258);
     stringBuffer.append(genFeature.getImportedType(genClass));
     stringBuffer.append(TEXT_145);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
@@ -2167,21 +2155,21 @@
     stringBuffer.append(TEXT_146);
     } else if (genClass.isFlag(genFeature)) {
     if (genFeature.isBooleanType()) {
-    stringBuffer.append(TEXT_261);
+    stringBuffer.append(TEXT_258);
     stringBuffer.append(genClass.getFlagsField(genFeature));
-    stringBuffer.append(TEXT_262);
+    stringBuffer.append(TEXT_259);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_263);
+    stringBuffer.append(TEXT_260);
     } else {
     stringBuffer.append(TEXT_172);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_264);
+    stringBuffer.append(TEXT_261);
     stringBuffer.append(genClass.getFlagsField(genFeature));
+    stringBuffer.append(TEXT_259);
+    stringBuffer.append(genFeature.getUpperName());
     stringBuffer.append(TEXT_262);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_265);
-    stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_266);
+    stringBuffer.append(TEXT_263);
     }
     } else {
     stringBuffer.append(TEXT_172);
@@ -2195,60 +2183,60 @@
     stringBuffer.append(genFeature.getImportedType(genClass));
     stringBuffer.append(TEXT_70);
     stringBuffer.append(genFeature.getSafeName());
-    stringBuffer.append(TEXT_267);
+    stringBuffer.append(TEXT_264);
     stringBuffer.append(genFeature.getAccessorName());
-    stringBuffer.append(TEXT_268);
+    stringBuffer.append(TEXT_265);
     stringBuffer.append(genFeature.getSafeName());
-    stringBuffer.append(TEXT_230);
+    stringBuffer.append(TEXT_227);
     stringBuffer.append(genFeature.getSafeNameAsEObject());
-    stringBuffer.append(TEXT_269);
+    stringBuffer.append(TEXT_266);
     stringBuffer.append(genFeature.getNonEObjectInternalTypeCast(genClass));
-    stringBuffer.append(TEXT_270);
+    stringBuffer.append(TEXT_267);
     stringBuffer.append(genFeature.getAsInternalEObject(genFeature.getSafeName(), false));
-    stringBuffer.append(TEXT_271);
+    stringBuffer.append(TEXT_268);
     stringBuffer.append(genFeature.getSafeName());
     stringBuffer.append(TEXT_6);
     } else if (genFeature.hasDelegateFeature()) { GenFeature delegateFeature = genFeature.getDelegateFeature();
     if (genFeature.isFeatureMapType()) {
     String featureMapEntryTemplateArgument = isJDK50 ? "<" + genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMap") + ".Entry>" : "";
     if (delegateFeature.isWrappedFeatureMapType()) {
-    stringBuffer.append(TEXT_272);
+    stringBuffer.append(TEXT_269);
     stringBuffer.append(genFeature.getImportedEffectiveFeatureMapWrapperClass());
-    stringBuffer.append(TEXT_273);
+    stringBuffer.append(TEXT_270);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMap"));
+    stringBuffer.append(TEXT_271);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMap"));
+    stringBuffer.append(TEXT_272);
+    stringBuffer.append(delegateFeature.getAccessorName());
+    stringBuffer.append(TEXT_273);
+    stringBuffer.append(featureMapEntryTemplateArgument);
     stringBuffer.append(TEXT_274);
+    stringBuffer.append(genFeature.getQualifiedFeatureAccessor());
+    stringBuffer.append(TEXT_256);
+    } else {
+    stringBuffer.append(TEXT_258);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMap"));
     stringBuffer.append(TEXT_275);
     stringBuffer.append(delegateFeature.getAccessorName());
     stringBuffer.append(TEXT_276);
     stringBuffer.append(featureMapEntryTemplateArgument);
-    stringBuffer.append(TEXT_277);
-    stringBuffer.append(genFeature.getQualifiedFeatureAccessor());
-    stringBuffer.append(TEXT_259);
-    } else {
-    stringBuffer.append(TEXT_261);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMap"));
-    stringBuffer.append(TEXT_278);
-    stringBuffer.append(delegateFeature.getAccessorName());
-    stringBuffer.append(TEXT_279);
-    stringBuffer.append(featureMapEntryTemplateArgument);
-    stringBuffer.append(TEXT_277);
+    stringBuffer.append(TEXT_274);
     stringBuffer.append(genFeature.getQualifiedFeatureAccessor());
     stringBuffer.append(TEXT_146);
     }
     } else if (genFeature.isListType()) {
     if (delegateFeature.isWrappedFeatureMapType()) {
-    stringBuffer.append(TEXT_280);
+    stringBuffer.append(TEXT_277);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMap"));
-    stringBuffer.append(TEXT_275);
+    stringBuffer.append(TEXT_272);
     stringBuffer.append(delegateFeature.getAccessorName());
-    stringBuffer.append(TEXT_281);
+    stringBuffer.append(TEXT_278);
     stringBuffer.append(genFeature.getQualifiedFeatureAccessor());
     stringBuffer.append(TEXT_146);
     } else {
-    stringBuffer.append(TEXT_282);
+    stringBuffer.append(TEXT_279);
     stringBuffer.append(delegateFeature.getAccessorName());
-    stringBuffer.append(TEXT_283);
+    stringBuffer.append(TEXT_280);
     stringBuffer.append(genFeature.getQualifiedFeatureAccessor());
     stringBuffer.append(TEXT_146);
     }
@@ -2263,15 +2251,15 @@
     stringBuffer.append(genFeature.getObjectType(genClass));
     stringBuffer.append(TEXT_86);
     }
-    stringBuffer.append(TEXT_273);
+    stringBuffer.append(TEXT_270);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMap"));
-    stringBuffer.append(TEXT_275);
+    stringBuffer.append(TEXT_272);
     stringBuffer.append(delegateFeature.getAccessorName());
-    stringBuffer.append(TEXT_284);
+    stringBuffer.append(TEXT_281);
     stringBuffer.append(genFeature.getQualifiedFeatureAccessor());
-    stringBuffer.append(TEXT_223);
+    stringBuffer.append(TEXT_220);
     if (!isJDK50 && genFeature.isPrimitiveType()) {
-    stringBuffer.append(TEXT_221);
+    stringBuffer.append(TEXT_218);
     stringBuffer.append(genFeature.getPrimitiveValueFunction());
     stringBuffer.append(TEXT_21);
     }
@@ -2286,13 +2274,13 @@
     stringBuffer.append(genFeature.getObjectType(genClass));
     stringBuffer.append(TEXT_86);
     }
-    stringBuffer.append(TEXT_285);
+    stringBuffer.append(TEXT_282);
     stringBuffer.append(delegateFeature.getAccessorName());
-    stringBuffer.append(TEXT_286);
+    stringBuffer.append(TEXT_283);
     stringBuffer.append(genFeature.getQualifiedFeatureAccessor());
-    stringBuffer.append(TEXT_223);
+    stringBuffer.append(TEXT_220);
     if (!isJDK50 && genFeature.isPrimitiveType()) {
-    stringBuffer.append(TEXT_221);
+    stringBuffer.append(TEXT_218);
     stringBuffer.append(genFeature.getPrimitiveValueFunction());
     stringBuffer.append(TEXT_21);
     }
@@ -2306,23 +2294,23 @@
     stringBuffer.append(TEXT_119);
     stringBuffer.append(genFeature.getGetterBody(genModel.getIndentation(stringBuffer)));
     } else {
-    stringBuffer.append(TEXT_287);
+    stringBuffer.append(TEXT_284);
     stringBuffer.append(genFeature.getFormattedName());
-    stringBuffer.append(TEXT_288);
+    stringBuffer.append(TEXT_285);
     stringBuffer.append(genFeature.getFeatureKind());
-    stringBuffer.append(TEXT_289);
+    stringBuffer.append(TEXT_286);
     if (genFeature.isListType()) {
-    stringBuffer.append(TEXT_290);
+    stringBuffer.append(TEXT_287);
     if (genFeature.isMapType()) {
-    stringBuffer.append(TEXT_291);
+    stringBuffer.append(TEXT_288);
     } else if (genFeature.isFeatureMapType()) {
-    stringBuffer.append(TEXT_292);
+    stringBuffer.append(TEXT_289);
     } else {
-    stringBuffer.append(TEXT_293);
+    stringBuffer.append(TEXT_290);
     }
-    stringBuffer.append(TEXT_294);
+    stringBuffer.append(TEXT_291);
     }
-    stringBuffer.append(TEXT_295);
+    stringBuffer.append(TEXT_292);
     //Class/getGenFeature.todo.override.javajetinc
     }
     }
@@ -2344,20 +2332,20 @@
     }
     stringBuffer.append(TEXT_131);
     stringBuffer.append(genFeature.getImportedType(genClass));
-    stringBuffer.append(TEXT_296);
+    stringBuffer.append(TEXT_293);
     stringBuffer.append(genFeature.getAccessorName());
     stringBuffer.append(TEXT_132);
     if (genModel.isDynamicDelegation() && !genFeature.isVolatile()) {
-    stringBuffer.append(TEXT_261);
+    stringBuffer.append(TEXT_258);
     stringBuffer.append(genFeature.getImportedType(genClass));
-    stringBuffer.append(TEXT_218);
+    stringBuffer.append(TEXT_215);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     if (genClass.hasStaticFeatures()){
-    stringBuffer.append(TEXT_219);
+    stringBuffer.append(TEXT_216);
     }
     stringBuffer.append(TEXT_149);
     stringBuffer.append(genFeature.getQualifiedFeatureAccessor());
-    stringBuffer.append(TEXT_297);
+    stringBuffer.append(TEXT_294);
     stringBuffer.append(!genFeature.isEffectiveSuppressEMFTypes());
     stringBuffer.append(TEXT_146);
     } else if (genFeature.hasSettingDelegate()) {
@@ -2369,23 +2357,23 @@
     stringBuffer.append(genFeature.getObjectType(genClass));
     stringBuffer.append(TEXT_86);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_298);
+    stringBuffer.append(TEXT_295);
     if (!isJDK50 && genFeature.isPrimitiveType()) {
-    stringBuffer.append(TEXT_221);
+    stringBuffer.append(TEXT_218);
     stringBuffer.append(genFeature.getPrimitiveValueFunction());
     stringBuffer.append(TEXT_21);
     }
     stringBuffer.append(TEXT_6);
     } else if (genFeature.isContainer()) {
-    stringBuffer.append(TEXT_225);
+    stringBuffer.append(TEXT_222);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(positiveOffsetCorrection);
-    stringBuffer.append(TEXT_226);
+    stringBuffer.append(TEXT_223);
     stringBuffer.append(genFeature.getImportedType(genClass));
-    stringBuffer.append(TEXT_299);
+    stringBuffer.append(TEXT_296);
     } else if (!genFeature.isVolatile()) {
     if (genModel.isVirtualDelegation()) {
-    stringBuffer.append(TEXT_261);
+    stringBuffer.append(TEXT_258);
     stringBuffer.append(genFeature.getImportedType(genClass));
     stringBuffer.append(TEXT_145);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
@@ -2398,33 +2386,33 @@
     }
     } else if (genFeature.hasDelegateFeature()) { GenFeature delegateFeature = genFeature.getDelegateFeature();
     if (delegateFeature.isWrappedFeatureMapType()) {
-    stringBuffer.append(TEXT_261);
+    stringBuffer.append(TEXT_258);
     stringBuffer.append(genFeature.getImportedType(genClass));
-    stringBuffer.append(TEXT_300);
+    stringBuffer.append(TEXT_297);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMap"));
+    stringBuffer.append(TEXT_272);
+    stringBuffer.append(delegateFeature.getAccessorName());
+    stringBuffer.append(TEXT_281);
+    stringBuffer.append(genFeature.getQualifiedFeatureAccessor());
+    stringBuffer.append(TEXT_298);
+    } else {
+    stringBuffer.append(TEXT_258);
+    stringBuffer.append(genFeature.getImportedType(genClass));
     stringBuffer.append(TEXT_275);
     stringBuffer.append(delegateFeature.getAccessorName());
-    stringBuffer.append(TEXT_284);
+    stringBuffer.append(TEXT_283);
     stringBuffer.append(genFeature.getQualifiedFeatureAccessor());
-    stringBuffer.append(TEXT_301);
-    } else {
-    stringBuffer.append(TEXT_261);
-    stringBuffer.append(genFeature.getImportedType(genClass));
-    stringBuffer.append(TEXT_278);
-    stringBuffer.append(delegateFeature.getAccessorName());
-    stringBuffer.append(TEXT_286);
-    stringBuffer.append(genFeature.getQualifiedFeatureAccessor());
-    stringBuffer.append(TEXT_301);
+    stringBuffer.append(TEXT_298);
     }
     } else if (genFeature.hasGetterBody()) {
     stringBuffer.append(TEXT_119);
     stringBuffer.append(genFeature.getGetterBody(genModel.getIndentation(stringBuffer)));
     } else {
-    stringBuffer.append(TEXT_287);
+    stringBuffer.append(TEXT_284);
     stringBuffer.append(genFeature.getFormattedName());
-    stringBuffer.append(TEXT_288);
+    stringBuffer.append(TEXT_285);
     stringBuffer.append(genFeature.getFeatureKind());
-    stringBuffer.append(TEXT_302);
+    stringBuffer.append(TEXT_299);
     //Class/basicGetGenFeature.todo.override.javajetinc
     }
     stringBuffer.append(TEXT_176);
@@ -2452,169 +2440,169 @@
     stringBuffer.append(genFeature.getCapName());
     stringBuffer.append(TEXT_149);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.notify.NotificationChain"));
-    stringBuffer.append(TEXT_303);
+    stringBuffer.append(TEXT_300);
     if (genFeature.isContainer()) {
+    stringBuffer.append(TEXT_301);
+    stringBuffer.append(genFeature.getAsInternalEObject("new" + genFeature.getCapName(), false));
+    stringBuffer.append(TEXT_149);
+    stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
+    stringBuffer.append(positiveOffsetCorrection);
+    stringBuffer.append(TEXT_302);
+    stringBuffer.append(TEXT_303);
+    } else if (genModel.isDynamicDelegation()) {
     stringBuffer.append(TEXT_304);
     stringBuffer.append(genFeature.getAsInternalEObject("new" + genFeature.getCapName(), false));
     stringBuffer.append(TEXT_149);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(positiveOffsetCorrection);
-    stringBuffer.append(TEXT_305);
-    stringBuffer.append(TEXT_306);
-    } else if (genModel.isDynamicDelegation()) {
-    stringBuffer.append(TEXT_307);
-    stringBuffer.append(genFeature.getAsInternalEObject("new" + genFeature.getCapName(), false));
-    stringBuffer.append(TEXT_149);
-    stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
-    stringBuffer.append(positiveOffsetCorrection);
-    stringBuffer.append(TEXT_305);
-    stringBuffer.append(TEXT_306);
+    stringBuffer.append(TEXT_302);
+    stringBuffer.append(TEXT_303);
     } else if (!genFeature.isVolatile()) {
     if (genModel.isVirtualDelegation()) {
-    stringBuffer.append(TEXT_308);
+    stringBuffer.append(TEXT_305);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_309);
+    stringBuffer.append(TEXT_306);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(positiveOffsetCorrection);
-    stringBuffer.append(TEXT_310);
+    stringBuffer.append(TEXT_307);
     stringBuffer.append(genFeature.getCapName());
     stringBuffer.append(TEXT_146);
     } else {
     stringBuffer.append(TEXT_119);
     stringBuffer.append(genFeature.getImportedType(genClass));
-    stringBuffer.append(TEXT_232);
+    stringBuffer.append(TEXT_229);
     stringBuffer.append(genFeature.getCapName());
     stringBuffer.append(TEXT_76);
     stringBuffer.append(genFeature.getSafeName());
-    stringBuffer.append(TEXT_311);
+    stringBuffer.append(TEXT_308);
     stringBuffer.append(genFeature.getSafeName());
-    stringBuffer.append(TEXT_312);
+    stringBuffer.append(TEXT_309);
     stringBuffer.append(genFeature.getCapName());
     stringBuffer.append(TEXT_6);
     }
     if (genFeature.isUnsettable()) {
     if (genModel.isVirtualDelegation()) {
     if (!genModel.isSuppressNotification()) {
-    stringBuffer.append(TEXT_313);
+    stringBuffer.append(TEXT_310);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_314);
+    stringBuffer.append(TEXT_311);
     }
     } else if (genClass.isESetFlag(genFeature)) {
-    stringBuffer.append(TEXT_315);
+    stringBuffer.append(TEXT_312);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_316);
+    stringBuffer.append(TEXT_313);
     stringBuffer.append(genClass.getESetFlagsField(genFeature));
-    stringBuffer.append(TEXT_262);
+    stringBuffer.append(TEXT_259);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_317);
+    stringBuffer.append(TEXT_314);
     if (!genModel.isSuppressNotification()) {
     stringBuffer.append(TEXT_119);
     stringBuffer.append(genClass.getESetFlagsField(genFeature));
     stringBuffer.append(TEXT_120);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_318);
+    stringBuffer.append(TEXT_315);
     }
     } else {
     if (!genModel.isSuppressNotification()) {
-    stringBuffer.append(TEXT_315);
+    stringBuffer.append(TEXT_312);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_319);
+    stringBuffer.append(TEXT_316);
     stringBuffer.append(genFeature.getUncapName());
-    stringBuffer.append(TEXT_320);
+    stringBuffer.append(TEXT_317);
     }
     stringBuffer.append(TEXT_119);
     stringBuffer.append(genFeature.getUncapName());
-    stringBuffer.append(TEXT_321);
+    stringBuffer.append(TEXT_318);
     }
     }
     if (!genModel.isSuppressNotification()) {
-    stringBuffer.append(TEXT_322);
+    stringBuffer.append(TEXT_319);
     if (genFeature.isUnsettable()) {
     stringBuffer.append(TEXT_151);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.impl.ENotificationImpl"));
-    stringBuffer.append(TEXT_323);
+    stringBuffer.append(TEXT_320);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.impl.ENotificationImpl"));
-    stringBuffer.append(TEXT_256);
+    stringBuffer.append(TEXT_253);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.notify.Notification"));
-    stringBuffer.append(TEXT_324);
+    stringBuffer.append(TEXT_321);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(positiveOffsetCorrection);
     stringBuffer.append(TEXT_149);
     if (genModel.isVirtualDelegation()) {
-    stringBuffer.append(TEXT_325);
+    stringBuffer.append(TEXT_322);
     stringBuffer.append(genFeature.getCapName());
     } else {
-    stringBuffer.append(TEXT_326);
+    stringBuffer.append(TEXT_323);
     stringBuffer.append(genFeature.getCapName());
     }
-    stringBuffer.append(TEXT_310);
+    stringBuffer.append(TEXT_307);
     stringBuffer.append(genFeature.getCapName());
     stringBuffer.append(TEXT_149);
     if (genModel.isVirtualDelegation()) {
-    stringBuffer.append(TEXT_327);
+    stringBuffer.append(TEXT_324);
     } else {
-    stringBuffer.append(TEXT_328);
+    stringBuffer.append(TEXT_325);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_329);
+    stringBuffer.append(TEXT_326);
     }
     stringBuffer.append(TEXT_146);
     } else {
     stringBuffer.append(TEXT_151);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.impl.ENotificationImpl"));
-    stringBuffer.append(TEXT_323);
+    stringBuffer.append(TEXT_320);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.impl.ENotificationImpl"));
-    stringBuffer.append(TEXT_256);
+    stringBuffer.append(TEXT_253);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.notify.Notification"));
-    stringBuffer.append(TEXT_324);
+    stringBuffer.append(TEXT_321);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(positiveOffsetCorrection);
     stringBuffer.append(TEXT_149);
     if (genModel.isVirtualDelegation()) {
-    stringBuffer.append(TEXT_326);
+    stringBuffer.append(TEXT_323);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_330);
+    stringBuffer.append(TEXT_327);
     stringBuffer.append(genFeature.getCapName());
     } else {
-    stringBuffer.append(TEXT_326);
+    stringBuffer.append(TEXT_323);
     stringBuffer.append(genFeature.getCapName());
     }
-    stringBuffer.append(TEXT_310);
+    stringBuffer.append(TEXT_307);
     stringBuffer.append(genFeature.getCapName());
     stringBuffer.append(TEXT_146);
     }
-    stringBuffer.append(TEXT_331);
+    stringBuffer.append(TEXT_328);
     }
-    stringBuffer.append(TEXT_306);
+    stringBuffer.append(TEXT_303);
     } else if (genFeature.hasDelegateFeature()) { GenFeature delegateFeature = genFeature.getDelegateFeature();
     if (delegateFeature.isWrappedFeatureMapType()) {
-    stringBuffer.append(TEXT_280);
+    stringBuffer.append(TEXT_277);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMap"));
-    stringBuffer.append(TEXT_274);
+    stringBuffer.append(TEXT_271);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMap"));
-    stringBuffer.append(TEXT_275);
+    stringBuffer.append(TEXT_272);
     stringBuffer.append(delegateFeature.getAccessorName());
-    stringBuffer.append(TEXT_332);
+    stringBuffer.append(TEXT_329);
     stringBuffer.append(genFeature.getQualifiedFeatureAccessor());
-    stringBuffer.append(TEXT_310);
+    stringBuffer.append(TEXT_307);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_305);
+    stringBuffer.append(TEXT_302);
     } else {
-    stringBuffer.append(TEXT_280);
+    stringBuffer.append(TEXT_277);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMap"));
-    stringBuffer.append(TEXT_333);
+    stringBuffer.append(TEXT_330);
     stringBuffer.append(delegateFeature.getAccessorName());
-    stringBuffer.append(TEXT_334);
+    stringBuffer.append(TEXT_331);
     stringBuffer.append(genFeature.getQualifiedFeatureAccessor());
-    stringBuffer.append(TEXT_310);
+    stringBuffer.append(TEXT_307);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_305);
+    stringBuffer.append(TEXT_302);
     }
     } else {
-    stringBuffer.append(TEXT_335);
+    stringBuffer.append(TEXT_332);
     stringBuffer.append(genFeature.getFormattedName());
-    stringBuffer.append(TEXT_288);
+    stringBuffer.append(TEXT_285);
     stringBuffer.append(genFeature.getFeatureKind());
-    stringBuffer.append(TEXT_336);
+    stringBuffer.append(TEXT_333);
     //Class/basicSetGenFeature.todo.override.javajetinc
     }
     stringBuffer.append(TEXT_176);
@@ -2622,7 +2610,7 @@
     }
     if (genFeature.isSet() && (isImplementation || !genFeature.isSuppressedSetVisibility())) {
     if (isInterface) { 
-    stringBuffer.append(TEXT_337);
+    stringBuffer.append(TEXT_334);
     stringBuffer.append(genClass.getRawQualifiedInterfaceName());
     stringBuffer.append(TEXT_15);
     stringBuffer.append(genFeature.getGetAccessor());
@@ -2631,28 +2619,28 @@
     stringBuffer.append(TEXT_62);
     stringBuffer.append(genFeature.getFeatureKind());
     stringBuffer.append(TEXT_189);
-    stringBuffer.append(TEXT_338);
+    stringBuffer.append(TEXT_335);
     stringBuffer.append(genFeature.getFormattedName());
-    stringBuffer.append(TEXT_205);
+    stringBuffer.append(TEXT_207);
     stringBuffer.append(genFeature.getFeatureKind());
     stringBuffer.append(TEXT_189);
     if (genFeature.isEnumType()) {
-    stringBuffer.append(TEXT_211);
+    stringBuffer.append(TEXT_208);
     stringBuffer.append(genFeature.getTypeGenEnum().getQualifiedName());
     }
     if (genFeature.isUnsettable()) {
     if (!genFeature.isSuppressedIsSetVisibility()) {
-    stringBuffer.append(TEXT_212);
+    stringBuffer.append(TEXT_209);
     stringBuffer.append(genFeature.getAccessorName());
     stringBuffer.append(TEXT_21);
     }
     if (!genFeature.isSuppressedUnsetVisibility()) {
-    stringBuffer.append(TEXT_213);
+    stringBuffer.append(TEXT_210);
     stringBuffer.append(genFeature.getAccessorName());
     stringBuffer.append(TEXT_21);
     }
     }
-    stringBuffer.append(TEXT_339);
+    stringBuffer.append(TEXT_336);
     stringBuffer.append(genFeature.getGetAccessor());
     stringBuffer.append(TEXT_21);
     if (genFeature.hasAPITags()) {
@@ -2679,7 +2667,7 @@
     stringBuffer.append(genFeature.getAccessorName());
     stringBuffer.append(TEXT_93);
     stringBuffer.append(genFeature.getImportedType(genClass));
-    stringBuffer.append(TEXT_340);
+    stringBuffer.append(TEXT_337);
     } else { GenOperation setAccessorOperation = genClass.getSetAccessorOperation(genFeature);
     if (useInterfaceOverrideAnnotation && !genClass.isMapEntry() && !genClass.hasCollidingSetAccessorOperation(genFeature) && !genFeature.isSuppressedSetVisibility()) {
     stringBuffer.append(TEXT_124);
@@ -2693,37 +2681,37 @@
     stringBuffer.append(genFeature.getImportedType(genClass));
     stringBuffer.append(TEXT_70);
     stringBuffer.append(setAccessorOperation == null ? "new" + genFeature.getCapName() : setAccessorOperation.getGenParameters().get(0).getName());
-    stringBuffer.append(TEXT_341);
+    stringBuffer.append(TEXT_338);
     if (genModel.isDynamicDelegation() && !genFeature.isVolatile()) {
-    stringBuffer.append(TEXT_342);
+    stringBuffer.append(TEXT_339);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     if (genClass.hasStaticFeatures()){
-    stringBuffer.append(TEXT_219);
+    stringBuffer.append(TEXT_216);
     }
     stringBuffer.append(TEXT_149);
     stringBuffer.append(genFeature.getQualifiedFeatureAccessor());
     stringBuffer.append(TEXT_149);
     if (!isJDK50 && genFeature.isPrimitiveType()) {
-    stringBuffer.append(TEXT_343);
+    stringBuffer.append(TEXT_340);
     stringBuffer.append(genFeature.getObjectType(genClass));
     stringBuffer.append(TEXT_93);
     }
-    stringBuffer.append(TEXT_344);
+    stringBuffer.append(TEXT_341);
     stringBuffer.append(genFeature.getCapName());
     if (!isJDK50 && genFeature.isPrimitiveType()) {
     stringBuffer.append(TEXT_86);
     }
     stringBuffer.append(TEXT_146);
     } else if (genModel.isReflectiveDelegation()) {
-    stringBuffer.append(TEXT_345);
+    stringBuffer.append(TEXT_342);
     stringBuffer.append(genFeature.getQualifiedFeatureAccessor());
     stringBuffer.append(TEXT_149);
     if (!isJDK50 && genFeature.isPrimitiveType()) {
-    stringBuffer.append(TEXT_343);
+    stringBuffer.append(TEXT_340);
     stringBuffer.append(genFeature.getObjectType(genClass));
     stringBuffer.append(TEXT_93);
     }
-    stringBuffer.append(TEXT_344);
+    stringBuffer.append(TEXT_341);
     stringBuffer.append(genFeature.getCapName());
     if (!isJDK50 && genFeature.isPrimitiveType()) {
     stringBuffer.append(TEXT_86);
@@ -2732,13 +2720,13 @@
     } else if (genFeature.hasSettingDelegate()) {
     stringBuffer.append(TEXT_119);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_346);
-    if (!isJDK50 && genFeature.isPrimitiveType()) {
     stringBuffer.append(TEXT_343);
+    if (!isJDK50 && genFeature.isPrimitiveType()) {
+    stringBuffer.append(TEXT_340);
     stringBuffer.append(genFeature.getObjectType(genClass));
     stringBuffer.append(TEXT_93);
     }
-    stringBuffer.append(TEXT_344);
+    stringBuffer.append(TEXT_341);
     stringBuffer.append(genFeature.getCapName());
     if (!isJDK50 && genFeature.isPrimitiveType()) {
     stringBuffer.append(TEXT_86);
@@ -2746,54 +2734,54 @@
     stringBuffer.append(TEXT_146);
     } else if (!genFeature.isVolatile()) {
     if (genFeature.isContainer()) { GenFeature reverseFeature = genFeature.getReverse(); GenClass targetClass = reverseFeature.getGenClass(); String reverseOffsetCorrection = targetClass.hasOffsetCorrection() ? " + " + genClass.getOffsetCorrectionField(genFeature) : "";
-    stringBuffer.append(TEXT_347);
-    stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_348);
-    stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
-    stringBuffer.append(positiveOffsetCorrection);
-    stringBuffer.append(TEXT_349);
-    stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_350);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.EcoreUtil"));
-    stringBuffer.append(TEXT_351);
-    stringBuffer.append(genFeature.getEObjectCast());
     stringBuffer.append(TEXT_344);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_352);
+    stringBuffer.append(TEXT_345);
+    stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
+    stringBuffer.append(positiveOffsetCorrection);
+    stringBuffer.append(TEXT_346);
+    stringBuffer.append(genFeature.getCapName());
+    stringBuffer.append(TEXT_347);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.EcoreUtil"));
+    stringBuffer.append(TEXT_348);
+    stringBuffer.append(genFeature.getEObjectCast());
+    stringBuffer.append(TEXT_341);
+    stringBuffer.append(genFeature.getCapName());
+    stringBuffer.append(TEXT_349);
     stringBuffer.append(genModel.getImportedName("java.lang.IllegalArgumentException"));
-    stringBuffer.append(TEXT_353);
+    stringBuffer.append(TEXT_350);
     stringBuffer.append(genModel.getNonNLS());
     stringBuffer.append(TEXT_151);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.notify.NotificationChain"));
-    stringBuffer.append(TEXT_354);
+    stringBuffer.append(TEXT_351);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_355);
+    stringBuffer.append(TEXT_352);
     stringBuffer.append(genFeature.getAsInternalEObject("new" + genFeature.getCapName(), true));
-    stringBuffer.append(TEXT_251);
+    stringBuffer.append(TEXT_248);
     stringBuffer.append(targetClass.getQualifiedFeatureID(reverseFeature));
     stringBuffer.append(reverseOffsetCorrection);
     stringBuffer.append(TEXT_149);
     stringBuffer.append(targetClass.getRawImportedInterfaceName());
-    stringBuffer.append(TEXT_356);
+    stringBuffer.append(TEXT_353);
     stringBuffer.append(genFeature.getAccessorName());
     stringBuffer.append(TEXT_93);
     stringBuffer.append(genFeature.getInternalTypeCast());
-    stringBuffer.append(TEXT_344);
+    stringBuffer.append(TEXT_341);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_357);
+    stringBuffer.append(TEXT_354);
     if (!genModel.isSuppressNotification()) {
-    stringBuffer.append(TEXT_358);
+    stringBuffer.append(TEXT_355);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.impl.ENotificationImpl"));
-    stringBuffer.append(TEXT_256);
+    stringBuffer.append(TEXT_253);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.notify.Notification"));
-    stringBuffer.append(TEXT_324);
+    stringBuffer.append(TEXT_321);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(positiveOffsetCorrection);
-    stringBuffer.append(TEXT_310);
+    stringBuffer.append(TEXT_307);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_310);
+    stringBuffer.append(TEXT_307);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_259);
+    stringBuffer.append(TEXT_256);
     }
     } else if (genFeature.isBidirectional() || genFeature.isEffectiveContains()) {
     if (genModel.isVirtualDelegation()) {
@@ -2808,122 +2796,122 @@
     stringBuffer.append(positiveOffsetCorrection);
     stringBuffer.append(TEXT_146);
     }
-    stringBuffer.append(TEXT_347);
+    stringBuffer.append(TEXT_344);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_359);
+    stringBuffer.append(TEXT_356);
     stringBuffer.append(genFeature.getSafeName());
-    stringBuffer.append(TEXT_360);
+    stringBuffer.append(TEXT_357);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.notify.NotificationChain"));
-    stringBuffer.append(TEXT_361);
+    stringBuffer.append(TEXT_358);
     stringBuffer.append(genFeature.getSafeName());
-    stringBuffer.append(TEXT_362);
+    stringBuffer.append(TEXT_359);
     if (!genFeature.isBidirectional()) {
-    stringBuffer.append(TEXT_363);
+    stringBuffer.append(TEXT_360);
+    stringBuffer.append(genFeature.getAsInternalEObject(genFeature.getSafeName(), true));
+    stringBuffer.append(TEXT_237);
+    stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
+    stringBuffer.append(negativeOffsetCorrection);
+    stringBuffer.append(TEXT_361);
+    stringBuffer.append(genFeature.getCapName());
+    stringBuffer.append(TEXT_352);
+    stringBuffer.append(genFeature.getAsInternalEObject("new" + genFeature.getCapName(), true));
+    stringBuffer.append(TEXT_245);
+    stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
+    stringBuffer.append(negativeOffsetCorrection);
+    stringBuffer.append(TEXT_246);
+    } else { GenFeature reverseFeature = genFeature.getReverse(); GenClass targetClass = reverseFeature.getGenClass(); String reverseOffsetCorrection = targetClass.hasOffsetCorrection() ? " + " + genClass.getOffsetCorrectionField(genFeature) : "";
+    stringBuffer.append(TEXT_360);
     stringBuffer.append(genFeature.getAsInternalEObject(genFeature.getSafeName(), true));
     stringBuffer.append(TEXT_240);
-    stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
-    stringBuffer.append(negativeOffsetCorrection);
-    stringBuffer.append(TEXT_364);
+    stringBuffer.append(targetClass.getQualifiedFeatureID(reverseFeature));
+    stringBuffer.append(reverseOffsetCorrection);
+    stringBuffer.append(TEXT_149);
+    stringBuffer.append(targetClass.getRawImportedInterfaceName());
+    stringBuffer.append(TEXT_362);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_355);
+    stringBuffer.append(TEXT_352);
     stringBuffer.append(genFeature.getAsInternalEObject("new" + genFeature.getCapName(), true));
     stringBuffer.append(TEXT_248);
-    stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
-    stringBuffer.append(negativeOffsetCorrection);
+    stringBuffer.append(targetClass.getQualifiedFeatureID(reverseFeature));
+    stringBuffer.append(reverseOffsetCorrection);
+    stringBuffer.append(TEXT_149);
+    stringBuffer.append(targetClass.getRawImportedInterfaceName());
     stringBuffer.append(TEXT_249);
-    } else { GenFeature reverseFeature = genFeature.getReverse(); GenClass targetClass = reverseFeature.getGenClass(); String reverseOffsetCorrection = targetClass.hasOffsetCorrection() ? " + " + genClass.getOffsetCorrectionField(genFeature) : "";
-    stringBuffer.append(TEXT_363);
-    stringBuffer.append(genFeature.getAsInternalEObject(genFeature.getSafeName(), true));
-    stringBuffer.append(TEXT_243);
-    stringBuffer.append(targetClass.getQualifiedFeatureID(reverseFeature));
-    stringBuffer.append(reverseOffsetCorrection);
-    stringBuffer.append(TEXT_149);
-    stringBuffer.append(targetClass.getRawImportedInterfaceName());
-    stringBuffer.append(TEXT_365);
-    stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_355);
-    stringBuffer.append(genFeature.getAsInternalEObject("new" + genFeature.getCapName(), true));
-    stringBuffer.append(TEXT_251);
-    stringBuffer.append(targetClass.getQualifiedFeatureID(reverseFeature));
-    stringBuffer.append(reverseOffsetCorrection);
-    stringBuffer.append(TEXT_149);
-    stringBuffer.append(targetClass.getRawImportedInterfaceName());
-    stringBuffer.append(TEXT_252);
     }
-    stringBuffer.append(TEXT_366);
+    stringBuffer.append(TEXT_363);
     stringBuffer.append(genFeature.getAccessorName());
     stringBuffer.append(TEXT_93);
     stringBuffer.append(genFeature.getInternalTypeCast());
-    stringBuffer.append(TEXT_344);
+    stringBuffer.append(TEXT_341);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_357);
+    stringBuffer.append(TEXT_354);
     if (genFeature.isUnsettable()) {
-    stringBuffer.append(TEXT_367);
+    stringBuffer.append(TEXT_364);
     if (genModel.isVirtualDelegation()) {
-    stringBuffer.append(TEXT_368);
+    stringBuffer.append(TEXT_365);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_369);
+    stringBuffer.append(TEXT_366);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(positiveOffsetCorrection);
     stringBuffer.append(TEXT_146);
     } else if (genClass.isESetFlag(genFeature)) {
     if (!genModel.isSuppressNotification()) {
-    stringBuffer.append(TEXT_368);
+    stringBuffer.append(TEXT_365);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_316);
+    stringBuffer.append(TEXT_313);
     stringBuffer.append(genClass.getESetFlagsField(genFeature));
-    stringBuffer.append(TEXT_262);
+    stringBuffer.append(TEXT_259);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_317);
+    stringBuffer.append(TEXT_314);
     }
     stringBuffer.append(TEXT_151);
     stringBuffer.append(genClass.getESetFlagsField(genFeature));
     stringBuffer.append(TEXT_120);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_318);
+    stringBuffer.append(TEXT_315);
     } else {
     if (!genModel.isSuppressNotification()) {
-    stringBuffer.append(TEXT_368);
+    stringBuffer.append(TEXT_365);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_319);
+    stringBuffer.append(TEXT_316);
     stringBuffer.append(genFeature.getUncapName());
-    stringBuffer.append(TEXT_320);
+    stringBuffer.append(TEXT_317);
     }
     stringBuffer.append(TEXT_151);
     stringBuffer.append(genFeature.getUncapName());
-    stringBuffer.append(TEXT_321);
+    stringBuffer.append(TEXT_318);
     }
     if (!genModel.isSuppressNotification()) {
-    stringBuffer.append(TEXT_370);
+    stringBuffer.append(TEXT_367);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.impl.ENotificationImpl"));
-    stringBuffer.append(TEXT_256);
+    stringBuffer.append(TEXT_253);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.notify.Notification"));
-    stringBuffer.append(TEXT_324);
+    stringBuffer.append(TEXT_321);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(positiveOffsetCorrection);
-    stringBuffer.append(TEXT_310);
+    stringBuffer.append(TEXT_307);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_310);
+    stringBuffer.append(TEXT_307);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_371);
+    stringBuffer.append(TEXT_368);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_372);
+    stringBuffer.append(TEXT_369);
     }
-    stringBuffer.append(TEXT_373);
+    stringBuffer.append(TEXT_370);
     } else {
     if (!genModel.isSuppressNotification()) {
-    stringBuffer.append(TEXT_358);
+    stringBuffer.append(TEXT_355);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.impl.ENotificationImpl"));
-    stringBuffer.append(TEXT_256);
+    stringBuffer.append(TEXT_253);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.notify.Notification"));
-    stringBuffer.append(TEXT_324);
+    stringBuffer.append(TEXT_321);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(positiveOffsetCorrection);
-    stringBuffer.append(TEXT_310);
+    stringBuffer.append(TEXT_307);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_310);
+    stringBuffer.append(TEXT_307);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_259);
+    stringBuffer.append(TEXT_256);
     }
     }
     } else {
@@ -2932,75 +2920,75 @@
     if (genFeature.isBooleanType()) {
     stringBuffer.append(TEXT_119);
     stringBuffer.append(genFeature.getImportedType(genClass));
-    stringBuffer.append(TEXT_232);
+    stringBuffer.append(TEXT_229);
     stringBuffer.append(genFeature.getCapName());
     stringBuffer.append(TEXT_144);
     stringBuffer.append(genClass.getFlagsField(genFeature));
-    stringBuffer.append(TEXT_262);
+    stringBuffer.append(TEXT_259);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_263);
+    stringBuffer.append(TEXT_260);
     } else {
     stringBuffer.append(TEXT_119);
     stringBuffer.append(genFeature.getImportedType(genClass));
-    stringBuffer.append(TEXT_232);
+    stringBuffer.append(TEXT_229);
     stringBuffer.append(genFeature.getCapName());
     stringBuffer.append(TEXT_76);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_264);
+    stringBuffer.append(TEXT_261);
     stringBuffer.append(genClass.getFlagsField(genFeature));
+    stringBuffer.append(TEXT_259);
+    stringBuffer.append(genFeature.getUpperName());
     stringBuffer.append(TEXT_262);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_265);
-    stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_266);
+    stringBuffer.append(TEXT_263);
     }
     }
     if (genFeature.isBooleanType()) {
-    stringBuffer.append(TEXT_347);
+    stringBuffer.append(TEXT_344);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_374);
+    stringBuffer.append(TEXT_371);
     stringBuffer.append(genClass.getFlagsField(genFeature));
     stringBuffer.append(TEXT_120);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_375);
+    stringBuffer.append(TEXT_372);
     stringBuffer.append(genClass.getFlagsField(genFeature));
-    stringBuffer.append(TEXT_376);
+    stringBuffer.append(TEXT_373);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_377);
+    stringBuffer.append(TEXT_374);
     } else {
-    stringBuffer.append(TEXT_347);
-    stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_378);
-    stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_76);
-    stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_379);
-    stringBuffer.append(genClass.getFlagsField(genFeature));
-    stringBuffer.append(TEXT_76);
-    stringBuffer.append(genClass.getFlagsField(genFeature));
-    stringBuffer.append(TEXT_380);
-    stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_381);
-    if (isJDK50) {
     stringBuffer.append(TEXT_344);
     stringBuffer.append(genFeature.getCapName());
+    stringBuffer.append(TEXT_375);
+    stringBuffer.append(genFeature.getCapName());
+    stringBuffer.append(TEXT_76);
+    stringBuffer.append(genFeature.getUpperName());
+    stringBuffer.append(TEXT_376);
+    stringBuffer.append(genClass.getFlagsField(genFeature));
+    stringBuffer.append(TEXT_76);
+    stringBuffer.append(genClass.getFlagsField(genFeature));
+    stringBuffer.append(TEXT_377);
+    stringBuffer.append(genFeature.getUpperName());
+    stringBuffer.append(TEXT_378);
+    if (isJDK50) {
+    stringBuffer.append(TEXT_341);
+    stringBuffer.append(genFeature.getCapName());
     stringBuffer.append(TEXT_84);
     } else {
     stringBuffer.append(genFeature.getImportedType(genClass));
-    stringBuffer.append(TEXT_382);
+    stringBuffer.append(TEXT_379);
     stringBuffer.append(genFeature.getCapName());
     stringBuffer.append(TEXT_86);
     }
     stringBuffer.append(TEXT_87);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_383);
+    stringBuffer.append(TEXT_380);
     }
     } else {
     if (!genModel.isVirtualDelegation() || genFeature.isPrimitiveType()) {
     if (!genModel.isSuppressNotification()) {
     stringBuffer.append(TEXT_119);
     stringBuffer.append(genFeature.getImportedType(genClass));
-    stringBuffer.append(TEXT_232);
+    stringBuffer.append(TEXT_229);
     stringBuffer.append(genFeature.getCapName());
     stringBuffer.append(TEXT_76);
     stringBuffer.append(genFeature.getSafeName());
@@ -3013,21 +3001,21 @@
     stringBuffer.append(genFeature.getImportedType(genClass));
     stringBuffer.append(TEXT_70);
     stringBuffer.append(genFeature.getSafeName());
-    stringBuffer.append(TEXT_312);
+    stringBuffer.append(TEXT_309);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_384);
+    stringBuffer.append(TEXT_381);
     stringBuffer.append(genFeature.getEDefault());
-    stringBuffer.append(TEXT_385);
+    stringBuffer.append(TEXT_382);
     stringBuffer.append(genFeature.getCapName());
     stringBuffer.append(TEXT_6);
     } else {
     stringBuffer.append(TEXT_119);
     stringBuffer.append(genFeature.getSafeName());
-    stringBuffer.append(TEXT_312);
+    stringBuffer.append(TEXT_309);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_384);
+    stringBuffer.append(TEXT_381);
     stringBuffer.append(genFeature.getEDefault());
-    stringBuffer.append(TEXT_385);
+    stringBuffer.append(TEXT_382);
     stringBuffer.append(genFeature.getCapName());
     stringBuffer.append(TEXT_6);
     }
@@ -3039,7 +3027,7 @@
     stringBuffer.append(genFeature.getSafeName());
     stringBuffer.append(TEXT_76);
     stringBuffer.append(genFeature.getInternalTypeCast());
-    stringBuffer.append(TEXT_344);
+    stringBuffer.append(TEXT_341);
     stringBuffer.append(genFeature.getCapName());
     stringBuffer.append(TEXT_6);
     } else {
@@ -3047,15 +3035,15 @@
     stringBuffer.append(genFeature.getSafeName());
     stringBuffer.append(TEXT_76);
     stringBuffer.append(genFeature.getInternalTypeCast());
-    stringBuffer.append(TEXT_344);
+    stringBuffer.append(TEXT_341);
     stringBuffer.append(genFeature.getCapName());
     stringBuffer.append(TEXT_6);
     }
     }
     if (genModel.isVirtualDelegation() && !genFeature.isPrimitiveType()) {
-    stringBuffer.append(TEXT_308);
+    stringBuffer.append(TEXT_305);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_309);
+    stringBuffer.append(TEXT_306);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(positiveOffsetCorrection);
     stringBuffer.append(TEXT_149);
@@ -3065,139 +3053,139 @@
     }
     if (genFeature.isUnsettable()) {
     if (genModel.isVirtualDelegation() && !genFeature.isPrimitiveType()) {
-    stringBuffer.append(TEXT_313);
+    stringBuffer.append(TEXT_310);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_314);
+    stringBuffer.append(TEXT_311);
     } else if (genClass.isESetFlag(genFeature)) {
     if (!genModel.isSuppressNotification()) {
-    stringBuffer.append(TEXT_315);
+    stringBuffer.append(TEXT_312);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_316);
+    stringBuffer.append(TEXT_313);
     stringBuffer.append(genClass.getESetFlagsField(genFeature));
-    stringBuffer.append(TEXT_262);
+    stringBuffer.append(TEXT_259);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_317);
+    stringBuffer.append(TEXT_314);
     }
     stringBuffer.append(TEXT_119);
     stringBuffer.append(genClass.getESetFlagsField(genFeature));
     stringBuffer.append(TEXT_120);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_318);
+    stringBuffer.append(TEXT_315);
     } else {
     if (!genModel.isSuppressNotification()) {
-    stringBuffer.append(TEXT_315);
+    stringBuffer.append(TEXT_312);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_319);
+    stringBuffer.append(TEXT_316);
     stringBuffer.append(genFeature.getUncapName());
-    stringBuffer.append(TEXT_320);
+    stringBuffer.append(TEXT_317);
     }
     stringBuffer.append(TEXT_119);
     stringBuffer.append(genFeature.getUncapName());
+    stringBuffer.append(TEXT_318);
+    }
+    if (!genModel.isSuppressNotification()) {
+    stringBuffer.append(TEXT_383);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.impl.ENotificationImpl"));
+    stringBuffer.append(TEXT_253);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.notify.Notification"));
     stringBuffer.append(TEXT_321);
-    }
-    if (!genModel.isSuppressNotification()) {
-    stringBuffer.append(TEXT_386);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.impl.ENotificationImpl"));
-    stringBuffer.append(TEXT_256);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.notify.Notification"));
-    stringBuffer.append(TEXT_324);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(positiveOffsetCorrection);
     stringBuffer.append(TEXT_149);
     if (genModel.isVirtualDelegation() && !genFeature.isPrimitiveType()) {
-    stringBuffer.append(TEXT_387);
+    stringBuffer.append(TEXT_384);
     stringBuffer.append(genFeature.getEDefault());
-    stringBuffer.append(TEXT_388);
+    stringBuffer.append(TEXT_385);
     stringBuffer.append(genFeature.getCapName());
     } else {
-    stringBuffer.append(TEXT_326);
+    stringBuffer.append(TEXT_323);
     stringBuffer.append(genFeature.getCapName());
     }
     stringBuffer.append(TEXT_149);
     if (genClass.isFlag(genFeature)) {
-    stringBuffer.append(TEXT_344);
+    stringBuffer.append(TEXT_341);
     stringBuffer.append(genFeature.getCapName());
     } else {
     stringBuffer.append(genFeature.getSafeName());
     }
     stringBuffer.append(TEXT_149);
     if (genModel.isVirtualDelegation() && !genFeature.isPrimitiveType()) {
-    stringBuffer.append(TEXT_327);
+    stringBuffer.append(TEXT_324);
     } else {
-    stringBuffer.append(TEXT_328);
+    stringBuffer.append(TEXT_325);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_329);
+    stringBuffer.append(TEXT_326);
     }
-    stringBuffer.append(TEXT_259);
+    stringBuffer.append(TEXT_256);
     }
     } else {
     if (!genModel.isSuppressNotification()) {
-    stringBuffer.append(TEXT_386);
+    stringBuffer.append(TEXT_383);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.impl.ENotificationImpl"));
-    stringBuffer.append(TEXT_256);
+    stringBuffer.append(TEXT_253);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.notify.Notification"));
-    stringBuffer.append(TEXT_324);
+    stringBuffer.append(TEXT_321);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(positiveOffsetCorrection);
     stringBuffer.append(TEXT_149);
     if (genModel.isVirtualDelegation() && !genFeature.isPrimitiveType()) {
-    stringBuffer.append(TEXT_326);
+    stringBuffer.append(TEXT_323);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_389);
+    stringBuffer.append(TEXT_386);
     stringBuffer.append(genFeature.getEDefault());
-    stringBuffer.append(TEXT_388);
+    stringBuffer.append(TEXT_385);
     stringBuffer.append(genFeature.getCapName());
     } else {
-    stringBuffer.append(TEXT_326);
+    stringBuffer.append(TEXT_323);
     stringBuffer.append(genFeature.getCapName());
     }
     stringBuffer.append(TEXT_149);
     if (genClass.isFlag(genFeature)) {
-    stringBuffer.append(TEXT_344);
+    stringBuffer.append(TEXT_341);
     stringBuffer.append(genFeature.getCapName());
     } else {
     stringBuffer.append(genFeature.getSafeName());
     }
-    stringBuffer.append(TEXT_259);
+    stringBuffer.append(TEXT_256);
     }
     }
     }
     } else if (genFeature.hasDelegateFeature()) { GenFeature delegateFeature = genFeature.getDelegateFeature();
     if (delegateFeature.isWrappedFeatureMapType()) {
-    stringBuffer.append(TEXT_390);
+    stringBuffer.append(TEXT_387);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMap"));
-    stringBuffer.append(TEXT_274);
+    stringBuffer.append(TEXT_271);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMap"));
-    stringBuffer.append(TEXT_275);
+    stringBuffer.append(TEXT_272);
     stringBuffer.append(delegateFeature.getAccessorName());
-    stringBuffer.append(TEXT_391);
+    stringBuffer.append(TEXT_388);
     stringBuffer.append(genFeature.getQualifiedFeatureAccessor());
     stringBuffer.append(TEXT_149);
     if (!isJDK50 && genFeature.isPrimitiveType()) {
-    stringBuffer.append(TEXT_343);
+    stringBuffer.append(TEXT_340);
     stringBuffer.append(genFeature.getObjectType(genClass));
     stringBuffer.append(TEXT_93);
     }
-    stringBuffer.append(TEXT_344);
+    stringBuffer.append(TEXT_341);
     stringBuffer.append(genFeature.getCapName());
     if (!isJDK50 && genFeature.isPrimitiveType()) {
     stringBuffer.append(TEXT_86);
     }
     stringBuffer.append(TEXT_146);
     } else {
-    stringBuffer.append(TEXT_390);
+    stringBuffer.append(TEXT_387);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMap"));
-    stringBuffer.append(TEXT_333);
+    stringBuffer.append(TEXT_330);
     stringBuffer.append(delegateFeature.getAccessorName());
-    stringBuffer.append(TEXT_392);
+    stringBuffer.append(TEXT_389);
     stringBuffer.append(genFeature.getQualifiedFeatureAccessor());
     stringBuffer.append(TEXT_149);
     if (!isJDK50 && genFeature.isPrimitiveType()) {
-    stringBuffer.append(TEXT_343);
+    stringBuffer.append(TEXT_340);
     stringBuffer.append(genFeature.getObjectType(genClass));
     stringBuffer.append(TEXT_93);
     }
-    stringBuffer.append(TEXT_344);
+    stringBuffer.append(TEXT_341);
     stringBuffer.append(genFeature.getCapName());
     if (!isJDK50 && genFeature.isPrimitiveType()) {
     stringBuffer.append(TEXT_86);
@@ -3208,11 +3196,11 @@
     stringBuffer.append(TEXT_119);
     stringBuffer.append(setAccessorOperation.getBody(genModel.getIndentation(stringBuffer)));
     } else {
-    stringBuffer.append(TEXT_393);
+    stringBuffer.append(TEXT_390);
     stringBuffer.append(genFeature.getFormattedName());
-    stringBuffer.append(TEXT_288);
+    stringBuffer.append(TEXT_285);
     stringBuffer.append(genFeature.getFeatureKind());
-    stringBuffer.append(TEXT_394);
+    stringBuffer.append(TEXT_391);
     //Class/setGenFeature.todo.override.javajetinc
     }
     stringBuffer.append(TEXT_176);
@@ -3233,32 +3221,32 @@
     }
     stringBuffer.append(TEXT_131);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.notify.NotificationChain"));
-    stringBuffer.append(TEXT_395);
+    stringBuffer.append(TEXT_392);
     stringBuffer.append(genFeature.getAccessorName());
     stringBuffer.append(TEXT_93);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.notify.NotificationChain"));
-    stringBuffer.append(TEXT_303);
+    stringBuffer.append(TEXT_300);
     if (genModel.isDynamicDelegation()) {
-    stringBuffer.append(TEXT_396);
+    stringBuffer.append(TEXT_393);
     stringBuffer.append(genFeature.getAsInternalEObject("", false));
     if (genFeature.isResolveProxies()) {
-    stringBuffer.append(TEXT_397);
+    stringBuffer.append(TEXT_394);
     stringBuffer.append(genFeature.getAccessorName());
     } else {
     stringBuffer.append(genFeature.getGetAccessor());
     }
-    stringBuffer.append(TEXT_398);
+    stringBuffer.append(TEXT_395);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(positiveOffsetCorrection);
-    stringBuffer.append(TEXT_305);
+    stringBuffer.append(TEXT_302);
     } else if (!genFeature.isVolatile()) {
     if (genModel.isVirtualDelegation()) {
     if (!genModel.isSuppressNotification()) {
-    stringBuffer.append(TEXT_399);
+    stringBuffer.append(TEXT_396);
     stringBuffer.append(genFeature.getCapName());
     stringBuffer.append(TEXT_76);
     }
-    stringBuffer.append(TEXT_400);
+    stringBuffer.append(TEXT_397);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(positiveOffsetCorrection);
     stringBuffer.append(TEXT_146);
@@ -3266,7 +3254,7 @@
     if (!genModel.isSuppressNotification()) {
     stringBuffer.append(TEXT_119);
     stringBuffer.append(genFeature.getImportedType(genClass));
-    stringBuffer.append(TEXT_232);
+    stringBuffer.append(TEXT_229);
     stringBuffer.append(genFeature.getCapName());
     stringBuffer.append(TEXT_76);
     stringBuffer.append(genFeature.getSafeName());
@@ -3274,76 +3262,76 @@
     }
     stringBuffer.append(TEXT_119);
     stringBuffer.append(genFeature.getSafeName());
-    stringBuffer.append(TEXT_401);
+    stringBuffer.append(TEXT_398);
     }
     if (genModel.isVirtualDelegation()) {
     if (!genModel.isSuppressNotification()) {
-    stringBuffer.append(TEXT_313);
+    stringBuffer.append(TEXT_310);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_402);
+    stringBuffer.append(TEXT_399);
     }
     } else if (genClass.isESetFlag(genFeature)) {
     if (!genModel.isSuppressNotification()) {
+    stringBuffer.append(TEXT_312);
+    stringBuffer.append(genFeature.getCapName());
+    stringBuffer.append(TEXT_313);
+    stringBuffer.append(genClass.getESetFlagsField(genFeature));
+    stringBuffer.append(TEXT_259);
+    stringBuffer.append(genFeature.getUpperName());
+    stringBuffer.append(TEXT_314);
+    }
+    stringBuffer.append(TEXT_119);
+    stringBuffer.append(genClass.getESetFlagsField(genFeature));
+    stringBuffer.append(TEXT_373);
+    stringBuffer.append(genFeature.getUpperName());
     stringBuffer.append(TEXT_315);
+    } else {
+    if (!genModel.isSuppressNotification()) {
+    stringBuffer.append(TEXT_312);
     stringBuffer.append(genFeature.getCapName());
     stringBuffer.append(TEXT_316);
-    stringBuffer.append(genClass.getESetFlagsField(genFeature));
-    stringBuffer.append(TEXT_262);
-    stringBuffer.append(genFeature.getUpperName());
+    stringBuffer.append(genFeature.getUncapName());
     stringBuffer.append(TEXT_317);
     }
     stringBuffer.append(TEXT_119);
-    stringBuffer.append(genClass.getESetFlagsField(genFeature));
-    stringBuffer.append(TEXT_376);
-    stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_318);
-    } else {
-    if (!genModel.isSuppressNotification()) {
-    stringBuffer.append(TEXT_315);
-    stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_319);
     stringBuffer.append(genFeature.getUncapName());
+    stringBuffer.append(TEXT_400);
+    }
+    if (!genModel.isSuppressNotification()) {
+    stringBuffer.append(TEXT_401);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.impl.ENotificationImpl"));
     stringBuffer.append(TEXT_320);
-    }
-    stringBuffer.append(TEXT_119);
-    stringBuffer.append(genFeature.getUncapName());
-    stringBuffer.append(TEXT_403);
-    }
-    if (!genModel.isSuppressNotification()) {
-    stringBuffer.append(TEXT_404);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.impl.ENotificationImpl"));
-    stringBuffer.append(TEXT_323);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.impl.ENotificationImpl"));
-    stringBuffer.append(TEXT_256);
+    stringBuffer.append(TEXT_253);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.notify.Notification"));
-    stringBuffer.append(TEXT_405);
+    stringBuffer.append(TEXT_402);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(positiveOffsetCorrection);
     stringBuffer.append(TEXT_149);
     if (genModel.isVirtualDelegation()) {
-    stringBuffer.append(TEXT_406);
+    stringBuffer.append(TEXT_403);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_407);
+    stringBuffer.append(TEXT_404);
     } else {
-    stringBuffer.append(TEXT_326);
+    stringBuffer.append(TEXT_323);
     stringBuffer.append(genFeature.getCapName());
     }
-    stringBuffer.append(TEXT_408);
+    stringBuffer.append(TEXT_405);
     if (genModel.isVirtualDelegation()) {
-    stringBuffer.append(TEXT_327);
+    stringBuffer.append(TEXT_324);
     } else {
-    stringBuffer.append(TEXT_326);
+    stringBuffer.append(TEXT_323);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_329);
+    stringBuffer.append(TEXT_326);
     }
-    stringBuffer.append(TEXT_409);
+    stringBuffer.append(TEXT_406);
     }
     } else {
-    stringBuffer.append(TEXT_410);
+    stringBuffer.append(TEXT_407);
     stringBuffer.append(genFeature.getFormattedName());
-    stringBuffer.append(TEXT_288);
+    stringBuffer.append(TEXT_285);
     stringBuffer.append(genFeature.getFeatureKind());
-    stringBuffer.append(TEXT_336);
+    stringBuffer.append(TEXT_333);
     //Class/basicUnsetGenFeature.todo.override.javajetinc
     }
     stringBuffer.append(TEXT_176);
@@ -3351,7 +3339,7 @@
     }
     if (genFeature.isUnset() && (isImplementation || !genFeature.isSuppressedUnsetVisibility())) {
     if (isInterface) {
-    stringBuffer.append(TEXT_411);
+    stringBuffer.append(TEXT_408);
     stringBuffer.append(genClass.getRawQualifiedInterfaceName());
     stringBuffer.append(TEXT_15);
     stringBuffer.append(genFeature.getGetAccessor());
@@ -3360,17 +3348,17 @@
     stringBuffer.append(TEXT_62);
     stringBuffer.append(genFeature.getFeatureKind());
     stringBuffer.append(TEXT_189);
-    stringBuffer.append(TEXT_412);
+    stringBuffer.append(TEXT_203);
     if (!genFeature.isSuppressedIsSetVisibility()) {
-    stringBuffer.append(TEXT_212);
+    stringBuffer.append(TEXT_209);
     stringBuffer.append(genFeature.getAccessorName());
     stringBuffer.append(TEXT_21);
     }
-    stringBuffer.append(TEXT_339);
+    stringBuffer.append(TEXT_336);
     stringBuffer.append(genFeature.getGetAccessor());
     stringBuffer.append(TEXT_21);
     if (!genFeature.isListType() && !genFeature.isSuppressedSetVisibility()) {
-    stringBuffer.append(TEXT_214);
+    stringBuffer.append(TEXT_211);
     stringBuffer.append(genFeature.getAccessorName());
     stringBuffer.append(TEXT_93);
     stringBuffer.append(genFeature.getRawImportedBoundType());
@@ -3396,36 +3384,36 @@
     stringBuffer.append(TEXT_55);
     }
     if (!isImplementation) {
-    stringBuffer.append(TEXT_413);
+    stringBuffer.append(TEXT_409);
     stringBuffer.append(genFeature.getAccessorName());
     stringBuffer.append(TEXT_163);
     } else {
     if (useInterfaceOverrideAnnotation && !genClass.isMapEntry() && !genClass.hasCollidingUnsetAccessorOperation(genFeature) && !genFeature.isSuppressedUnsetVisibility()) {
     stringBuffer.append(TEXT_124);
     }
-    stringBuffer.append(TEXT_414);
+    stringBuffer.append(TEXT_410);
     stringBuffer.append(genFeature.getAccessorName());
     if (genClass.hasCollidingUnsetAccessorOperation(genFeature)) {
     stringBuffer.append(TEXT_143);
     }
     stringBuffer.append(TEXT_132);
     if (genModel.isDynamicDelegation() && !genFeature.isVolatile()) {
-    stringBuffer.append(TEXT_415);
+    stringBuffer.append(TEXT_411);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     if (genClass.hasStaticFeatures()){
-    stringBuffer.append(TEXT_219);
+    stringBuffer.append(TEXT_216);
     }
     stringBuffer.append(TEXT_149);
     stringBuffer.append(genFeature.getQualifiedFeatureAccessor());
     stringBuffer.append(TEXT_146);
     } else if (genModel.isReflectiveDelegation()) {
-    stringBuffer.append(TEXT_416);
+    stringBuffer.append(TEXT_412);
     stringBuffer.append(genFeature.getQualifiedFeatureAccessor());
     stringBuffer.append(TEXT_146);
     } else if (genFeature.hasSettingDelegate()) {
     stringBuffer.append(TEXT_119);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_417);
+    stringBuffer.append(TEXT_413);
     } else if (!genFeature.isVolatile()) {
     if (genFeature.isListType()) {
     if (genModel.isVirtualDelegation()) {
@@ -3442,13 +3430,13 @@
     }
     stringBuffer.append(TEXT_136);
     stringBuffer.append(genFeature.getSafeName());
-    stringBuffer.append(TEXT_418);
+    stringBuffer.append(TEXT_414);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.InternalEList"));
-    stringBuffer.append(TEXT_419);
+    stringBuffer.append(TEXT_415);
     stringBuffer.append(singleWildcard);
     stringBuffer.append(TEXT_86);
     stringBuffer.append(genFeature.getSafeName());
-    stringBuffer.append(TEXT_420);
+    stringBuffer.append(TEXT_416);
     } else if (genFeature.isBidirectional() || genFeature.isEffectiveContains()) {
     if (genModel.isVirtualDelegation()) {
     stringBuffer.append(TEXT_119);
@@ -3464,109 +3452,109 @@
     }
     stringBuffer.append(TEXT_136);
     stringBuffer.append(genFeature.getSafeName());
-    stringBuffer.append(TEXT_421);
+    stringBuffer.append(TEXT_417);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.notify.NotificationChain"));
-    stringBuffer.append(TEXT_422);
+    stringBuffer.append(TEXT_418);
     if (!genFeature.isBidirectional()) {
-    stringBuffer.append(TEXT_423);
+    stringBuffer.append(TEXT_419);
     stringBuffer.append(genFeature.getAsInternalEObject(genFeature.getSafeName(), true));
-    stringBuffer.append(TEXT_240);
+    stringBuffer.append(TEXT_237);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(negativeOffsetCorrection);
-    stringBuffer.append(TEXT_249);
+    stringBuffer.append(TEXT_246);
     } else { GenFeature reverseFeature = genFeature.getReverse(); GenClass targetClass = reverseFeature.getGenClass(); String reverseOffsetCorrection = targetClass.hasOffsetCorrection() ? " + " + genClass.getOffsetCorrectionField(genFeature) : "";
-    stringBuffer.append(TEXT_423);
+    stringBuffer.append(TEXT_419);
     stringBuffer.append(genFeature.getAsInternalEObject(genFeature.getSafeName(), true));
-    stringBuffer.append(TEXT_243);
+    stringBuffer.append(TEXT_240);
     stringBuffer.append(targetClass.getQualifiedFeatureID(reverseFeature));
     stringBuffer.append(reverseOffsetCorrection);
     stringBuffer.append(TEXT_149);
     stringBuffer.append(targetClass.getRawImportedInterfaceName());
-    stringBuffer.append(TEXT_252);
+    stringBuffer.append(TEXT_249);
     }
-    stringBuffer.append(TEXT_424);
+    stringBuffer.append(TEXT_420);
     stringBuffer.append(genFeature.getAccessorName());
-    stringBuffer.append(TEXT_425);
+    stringBuffer.append(TEXT_421);
     if (genModel.isVirtualDelegation()) {
-    stringBuffer.append(TEXT_368);
+    stringBuffer.append(TEXT_365);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_369);
+    stringBuffer.append(TEXT_366);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(positiveOffsetCorrection);
     stringBuffer.append(TEXT_146);
     } else if (genClass.isESetFlag(genFeature)) {
     if (!genModel.isSuppressNotification()) {
-    stringBuffer.append(TEXT_368);
+    stringBuffer.append(TEXT_365);
+    stringBuffer.append(genFeature.getCapName());
+    stringBuffer.append(TEXT_313);
+    stringBuffer.append(genClass.getESetFlagsField(genFeature));
+    stringBuffer.append(TEXT_259);
+    stringBuffer.append(genFeature.getUpperName());
+    stringBuffer.append(TEXT_314);
+    }
+    stringBuffer.append(TEXT_151);
+    stringBuffer.append(genClass.getESetFlagsField(genFeature));
+    stringBuffer.append(TEXT_373);
+    stringBuffer.append(genFeature.getUpperName());
+    stringBuffer.append(TEXT_315);
+    } else {
+    if (!genModel.isSuppressNotification()) {
+    stringBuffer.append(TEXT_365);
     stringBuffer.append(genFeature.getCapName());
     stringBuffer.append(TEXT_316);
-    stringBuffer.append(genClass.getESetFlagsField(genFeature));
-    stringBuffer.append(TEXT_262);
-    stringBuffer.append(genFeature.getUpperName());
+    stringBuffer.append(genFeature.getUncapName());
     stringBuffer.append(TEXT_317);
     }
     stringBuffer.append(TEXT_151);
-    stringBuffer.append(genClass.getESetFlagsField(genFeature));
-    stringBuffer.append(TEXT_376);
-    stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_318);
-    } else {
-    if (!genModel.isSuppressNotification()) {
-    stringBuffer.append(TEXT_368);
-    stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_319);
     stringBuffer.append(genFeature.getUncapName());
-    stringBuffer.append(TEXT_320);
-    }
-    stringBuffer.append(TEXT_151);
-    stringBuffer.append(genFeature.getUncapName());
-    stringBuffer.append(TEXT_403);
+    stringBuffer.append(TEXT_400);
     }
     if (!genModel.isSuppressNotification()) {
-    stringBuffer.append(TEXT_370);
+    stringBuffer.append(TEXT_367);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.impl.ENotificationImpl"));
-    stringBuffer.append(TEXT_256);
+    stringBuffer.append(TEXT_253);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.notify.Notification"));
-    stringBuffer.append(TEXT_405);
+    stringBuffer.append(TEXT_402);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(positiveOffsetCorrection);
-    stringBuffer.append(TEXT_426);
+    stringBuffer.append(TEXT_422);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_372);
+    stringBuffer.append(TEXT_369);
     }
-    stringBuffer.append(TEXT_373);
+    stringBuffer.append(TEXT_370);
     } else {
     if (genClass.isFlag(genFeature)) {
     if (!genModel.isSuppressNotification()) {
     if (genFeature.isBooleanType()) {
     stringBuffer.append(TEXT_119);
     stringBuffer.append(genFeature.getImportedType(genClass));
-    stringBuffer.append(TEXT_232);
+    stringBuffer.append(TEXT_229);
     stringBuffer.append(genFeature.getCapName());
     stringBuffer.append(TEXT_144);
     stringBuffer.append(genClass.getFlagsField(genFeature));
-    stringBuffer.append(TEXT_262);
+    stringBuffer.append(TEXT_259);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_263);
+    stringBuffer.append(TEXT_260);
     } else {
     stringBuffer.append(TEXT_119);
     stringBuffer.append(genFeature.getImportedType(genClass));
-    stringBuffer.append(TEXT_232);
+    stringBuffer.append(TEXT_229);
     stringBuffer.append(genFeature.getCapName());
     stringBuffer.append(TEXT_76);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_264);
+    stringBuffer.append(TEXT_261);
     stringBuffer.append(genClass.getFlagsField(genFeature));
+    stringBuffer.append(TEXT_259);
+    stringBuffer.append(genFeature.getUpperName());
     stringBuffer.append(TEXT_262);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_265);
-    stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_266);
+    stringBuffer.append(TEXT_263);
     }
     }
     } else if (genModel.isVirtualDelegation() && !genFeature.isPrimitiveType()) {
-    stringBuffer.append(TEXT_308);
+    stringBuffer.append(TEXT_305);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_427);
+    stringBuffer.append(TEXT_423);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(positiveOffsetCorrection);
     stringBuffer.append(TEXT_146);
@@ -3574,7 +3562,7 @@
     if (!genModel.isSuppressNotification()) {
     stringBuffer.append(TEXT_119);
     stringBuffer.append(genFeature.getImportedType(genClass));
-    stringBuffer.append(TEXT_232);
+    stringBuffer.append(TEXT_229);
     stringBuffer.append(genFeature.getCapName());
     stringBuffer.append(TEXT_76);
     stringBuffer.append(genFeature.getSafeName());
@@ -3583,93 +3571,93 @@
     }
     if (!genModel.isSuppressNotification()) {
     if (genModel.isVirtualDelegation() && !genFeature.isPrimitiveType()) {
-    stringBuffer.append(TEXT_313);
+    stringBuffer.append(TEXT_310);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_402);
+    stringBuffer.append(TEXT_399);
     } else if (genClass.isESetFlag(genFeature)) {
-    stringBuffer.append(TEXT_315);
+    stringBuffer.append(TEXT_312);
+    stringBuffer.append(genFeature.getCapName());
+    stringBuffer.append(TEXT_313);
+    stringBuffer.append(genClass.getESetFlagsField(genFeature));
+    stringBuffer.append(TEXT_259);
+    stringBuffer.append(genFeature.getUpperName());
+    stringBuffer.append(TEXT_314);
+    } else {
+    stringBuffer.append(TEXT_312);
     stringBuffer.append(genFeature.getCapName());
     stringBuffer.append(TEXT_316);
-    stringBuffer.append(genClass.getESetFlagsField(genFeature));
-    stringBuffer.append(TEXT_262);
-    stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_317);
-    } else {
-    stringBuffer.append(TEXT_315);
-    stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_319);
     stringBuffer.append(genFeature.getUncapName());
-    stringBuffer.append(TEXT_320);
+    stringBuffer.append(TEXT_317);
     }
     }
     if (genFeature.isReferenceType()) {
     stringBuffer.append(TEXT_119);
     stringBuffer.append(genFeature.getSafeName());
-    stringBuffer.append(TEXT_401);
+    stringBuffer.append(TEXT_398);
     if (!genModel.isVirtualDelegation()) {
     if (genClass.isESetFlag(genFeature)) {
     stringBuffer.append(TEXT_119);
     stringBuffer.append(genClass.getESetFlagsField(genFeature));
-    stringBuffer.append(TEXT_376);
+    stringBuffer.append(TEXT_373);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_318);
+    stringBuffer.append(TEXT_315);
     } else {
     stringBuffer.append(TEXT_119);
     stringBuffer.append(genFeature.getUncapName());
-    stringBuffer.append(TEXT_403);
+    stringBuffer.append(TEXT_400);
     }
     }
     if (!genModel.isSuppressNotification()) {
-    stringBuffer.append(TEXT_386);
+    stringBuffer.append(TEXT_383);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.impl.ENotificationImpl"));
-    stringBuffer.append(TEXT_256);
+    stringBuffer.append(TEXT_253);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.notify.Notification"));
-    stringBuffer.append(TEXT_405);
+    stringBuffer.append(TEXT_402);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(positiveOffsetCorrection);
     stringBuffer.append(TEXT_149);
     if (genModel.isVirtualDelegation()) {
-    stringBuffer.append(TEXT_406);
+    stringBuffer.append(TEXT_403);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_407);
+    stringBuffer.append(TEXT_404);
     } else {
-    stringBuffer.append(TEXT_326);
+    stringBuffer.append(TEXT_323);
     stringBuffer.append(genFeature.getCapName());
     }
-    stringBuffer.append(TEXT_408);
+    stringBuffer.append(TEXT_405);
     if (genModel.isVirtualDelegation()) {
-    stringBuffer.append(TEXT_327);
+    stringBuffer.append(TEXT_324);
     } else {
-    stringBuffer.append(TEXT_326);
+    stringBuffer.append(TEXT_323);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_329);
+    stringBuffer.append(TEXT_326);
     }
-    stringBuffer.append(TEXT_259);
+    stringBuffer.append(TEXT_256);
     }
     } else {
     if (genClass.isFlag(genFeature)) {
     if (genFeature.isBooleanType()) {
     stringBuffer.append(TEXT_136);
     stringBuffer.append(genFeature.getEDefault());
-    stringBuffer.append(TEXT_374);
+    stringBuffer.append(TEXT_371);
     stringBuffer.append(genClass.getFlagsField(genFeature));
     stringBuffer.append(TEXT_120);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_375);
+    stringBuffer.append(TEXT_372);
     stringBuffer.append(genClass.getFlagsField(genFeature));
-    stringBuffer.append(TEXT_376);
+    stringBuffer.append(TEXT_373);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_377);
+    stringBuffer.append(TEXT_374);
     } else {
     stringBuffer.append(TEXT_119);
     stringBuffer.append(genClass.getFlagsField(genFeature));
     stringBuffer.append(TEXT_76);
     stringBuffer.append(genClass.getFlagsField(genFeature));
-    stringBuffer.append(TEXT_380);
+    stringBuffer.append(TEXT_377);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_381);
+    stringBuffer.append(TEXT_378);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_428);
+    stringBuffer.append(TEXT_424);
     }
     } else if (!genModel.isVirtualDelegation() || genFeature.isPrimitiveType()) {
     stringBuffer.append(TEXT_119);
@@ -3682,64 +3670,64 @@
     if (genClass.isESetFlag(genFeature)) {
     stringBuffer.append(TEXT_119);
     stringBuffer.append(genClass.getESetFlagsField(genFeature));
-    stringBuffer.append(TEXT_376);
+    stringBuffer.append(TEXT_373);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_318);
+    stringBuffer.append(TEXT_315);
     } else {
     stringBuffer.append(TEXT_119);
     stringBuffer.append(genFeature.getUncapName());
-    stringBuffer.append(TEXT_403);
+    stringBuffer.append(TEXT_400);
     }
     }
     if (!genModel.isSuppressNotification()) {
-    stringBuffer.append(TEXT_386);
+    stringBuffer.append(TEXT_383);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.impl.ENotificationImpl"));
-    stringBuffer.append(TEXT_256);
+    stringBuffer.append(TEXT_253);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.notify.Notification"));
-    stringBuffer.append(TEXT_405);
+    stringBuffer.append(TEXT_402);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(positiveOffsetCorrection);
     stringBuffer.append(TEXT_149);
     if (genModel.isVirtualDelegation() && !genFeature.isPrimitiveType()) {
-    stringBuffer.append(TEXT_406);
+    stringBuffer.append(TEXT_403);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_429);
+    stringBuffer.append(TEXT_425);
     stringBuffer.append(genFeature.getEDefault());
     } else {
-    stringBuffer.append(TEXT_326);
+    stringBuffer.append(TEXT_323);
     stringBuffer.append(genFeature.getCapName());
     }
     stringBuffer.append(TEXT_149);
     stringBuffer.append(genFeature.getEDefault());
     stringBuffer.append(TEXT_149);
     if (genModel.isVirtualDelegation() && !genFeature.isPrimitiveType()) {
-    stringBuffer.append(TEXT_327);
+    stringBuffer.append(TEXT_324);
     } else {
-    stringBuffer.append(TEXT_326);
+    stringBuffer.append(TEXT_323);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_329);
+    stringBuffer.append(TEXT_326);
     }
-    stringBuffer.append(TEXT_259);
+    stringBuffer.append(TEXT_256);
     }
     }
     }
     } else if (genFeature.hasDelegateFeature()) { GenFeature delegateFeature = genFeature.getDelegateFeature();
     if (delegateFeature.isWrappedFeatureMapType()) {
-    stringBuffer.append(TEXT_390);
+    stringBuffer.append(TEXT_387);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMap"));
-    stringBuffer.append(TEXT_274);
+    stringBuffer.append(TEXT_271);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMap"));
-    stringBuffer.append(TEXT_275);
+    stringBuffer.append(TEXT_272);
     stringBuffer.append(delegateFeature.getAccessorName());
-    stringBuffer.append(TEXT_430);
+    stringBuffer.append(TEXT_426);
     stringBuffer.append(genFeature.getQualifiedFeatureAccessor());
     stringBuffer.append(TEXT_146);
     } else {
-    stringBuffer.append(TEXT_390);
+    stringBuffer.append(TEXT_387);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMap"));
-    stringBuffer.append(TEXT_333);
+    stringBuffer.append(TEXT_330);
     stringBuffer.append(delegateFeature.getAccessorName());
-    stringBuffer.append(TEXT_431);
+    stringBuffer.append(TEXT_427);
     stringBuffer.append(genFeature.getQualifiedFeatureAccessor());
     stringBuffer.append(TEXT_146);
     }
@@ -3747,11 +3735,11 @@
     stringBuffer.append(TEXT_119);
     stringBuffer.append(genClass.getUnsetAccessorOperation(genFeature).getBody(genModel.getIndentation(stringBuffer)));
     } else {
-    stringBuffer.append(TEXT_432);
+    stringBuffer.append(TEXT_428);
     stringBuffer.append(genFeature.getFormattedName());
-    stringBuffer.append(TEXT_288);
+    stringBuffer.append(TEXT_285);
     stringBuffer.append(genFeature.getFeatureKind());
-    stringBuffer.append(TEXT_394);
+    stringBuffer.append(TEXT_391);
     //Class/unsetGenFeature.todo.override.javajetinc
     }
     stringBuffer.append(TEXT_176);
@@ -3760,7 +3748,7 @@
     }
     if (genFeature.isIsSet() && (isImplementation || !genFeature.isSuppressedIsSetVisibility())) {
     if (isInterface) {
-    stringBuffer.append(TEXT_433);
+    stringBuffer.append(TEXT_429);
     stringBuffer.append(genClass.getRawQualifiedInterfaceName());
     stringBuffer.append(TEXT_15);
     stringBuffer.append(genFeature.getGetAccessor());
@@ -3768,22 +3756,22 @@
     stringBuffer.append(genFeature.getFormattedName());
     stringBuffer.append(TEXT_62);
     stringBuffer.append(genFeature.getFeatureKind());
-    stringBuffer.append(TEXT_434);
-    stringBuffer.append(TEXT_435);
+    stringBuffer.append(TEXT_430);
+    stringBuffer.append(TEXT_431);
     stringBuffer.append(genFeature.getFormattedName());
-    stringBuffer.append(TEXT_205);
+    stringBuffer.append(TEXT_207);
     stringBuffer.append(genFeature.getFeatureKind());
-    stringBuffer.append(TEXT_434);
+    stringBuffer.append(TEXT_430);
     if (genFeature.isChangeable() && !genFeature.isSuppressedUnsetVisibility()) {
-    stringBuffer.append(TEXT_213);
+    stringBuffer.append(TEXT_210);
     stringBuffer.append(genFeature.getAccessorName());
     stringBuffer.append(TEXT_21);
     }
-    stringBuffer.append(TEXT_339);
+    stringBuffer.append(TEXT_336);
     stringBuffer.append(genFeature.getGetAccessor());
     stringBuffer.append(TEXT_21);
     if (!genFeature.isListType() && genFeature.isChangeable() && !genFeature.isSuppressedSetVisibility()) {
-    stringBuffer.append(TEXT_214);
+    stringBuffer.append(TEXT_211);
     stringBuffer.append(genFeature.getAccessorName());
     stringBuffer.append(TEXT_93);
     stringBuffer.append(genFeature.getRawImportedBoundType());
@@ -3809,36 +3797,36 @@
     stringBuffer.append(TEXT_55);
     }
     if (!isImplementation) {
-    stringBuffer.append(TEXT_436);
+    stringBuffer.append(TEXT_432);
     stringBuffer.append(genFeature.getAccessorName());
     stringBuffer.append(TEXT_163);
     } else {
     if (useInterfaceOverrideAnnotation  && !genClass.isMapEntry() && !genClass.hasCollidingIsSetAccessorOperation(genFeature) && !genFeature.isSuppressedIsSetVisibility()) {
     stringBuffer.append(TEXT_124);
     }
-    stringBuffer.append(TEXT_437);
+    stringBuffer.append(TEXT_433);
     stringBuffer.append(genFeature.getAccessorName());
     if (genClass.hasCollidingIsSetAccessorOperation(genFeature)) {
     stringBuffer.append(TEXT_143);
     }
     stringBuffer.append(TEXT_132);
     if (genModel.isDynamicDelegation() && !genFeature.isVolatile()) {
-    stringBuffer.append(TEXT_438);
+    stringBuffer.append(TEXT_434);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     if (genClass.hasStaticFeatures()){
-    stringBuffer.append(TEXT_219);
+    stringBuffer.append(TEXT_216);
     }
     stringBuffer.append(TEXT_149);
     stringBuffer.append(genFeature.getQualifiedFeatureAccessor());
     stringBuffer.append(TEXT_146);
     } else if (genModel.isReflectiveDelegation()) {
-    stringBuffer.append(TEXT_439);
+    stringBuffer.append(TEXT_435);
     stringBuffer.append(genFeature.getQualifiedFeatureAccessor());
     stringBuffer.append(TEXT_146);
     } else if (genFeature.hasSettingDelegate()) {
     stringBuffer.append(TEXT_172);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_440);
+    stringBuffer.append(TEXT_436);
     } else if (!genFeature.isVolatile()) {
     if (genFeature.isListType()) {
     if (genModel.isVirtualDelegation()) {
@@ -3855,48 +3843,48 @@
     }
     stringBuffer.append(TEXT_172);
     stringBuffer.append(genFeature.getSafeName());
-    stringBuffer.append(TEXT_441);
+    stringBuffer.append(TEXT_437);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.InternalEList"));
-    stringBuffer.append(TEXT_419);
+    stringBuffer.append(TEXT_415);
     stringBuffer.append(singleWildcard);
     stringBuffer.append(TEXT_86);
     stringBuffer.append(genFeature.getSafeName());
-    stringBuffer.append(TEXT_442);
+    stringBuffer.append(TEXT_438);
     } else {
     if (genModel.isVirtualDelegation() && !genFeature.isPrimitiveType()) {
-    stringBuffer.append(TEXT_443);
+    stringBuffer.append(TEXT_439);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(positiveOffsetCorrection);
     stringBuffer.append(TEXT_146);
     } else if (genClass.isESetFlag(genFeature)) {
-    stringBuffer.append(TEXT_261);
+    stringBuffer.append(TEXT_258);
     stringBuffer.append(genClass.getESetFlagsField(genFeature));
-    stringBuffer.append(TEXT_262);
+    stringBuffer.append(TEXT_259);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_317);
+    stringBuffer.append(TEXT_314);
     } else {
     stringBuffer.append(TEXT_172);
     stringBuffer.append(genFeature.getUncapName());
-    stringBuffer.append(TEXT_320);
+    stringBuffer.append(TEXT_317);
     }
     }
     } else if (genFeature.hasDelegateFeature()) { GenFeature delegateFeature = genFeature.getDelegateFeature();
     if (delegateFeature.isWrappedFeatureMapType()) {
-    stringBuffer.append(TEXT_444);
+    stringBuffer.append(TEXT_440);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMap"));
-    stringBuffer.append(TEXT_274);
+    stringBuffer.append(TEXT_271);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMap"));
-    stringBuffer.append(TEXT_275);
+    stringBuffer.append(TEXT_272);
     stringBuffer.append(delegateFeature.getAccessorName());
-    stringBuffer.append(TEXT_445);
+    stringBuffer.append(TEXT_441);
     stringBuffer.append(genFeature.getQualifiedFeatureAccessor());
     stringBuffer.append(TEXT_146);
     } else {
-    stringBuffer.append(TEXT_444);
+    stringBuffer.append(TEXT_440);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMap"));
-    stringBuffer.append(TEXT_333);
+    stringBuffer.append(TEXT_330);
     stringBuffer.append(delegateFeature.getAccessorName());
-    stringBuffer.append(TEXT_446);
+    stringBuffer.append(TEXT_442);
     stringBuffer.append(genFeature.getQualifiedFeatureAccessor());
     stringBuffer.append(TEXT_146);
     }
@@ -3904,11 +3892,11 @@
     stringBuffer.append(TEXT_119);
     stringBuffer.append(genClass.getIsSetAccessorOperation(genFeature).getBody(genModel.getIndentation(stringBuffer)));
     } else {
-    stringBuffer.append(TEXT_447);
+    stringBuffer.append(TEXT_443);
     stringBuffer.append(genFeature.getFormattedName());
-    stringBuffer.append(TEXT_288);
+    stringBuffer.append(TEXT_285);
     stringBuffer.append(genFeature.getFeatureKind());
-    stringBuffer.append(TEXT_448);
+    stringBuffer.append(TEXT_444);
     //Class/isSetGenFeature.todo.override.javajetinc
     }
     stringBuffer.append(TEXT_176);
@@ -3921,13 +3909,13 @@
     for (GenOperation genOperation : (isImplementation ? genClass.getImplementedGenOperations() : genClass.getDeclaredGenOperations())) {
     if (isImplementation) {
     if (genOperation.isInvariant() && genOperation.hasInvariantExpression()) {
-    stringBuffer.append(TEXT_449);
+    stringBuffer.append(TEXT_445);
     stringBuffer.append(genOperation.getName());
     stringBuffer.append(TEXT_93);
     stringBuffer.append(genOperation.getParameterTypes(", "));
-    stringBuffer.append(TEXT_450);
+    stringBuffer.append(TEXT_446);
     stringBuffer.append(genOperation.getFormattedName());
-    stringBuffer.append(TEXT_451);
+    stringBuffer.append(TEXT_447);
     stringBuffer.append(genOperation.getName());
     stringBuffer.append(TEXT_93);
     stringBuffer.append(genOperation.getParameterTypes(", "));
@@ -3944,19 +3932,19 @@
     stringBuffer.append(genModel.getImportedName("java.lang.String"));
     stringBuffer.append(TEXT_70);
     stringBuffer.append(CodeGenUtil.upperName(genClass.getUniqueName(genOperation), genModel.getLocale()));
-    stringBuffer.append(TEXT_452);
+    stringBuffer.append(TEXT_448);
     stringBuffer.append(genOperation.getInvariantExpression("\t\t"));
     stringBuffer.append(TEXT_40);
     stringBuffer.append(genModel.getNonNLS());
     stringBuffer.append(TEXT_7);
     } else if (genOperation.hasInvocationDelegate()) {
-    stringBuffer.append(TEXT_453);
+    stringBuffer.append(TEXT_449);
     stringBuffer.append(genOperation.getName());
     stringBuffer.append(TEXT_93);
     stringBuffer.append(genOperation.getParameterTypes(", "));
-    stringBuffer.append(TEXT_450);
+    stringBuffer.append(TEXT_446);
     stringBuffer.append(genOperation.getFormattedName());
-    stringBuffer.append(TEXT_454);
+    stringBuffer.append(TEXT_450);
     stringBuffer.append(genOperation.getName());
     stringBuffer.append(TEXT_93);
     stringBuffer.append(genOperation.getParameterTypes(", "));
@@ -3971,20 +3959,20 @@
     }
     stringBuffer.append(TEXT_57);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EOperation"));
-    stringBuffer.append(TEXT_455);
+    stringBuffer.append(TEXT_451);
     stringBuffer.append(CodeGenUtil.upperName(genClass.getUniqueName(genOperation), genModel.getLocale()));
-    stringBuffer.append(TEXT_456);
+    stringBuffer.append(TEXT_452);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EOperation"));
     stringBuffer.append(TEXT_67);
     stringBuffer.append(genOperation.getQualifiedOperationAccessor());
-    stringBuffer.append(TEXT_457);
+    stringBuffer.append(TEXT_453);
     }
     }
     if (isInterface) {
-    stringBuffer.append(TEXT_458);
-    stringBuffer.append(TEXT_412);
+    stringBuffer.append(TEXT_454);
+    stringBuffer.append(TEXT_203);
     if (genOperation.hasDocumentation() || genOperation.hasParameterDocumentation()) {
-    stringBuffer.append(TEXT_459);
+    stringBuffer.append(TEXT_455);
     if (genOperation.hasDocumentation()) {
     stringBuffer.append(TEXT_53);
     stringBuffer.append(genOperation.getDocumentation(genModel.getIndentation(stringBuffer)));
@@ -3992,28 +3980,28 @@
     for (GenParameter genParameter : genOperation.getGenParameters()) {
     if (genParameter.hasDocumentation()) { String documentation = genParameter.getDocumentation("");
     if (documentation.contains("\n") || documentation.contains("\r")) {
-    stringBuffer.append(TEXT_460);
+    stringBuffer.append(TEXT_456);
     stringBuffer.append(genParameter.getName());
-    stringBuffer.append(TEXT_461);
+    stringBuffer.append(TEXT_457);
     stringBuffer.append(genParameter.getDocumentation(genModel.getIndentation(stringBuffer)));
     } else {
-    stringBuffer.append(TEXT_460);
+    stringBuffer.append(TEXT_456);
     stringBuffer.append(genParameter.getName());
     stringBuffer.append(TEXT_70);
     stringBuffer.append(genParameter.getDocumentation(genModel.getIndentation(stringBuffer)));
     }
     }
     }
-    stringBuffer.append(TEXT_209);
+    stringBuffer.append(TEXT_205);
     }
     if (!genModel.isSuppressEMFModelTags()) { boolean first = true; for (StringTokenizer stringTokenizer = new StringTokenizer(genOperation.getModelInfo(), "\n\r"); stringTokenizer.hasMoreTokens(); ) { String modelInfo = stringTokenizer.nextToken(); if (first) { first = false;
-    stringBuffer.append(TEXT_215);
+    stringBuffer.append(TEXT_212);
     stringBuffer.append(modelInfo);
     } else {
-    stringBuffer.append(TEXT_216);
+    stringBuffer.append(TEXT_213);
     stringBuffer.append(modelInfo);
     }} if (first) {
-    stringBuffer.append(TEXT_217);
+    stringBuffer.append(TEXT_214);
     }}
     stringBuffer.append(TEXT_112);
     //Class/genOperation.javadoc.override.javajetinc
@@ -4057,85 +4045,85 @@
     stringBuffer.append(genOperation.getParameters(isImplementation, genClass));
     stringBuffer.append(TEXT_86);
     stringBuffer.append(genOperation.getThrows(genClass));
-    stringBuffer.append(TEXT_462);
+    stringBuffer.append(TEXT_458);
     if (genOperation.hasBody()) {
     stringBuffer.append(TEXT_119);
     stringBuffer.append(genOperation.getBody(genModel.getIndentation(stringBuffer)));
     } else if (genOperation.isInvariant()) {GenClass opClass = genOperation.getGenClass(); String diagnostics = genOperation.getGenParameters().get(0).getName(); String context = genOperation.getGenParameters().get(1).getName();
     if (genOperation.hasInvariantExpression()) {
-    stringBuffer.append(TEXT_463);
+    stringBuffer.append(TEXT_459);
     stringBuffer.append(opClass.getGenPackage().getImportedValidatorClassName());
-    stringBuffer.append(TEXT_464);
+    stringBuffer.append(TEXT_460);
     stringBuffer.append(genClass.getQualifiedClassifierAccessor());
-    stringBuffer.append(TEXT_465);
+    stringBuffer.append(TEXT_461);
     stringBuffer.append(diagnostics);
-    stringBuffer.append(TEXT_466);
+    stringBuffer.append(TEXT_462);
     stringBuffer.append(context);
-    stringBuffer.append(TEXT_467);
+    stringBuffer.append(TEXT_463);
     stringBuffer.append(genOperation.getValidationDelegate());
-    stringBuffer.append(TEXT_468);
+    stringBuffer.append(TEXT_464);
     stringBuffer.append(genModel.getNonNLS());
-    stringBuffer.append(TEXT_469);
+    stringBuffer.append(TEXT_465);
     stringBuffer.append(genOperation.getQualifiedOperationAccessor());
-    stringBuffer.append(TEXT_466);
+    stringBuffer.append(TEXT_462);
     stringBuffer.append(CodeGenUtil.upperName(genClass.getUniqueName(genOperation), genModel.getLocale()));
-    stringBuffer.append(TEXT_470);
+    stringBuffer.append(TEXT_466);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.util.Diagnostic"));
-    stringBuffer.append(TEXT_471);
+    stringBuffer.append(TEXT_467);
     stringBuffer.append(opClass.getGenPackage().getImportedValidatorClassName());
-    stringBuffer.append(TEXT_472);
+    stringBuffer.append(TEXT_468);
     stringBuffer.append(opClass.getGenPackage().getImportedValidatorClassName());
     stringBuffer.append(TEXT_189);
     stringBuffer.append(opClass.getOperationID(genOperation));
     stringBuffer.append(TEXT_146);
     } else {
-    stringBuffer.append(TEXT_473);
+    stringBuffer.append(TEXT_469);
     stringBuffer.append(diagnostics);
-    stringBuffer.append(TEXT_474);
+    stringBuffer.append(TEXT_470);
     stringBuffer.append(diagnostics);
-    stringBuffer.append(TEXT_475);
+    stringBuffer.append(TEXT_471);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.util.BasicDiagnostic"));
-    stringBuffer.append(TEXT_476);
+    stringBuffer.append(TEXT_472);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.util.Diagnostic"));
-    stringBuffer.append(TEXT_477);
+    stringBuffer.append(TEXT_473);
     stringBuffer.append(opClass.getGenPackage().getImportedValidatorClassName());
-    stringBuffer.append(TEXT_478);
+    stringBuffer.append(TEXT_474);
     stringBuffer.append(opClass.getGenPackage().getImportedValidatorClassName());
     stringBuffer.append(TEXT_189);
     stringBuffer.append(opClass.getOperationID(genOperation));
-    stringBuffer.append(TEXT_479);
+    stringBuffer.append(TEXT_475);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.plugin.EcorePlugin"));
-    stringBuffer.append(TEXT_480);
+    stringBuffer.append(TEXT_476);
     stringBuffer.append(genOperation.getName());
-    stringBuffer.append(TEXT_481);
+    stringBuffer.append(TEXT_477);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.EObjectValidator"));
-    stringBuffer.append(TEXT_482);
+    stringBuffer.append(TEXT_478);
     stringBuffer.append(context);
-    stringBuffer.append(TEXT_483);
+    stringBuffer.append(TEXT_479);
     stringBuffer.append(genModel.getNonNLS());
     stringBuffer.append(genModel.getNonNLS(2));
-    stringBuffer.append(TEXT_484);
+    stringBuffer.append(TEXT_480);
     }
     } else if (genOperation.hasInvocationDelegate()) { int size = genOperation.getGenParameters().size();
-    stringBuffer.append(TEXT_485);
+    stringBuffer.append(TEXT_481);
     if (genOperation.isVoid()) {
     stringBuffer.append(TEXT_151);
     stringBuffer.append(CodeGenUtil.upperName(genClass.getUniqueName(genOperation), genModel.getLocale()));
-    stringBuffer.append(TEXT_486);
+    stringBuffer.append(TEXT_482);
     if (size > 0) {
-    stringBuffer.append(TEXT_343);
+    stringBuffer.append(TEXT_340);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.util.BasicEList"));
-    stringBuffer.append(TEXT_487);
+    stringBuffer.append(TEXT_483);
     stringBuffer.append(size);
     stringBuffer.append(TEXT_149);
     stringBuffer.append(genOperation.getParametersArray(genClass));
     stringBuffer.append(TEXT_86);
     } else {
-    stringBuffer.append(TEXT_488);
+    stringBuffer.append(TEXT_484);
     }
     stringBuffer.append(TEXT_146);
     } else {
-    stringBuffer.append(TEXT_489);
+    stringBuffer.append(TEXT_485);
     if (!isJDK50 && genOperation.isPrimitiveType()) {
     stringBuffer.append(TEXT_93);
     }
@@ -4143,33 +4131,33 @@
     stringBuffer.append(genOperation.getObjectType(genClass));
     stringBuffer.append(TEXT_86);
     stringBuffer.append(CodeGenUtil.upperName(genClass.getUniqueName(genOperation), genModel.getLocale()));
-    stringBuffer.append(TEXT_486);
+    stringBuffer.append(TEXT_482);
     if (size > 0) {
-    stringBuffer.append(TEXT_343);
+    stringBuffer.append(TEXT_340);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.util.BasicEList"));
-    stringBuffer.append(TEXT_487);
+    stringBuffer.append(TEXT_483);
     stringBuffer.append(size);
     stringBuffer.append(TEXT_149);
     stringBuffer.append(genOperation.getParametersArray(genClass));
     stringBuffer.append(TEXT_86);
     } else {
-    stringBuffer.append(TEXT_488);
+    stringBuffer.append(TEXT_484);
     }
     stringBuffer.append(TEXT_86);
     if (!isJDK50 && genOperation.isPrimitiveType()) {
-    stringBuffer.append(TEXT_221);
+    stringBuffer.append(TEXT_218);
     stringBuffer.append(genOperation.getPrimitiveValueFunction());
     stringBuffer.append(TEXT_21);
     }
     stringBuffer.append(TEXT_6);
     }
-    stringBuffer.append(TEXT_490);
+    stringBuffer.append(TEXT_486);
     stringBuffer.append(genModel.getImportedName(isGWT ? "org.eclipse.emf.common.util.InvocationTargetException" : "java.lang.reflect.InvocationTargetException"));
-    stringBuffer.append(TEXT_491);
+    stringBuffer.append(TEXT_487);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.util.WrappedException"));
-    stringBuffer.append(TEXT_492);
+    stringBuffer.append(TEXT_488);
     } else {
-    stringBuffer.append(TEXT_493);
+    stringBuffer.append(TEXT_489);
     //Class/implementedGenOperation.todo.override.javajetinc
     }
     stringBuffer.append(TEXT_176);
@@ -4190,51 +4178,51 @@
     }
     stringBuffer.append(TEXT_131);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.notify.NotificationChain"));
-    stringBuffer.append(TEXT_494);
+    stringBuffer.append(TEXT_490);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.InternalEObject"));
-    stringBuffer.append(TEXT_495);
+    stringBuffer.append(TEXT_491);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.notify.NotificationChain"));
-    stringBuffer.append(TEXT_496);
+    stringBuffer.append(TEXT_492);
     stringBuffer.append(negativeOffsetCorrection);
-    stringBuffer.append(TEXT_497);
+    stringBuffer.append(TEXT_493);
     for (GenFeature genFeature : genClass.getEInverseAddGenFeatures()) {
-    stringBuffer.append(TEXT_498);
+    stringBuffer.append(TEXT_494);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
-    stringBuffer.append(TEXT_499);
+    stringBuffer.append(TEXT_495);
     if (genFeature.isListType()) { String cast = "("  + genModel.getImportedName("org.eclipse.emf.ecore.util.InternalEList") + (!genModel.useGenerics() ? ")" : "<" + genModel.getImportedName("org.eclipse.emf.ecore.InternalEObject") + ">)(" + genModel.getImportedName("org.eclipse.emf.ecore.util.InternalEList") + "<?>)");
     if (genFeature.isMapType() && genFeature.isEffectiveSuppressEMFTypes()) {
-    stringBuffer.append(TEXT_500);
+    stringBuffer.append(TEXT_496);
     stringBuffer.append(cast);
     stringBuffer.append(TEXT_93);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.util.EMap"));
-    stringBuffer.append(TEXT_501);
+    stringBuffer.append(TEXT_497);
     stringBuffer.append(genFeature.getImportedMapTemplateArguments(genClass));
     stringBuffer.append(TEXT_86);
     stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_502);
+    stringBuffer.append(TEXT_498);
     } else {
-    stringBuffer.append(TEXT_503);
+    stringBuffer.append(TEXT_499);
     stringBuffer.append(cast);
     stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_504);
+    stringBuffer.append(TEXT_500);
     }
     } else if (genFeature.isContainer()) {
-    stringBuffer.append(TEXT_505);
+    stringBuffer.append(TEXT_501);
     if (genFeature.isBasicSet()) {
-    stringBuffer.append(TEXT_506);
+    stringBuffer.append(TEXT_502);
     stringBuffer.append(genFeature.getAccessorName());
-    stringBuffer.append(TEXT_273);
+    stringBuffer.append(TEXT_270);
     stringBuffer.append(genFeature.getImportedType(genClass));
-    stringBuffer.append(TEXT_507);
+    stringBuffer.append(TEXT_503);
     } else {
-    stringBuffer.append(TEXT_508);
+    stringBuffer.append(TEXT_504);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(positiveOffsetCorrection);
-    stringBuffer.append(TEXT_305);
+    stringBuffer.append(TEXT_302);
     }
     } else {
     if (genClass.getImplementingGenModel(genFeature).isVirtualDelegation()) {
-    stringBuffer.append(TEXT_238);
+    stringBuffer.append(TEXT_235);
     stringBuffer.append(genFeature.getImportedType(genClass));
     stringBuffer.append(TEXT_70);
     stringBuffer.append(genFeature.getSafeName());
@@ -4245,51 +4233,51 @@
     stringBuffer.append(positiveOffsetCorrection);
     stringBuffer.append(TEXT_146);
     } else if (genFeature.isVolatile() || genClass.getImplementingGenModel(genFeature).isDynamicDelegation()) {
-    stringBuffer.append(TEXT_238);
+    stringBuffer.append(TEXT_235);
     stringBuffer.append(genFeature.getImportedType(genClass));
     stringBuffer.append(TEXT_70);
     stringBuffer.append(genFeature.getSafeName());
     stringBuffer.append(TEXT_76);
     if (genFeature.isResolveProxies()) {
-    stringBuffer.append(TEXT_397);
+    stringBuffer.append(TEXT_394);
     stringBuffer.append(genFeature.getAccessorName());
     } else {
     stringBuffer.append(genFeature.getGetAccessor());
     }
-    stringBuffer.append(TEXT_229);
+    stringBuffer.append(TEXT_226);
     }
-    stringBuffer.append(TEXT_509);
+    stringBuffer.append(TEXT_505);
     stringBuffer.append(genFeature.getSafeName());
-    stringBuffer.append(TEXT_362);
+    stringBuffer.append(TEXT_359);
     if (genFeature.isEffectiveContains()) {
-    stringBuffer.append(TEXT_510);
+    stringBuffer.append(TEXT_506);
     stringBuffer.append(genFeature.getAsInternalEObject(genFeature.getSafeName(), true));
-    stringBuffer.append(TEXT_240);
+    stringBuffer.append(TEXT_237);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(negativeOffsetCorrection);
-    stringBuffer.append(TEXT_249);
+    stringBuffer.append(TEXT_246);
     } else { GenFeature reverseFeature = genFeature.getReverse(); GenClass targetClass = reverseFeature.getGenClass(); String reverseOffsetCorrection = targetClass.hasOffsetCorrection() ? " + " + genClass.getOffsetCorrectionField(genFeature) : "";
-    stringBuffer.append(TEXT_510);
+    stringBuffer.append(TEXT_506);
     stringBuffer.append(genFeature.getAsInternalEObject(genFeature.getSafeName(), true));
-    stringBuffer.append(TEXT_243);
+    stringBuffer.append(TEXT_240);
     stringBuffer.append(targetClass.getQualifiedFeatureID(reverseFeature));
     stringBuffer.append(reverseOffsetCorrection);
     stringBuffer.append(TEXT_149);
     stringBuffer.append(targetClass.getRawImportedInterfaceName());
-    stringBuffer.append(TEXT_252);
+    stringBuffer.append(TEXT_249);
     }
-    stringBuffer.append(TEXT_506);
+    stringBuffer.append(TEXT_502);
     stringBuffer.append(genFeature.getAccessorName());
-    stringBuffer.append(TEXT_273);
+    stringBuffer.append(TEXT_270);
     stringBuffer.append(genFeature.getImportedType(genClass));
-    stringBuffer.append(TEXT_507);
+    stringBuffer.append(TEXT_503);
     }
     }
-    stringBuffer.append(TEXT_373);
+    stringBuffer.append(TEXT_370);
     if (genModel.isMinimalReflectiveMethods()) {
-    stringBuffer.append(TEXT_511);
+    stringBuffer.append(TEXT_507);
     } else {
-    stringBuffer.append(TEXT_512);
+    stringBuffer.append(TEXT_508);
     }
     stringBuffer.append(TEXT_176);
     }
@@ -4300,66 +4288,66 @@
     }
     stringBuffer.append(TEXT_131);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.notify.NotificationChain"));
-    stringBuffer.append(TEXT_513);
+    stringBuffer.append(TEXT_509);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.InternalEObject"));
-    stringBuffer.append(TEXT_495);
+    stringBuffer.append(TEXT_491);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.notify.NotificationChain"));
-    stringBuffer.append(TEXT_496);
+    stringBuffer.append(TEXT_492);
     stringBuffer.append(negativeOffsetCorrection);
-    stringBuffer.append(TEXT_497);
+    stringBuffer.append(TEXT_493);
     for (GenFeature genFeature : genClass.getEInverseRemoveGenFeatures()) {
-    stringBuffer.append(TEXT_498);
+    stringBuffer.append(TEXT_494);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
-    stringBuffer.append(TEXT_499);
+    stringBuffer.append(TEXT_495);
     if (genFeature.isListType()) {
     if (genFeature.isMapType() && genFeature.isEffectiveSuppressEMFTypes()) {
-    stringBuffer.append(TEXT_500);
+    stringBuffer.append(TEXT_496);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.InternalEList"));
     stringBuffer.append(singleWildcard);
-    stringBuffer.append(TEXT_300);
+    stringBuffer.append(TEXT_297);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.util.EMap"));
-    stringBuffer.append(TEXT_501);
+    stringBuffer.append(TEXT_497);
     stringBuffer.append(genFeature.getImportedMapTemplateArguments(genClass));
     stringBuffer.append(TEXT_86);
     stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_514);
+    stringBuffer.append(TEXT_510);
     } else if (genFeature.isWrappedFeatureMapType()) {
-    stringBuffer.append(TEXT_500);
+    stringBuffer.append(TEXT_496);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.InternalEList"));
     stringBuffer.append(singleWildcard);
-    stringBuffer.append(TEXT_300);
+    stringBuffer.append(TEXT_297);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMap"));
-    stringBuffer.append(TEXT_515);
+    stringBuffer.append(TEXT_511);
     stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_516);
+    stringBuffer.append(TEXT_512);
     } else {
-    stringBuffer.append(TEXT_500);
+    stringBuffer.append(TEXT_496);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.InternalEList"));
     stringBuffer.append(singleWildcard);
     stringBuffer.append(TEXT_86);
     stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_517);
+    stringBuffer.append(TEXT_513);
     }
     } else if (genFeature.isContainer() && !genFeature.isBasicSet()) {
-    stringBuffer.append(TEXT_518);
+    stringBuffer.append(TEXT_514);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(positiveOffsetCorrection);
-    stringBuffer.append(TEXT_305);
+    stringBuffer.append(TEXT_302);
     } else if (genFeature.isUnsettable()) {
-    stringBuffer.append(TEXT_519);
+    stringBuffer.append(TEXT_515);
     stringBuffer.append(genFeature.getAccessorName());
-    stringBuffer.append(TEXT_520);
+    stringBuffer.append(TEXT_516);
     } else {
-    stringBuffer.append(TEXT_506);
+    stringBuffer.append(TEXT_502);
     stringBuffer.append(genFeature.getAccessorName());
-    stringBuffer.append(TEXT_521);
+    stringBuffer.append(TEXT_517);
     }
     }
-    stringBuffer.append(TEXT_373);
+    stringBuffer.append(TEXT_370);
     if (genModel.isMinimalReflectiveMethods()) {
-    stringBuffer.append(TEXT_522);
+    stringBuffer.append(TEXT_518);
     } else {
-    stringBuffer.append(TEXT_523);
+    stringBuffer.append(TEXT_519);
     }
     stringBuffer.append(TEXT_176);
     }
@@ -4370,27 +4358,27 @@
     }
     stringBuffer.append(TEXT_131);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.notify.NotificationChain"));
-    stringBuffer.append(TEXT_524);
+    stringBuffer.append(TEXT_520);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.notify.NotificationChain"));
-    stringBuffer.append(TEXT_525);
+    stringBuffer.append(TEXT_521);
     stringBuffer.append(negativeOffsetCorrection);
-    stringBuffer.append(TEXT_497);
+    stringBuffer.append(TEXT_493);
     for (GenFeature genFeature : genClass.getEBasicRemoveFromContainerGenFeatures()) {
     GenFeature reverseFeature = genFeature.getReverse(); GenClass targetClass = reverseFeature.getGenClass(); String reverseOffsetCorrection = targetClass.hasOffsetCorrection() ? " + " + genClass.getOffsetCorrectionField(genFeature) : "";
-    stringBuffer.append(TEXT_498);
+    stringBuffer.append(TEXT_494);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
-    stringBuffer.append(TEXT_526);
+    stringBuffer.append(TEXT_522);
     stringBuffer.append(targetClass.getQualifiedFeatureID(reverseFeature));
     stringBuffer.append(reverseOffsetCorrection);
     stringBuffer.append(TEXT_149);
     stringBuffer.append(targetClass.getRawImportedInterfaceName());
-    stringBuffer.append(TEXT_252);
+    stringBuffer.append(TEXT_249);
     }
-    stringBuffer.append(TEXT_373);
+    stringBuffer.append(TEXT_370);
     if (genModel.isMinimalReflectiveMethods()) {
-    stringBuffer.append(TEXT_527);
+    stringBuffer.append(TEXT_523);
     } else {
-    stringBuffer.append(TEXT_528);
+    stringBuffer.append(TEXT_524);
     }
     stringBuffer.append(TEXT_176);
     }
@@ -4399,80 +4387,80 @@
     if (genModel.useClassOverrideAnnotation()) {
     stringBuffer.append(TEXT_124);
     }
-    stringBuffer.append(TEXT_529);
+    stringBuffer.append(TEXT_525);
     stringBuffer.append(negativeOffsetCorrection);
-    stringBuffer.append(TEXT_497);
+    stringBuffer.append(TEXT_493);
     for (GenFeature genFeature : genClass.getEGetGenFeatures()) {
-    stringBuffer.append(TEXT_498);
+    stringBuffer.append(TEXT_494);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
-    stringBuffer.append(TEXT_499);
+    stringBuffer.append(TEXT_495);
     if (genFeature.isPrimitiveType()) {
     if (isJDK50) {
-    stringBuffer.append(TEXT_530);
+    stringBuffer.append(TEXT_526);
     stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_229);
+    stringBuffer.append(TEXT_226);
     } else if (genFeature.isBooleanType()) {
-    stringBuffer.append(TEXT_530);
+    stringBuffer.append(TEXT_526);
     stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_531);
+    stringBuffer.append(TEXT_527);
     } else {
-    stringBuffer.append(TEXT_532);
+    stringBuffer.append(TEXT_528);
     stringBuffer.append(genFeature.getObjectType(genClass));
     stringBuffer.append(TEXT_93);
     stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_533);
+    stringBuffer.append(TEXT_529);
     }
     } else if (genFeature.isResolveProxies() && !genFeature.isListType()) {
-    stringBuffer.append(TEXT_534);
+    stringBuffer.append(TEXT_530);
     stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_535);
+    stringBuffer.append(TEXT_531);
     stringBuffer.append(genFeature.getAccessorName());
-    stringBuffer.append(TEXT_229);
+    stringBuffer.append(TEXT_226);
     } else if (genFeature.isMapType()) {
     if (genFeature.isEffectiveSuppressEMFTypes()) {
-    stringBuffer.append(TEXT_536);
+    stringBuffer.append(TEXT_532);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.util.EMap"));
-    stringBuffer.append(TEXT_501);
+    stringBuffer.append(TEXT_497);
     stringBuffer.append(genFeature.getImportedMapTemplateArguments(genClass));
     stringBuffer.append(TEXT_86);
     stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_537);
+    stringBuffer.append(TEXT_533);
     stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_229);
+    stringBuffer.append(TEXT_226);
     } else {
-    stringBuffer.append(TEXT_538);
+    stringBuffer.append(TEXT_534);
     stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_539);
+    stringBuffer.append(TEXT_535);
     stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_540);
+    stringBuffer.append(TEXT_536);
     }
     } else if (genFeature.isWrappedFeatureMapType()) {
-    stringBuffer.append(TEXT_536);
+    stringBuffer.append(TEXT_532);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMap"));
-    stringBuffer.append(TEXT_515);
+    stringBuffer.append(TEXT_511);
     stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_541);
+    stringBuffer.append(TEXT_537);
     stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_229);
+    stringBuffer.append(TEXT_226);
     } else if (genFeature.isFeatureMapType()) {
-    stringBuffer.append(TEXT_538);
+    stringBuffer.append(TEXT_534);
     stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_542);
+    stringBuffer.append(TEXT_538);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMap"));
     stringBuffer.append(TEXT_67);
     stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_543);
+    stringBuffer.append(TEXT_539);
     } else {
-    stringBuffer.append(TEXT_530);
+    stringBuffer.append(TEXT_526);
     stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_229);
+    stringBuffer.append(TEXT_226);
     }
     }
-    stringBuffer.append(TEXT_373);
+    stringBuffer.append(TEXT_370);
     if (genModel.isMinimalReflectiveMethods()) {
-    stringBuffer.append(TEXT_544);
+    stringBuffer.append(TEXT_540);
     } else {
-    stringBuffer.append(TEXT_545);
+    stringBuffer.append(TEXT_541);
     }
     stringBuffer.append(TEXT_176);
     }
@@ -4488,70 +4476,70 @@
     if (genModel.useClassOverrideAnnotation()) {
     stringBuffer.append(TEXT_124);
     }
-    stringBuffer.append(TEXT_546);
+    stringBuffer.append(TEXT_542);
     stringBuffer.append(negativeOffsetCorrection);
-    stringBuffer.append(TEXT_497);
+    stringBuffer.append(TEXT_493);
     for (GenFeature genFeature : genClass.getESetGenFeatures()) {
-    stringBuffer.append(TEXT_498);
+    stringBuffer.append(TEXT_494);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
-    stringBuffer.append(TEXT_499);
+    stringBuffer.append(TEXT_495);
     if (genFeature.isListType()) {
     if (genFeature.isWrappedFeatureMapType()) {
-    stringBuffer.append(TEXT_547);
+    stringBuffer.append(TEXT_543);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMap"));
-    stringBuffer.append(TEXT_274);
+    stringBuffer.append(TEXT_271);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMap"));
-    stringBuffer.append(TEXT_515);
+    stringBuffer.append(TEXT_511);
     stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_548);
+    stringBuffer.append(TEXT_544);
     } else if (genFeature.isFeatureMapType()) {
-    stringBuffer.append(TEXT_547);
+    stringBuffer.append(TEXT_543);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMap"));
     stringBuffer.append(TEXT_67);
     stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_549);
+    stringBuffer.append(TEXT_545);
     } else if (genFeature.isMapType()) {
     if (genFeature.isEffectiveSuppressEMFTypes()) {
-    stringBuffer.append(TEXT_547);
+    stringBuffer.append(TEXT_543);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EStructuralFeature"));
-    stringBuffer.append(TEXT_550);
+    stringBuffer.append(TEXT_546);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.util.EMap"));
-    stringBuffer.append(TEXT_501);
+    stringBuffer.append(TEXT_497);
     stringBuffer.append(genFeature.getImportedMapTemplateArguments(genClass));
     stringBuffer.append(TEXT_86);
     stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_551);
-    } else {
     stringBuffer.append(TEXT_547);
+    } else {
+    stringBuffer.append(TEXT_543);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EStructuralFeature"));
-    stringBuffer.append(TEXT_552);
+    stringBuffer.append(TEXT_548);
+    stringBuffer.append(genFeature.getGetAccessor());
+    stringBuffer.append(TEXT_545);
+    }
+    } else {
+    stringBuffer.append(TEXT_235);
     stringBuffer.append(genFeature.getGetAccessor());
     stringBuffer.append(TEXT_549);
-    }
-    } else {
-    stringBuffer.append(TEXT_238);
     stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_553);
-    stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_554);
+    stringBuffer.append(TEXT_550);
     stringBuffer.append(genModel.getImportedName("java.util.Collection"));
     if (isJDK50) {
-    stringBuffer.append(TEXT_555);
+    stringBuffer.append(TEXT_551);
     stringBuffer.append(genFeature.getListItemType(genClass));
-    stringBuffer.append(TEXT_556);
+    stringBuffer.append(TEXT_552);
     }
-    stringBuffer.append(TEXT_557);
+    stringBuffer.append(TEXT_553);
     }
     } else if (!isJDK50 && genFeature.isPrimitiveType()) {
-    stringBuffer.append(TEXT_558);
+    stringBuffer.append(TEXT_554);
     stringBuffer.append(genFeature.getAccessorName());
-    stringBuffer.append(TEXT_559);
+    stringBuffer.append(TEXT_555);
     stringBuffer.append(genFeature.getObjectType(genClass));
-    stringBuffer.append(TEXT_560);
+    stringBuffer.append(TEXT_556);
     stringBuffer.append(genFeature.getPrimitiveValueFunction());
-    stringBuffer.append(TEXT_533);
+    stringBuffer.append(TEXT_529);
     } else {
-    stringBuffer.append(TEXT_558);
+    stringBuffer.append(TEXT_554);
     stringBuffer.append(genFeature.getAccessorName());
     stringBuffer.append(TEXT_93);
     if (genFeature.getTypeGenDataType() == null || !genFeature.getTypeGenDataType().isObjectType() || !genFeature.getRawType().equals(genFeature.getType(genClass))) {
@@ -4559,15 +4547,15 @@
     stringBuffer.append(genFeature.getObjectType(genClass));
     stringBuffer.append(TEXT_86);
     }
-    stringBuffer.append(TEXT_561);
+    stringBuffer.append(TEXT_557);
     }
-    stringBuffer.append(TEXT_562);
+    stringBuffer.append(TEXT_558);
     }
-    stringBuffer.append(TEXT_373);
+    stringBuffer.append(TEXT_370);
     if (genModel.isMinimalReflectiveMethods()) {
-    stringBuffer.append(TEXT_563);
+    stringBuffer.append(TEXT_559);
     } else {
-    stringBuffer.append(TEXT_564);
+    stringBuffer.append(TEXT_560);
     }
     stringBuffer.append(TEXT_176);
     }
@@ -4576,53 +4564,53 @@
     if (genModel.useClassOverrideAnnotation()) {
     stringBuffer.append(TEXT_124);
     }
-    stringBuffer.append(TEXT_565);
+    stringBuffer.append(TEXT_561);
     stringBuffer.append(negativeOffsetCorrection);
-    stringBuffer.append(TEXT_497);
+    stringBuffer.append(TEXT_493);
     for (GenFeature genFeature : genClass.getEUnsetGenFeatures()) {
-    stringBuffer.append(TEXT_498);
+    stringBuffer.append(TEXT_494);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
-    stringBuffer.append(TEXT_499);
+    stringBuffer.append(TEXT_495);
     if (genFeature.isListType() && !genFeature.isUnsettable()) {
     if (genFeature.isWrappedFeatureMapType()) {
-    stringBuffer.append(TEXT_547);
+    stringBuffer.append(TEXT_543);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMap"));
-    stringBuffer.append(TEXT_515);
+    stringBuffer.append(TEXT_511);
     stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_566);
+    stringBuffer.append(TEXT_562);
     } else {
-    stringBuffer.append(TEXT_238);
+    stringBuffer.append(TEXT_235);
     stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_567);
+    stringBuffer.append(TEXT_563);
     }
     } else if (genFeature.isUnsettable()) {
-    stringBuffer.append(TEXT_568);
+    stringBuffer.append(TEXT_564);
     stringBuffer.append(genFeature.getAccessorName());
-    stringBuffer.append(TEXT_229);
+    stringBuffer.append(TEXT_226);
     } else if (!genFeature.hasEDefault()) {
-    stringBuffer.append(TEXT_558);
+    stringBuffer.append(TEXT_554);
     stringBuffer.append(genFeature.getAccessorName());
-    stringBuffer.append(TEXT_273);
+    stringBuffer.append(TEXT_270);
     stringBuffer.append(genFeature.getImportedType(genClass));
-    stringBuffer.append(TEXT_569);
+    stringBuffer.append(TEXT_565);
     } else if (genFeature.hasSettingDelegate()) {
-    stringBuffer.append(TEXT_238);
+    stringBuffer.append(TEXT_235);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_417);
+    stringBuffer.append(TEXT_413);
     } else {
-    stringBuffer.append(TEXT_558);
+    stringBuffer.append(TEXT_554);
     stringBuffer.append(genFeature.getAccessorName());
     stringBuffer.append(TEXT_93);
     stringBuffer.append(genFeature.getEDefault());
     stringBuffer.append(TEXT_146);
     }
-    stringBuffer.append(TEXT_562);
+    stringBuffer.append(TEXT_558);
     }
-    stringBuffer.append(TEXT_373);
+    stringBuffer.append(TEXT_370);
     if (genModel.isMinimalReflectiveMethods()) {
-    stringBuffer.append(TEXT_570);
+    stringBuffer.append(TEXT_566);
     } else {
-    stringBuffer.append(TEXT_571);
+    stringBuffer.append(TEXT_567);
     }
     stringBuffer.append(TEXT_176);
     //Class/eUnset.override.javajetinc
@@ -4639,48 +4627,48 @@
     if (genModel.useClassOverrideAnnotation()) {
     stringBuffer.append(TEXT_124);
     }
-    stringBuffer.append(TEXT_572);
+    stringBuffer.append(TEXT_568);
     stringBuffer.append(negativeOffsetCorrection);
-    stringBuffer.append(TEXT_497);
+    stringBuffer.append(TEXT_493);
     for (GenFeature genFeature : genClass.getEIsSetGenFeatures()) { String safeNameAccessor = genFeature.getSafeName(); if ("featureID".equals(safeNameAccessor)) { safeNameAccessor = "this." + safeNameAccessor; }
-    stringBuffer.append(TEXT_498);
+    stringBuffer.append(TEXT_494);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
-    stringBuffer.append(TEXT_499);
+    stringBuffer.append(TEXT_495);
     if (genFeature.hasSettingDelegate()) {
     if (genFeature.isUnsettable()) {
-    stringBuffer.append(TEXT_573);
+    stringBuffer.append(TEXT_569);
     stringBuffer.append(genFeature.getAccessorName());
-    stringBuffer.append(TEXT_229);
+    stringBuffer.append(TEXT_226);
     } else {
-    stringBuffer.append(TEXT_530);
+    stringBuffer.append(TEXT_526);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_440);
+    stringBuffer.append(TEXT_436);
     }
     } else if (genFeature.isListType() && !genFeature.isUnsettable()) {
     if (genFeature.isWrappedFeatureMapType()) {
     if (genFeature.isVolatile()) {
-    stringBuffer.append(TEXT_574);
+    stringBuffer.append(TEXT_570);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMap"));
-    stringBuffer.append(TEXT_515);
+    stringBuffer.append(TEXT_511);
     stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_575);
+    stringBuffer.append(TEXT_571);
     } else {
-    stringBuffer.append(TEXT_530);
+    stringBuffer.append(TEXT_526);
     stringBuffer.append(safeNameAccessor);
-    stringBuffer.append(TEXT_576);
+    stringBuffer.append(TEXT_572);
     stringBuffer.append(safeNameAccessor);
-    stringBuffer.append(TEXT_577);
+    stringBuffer.append(TEXT_573);
     }
     } else {
     if (genClass.isField(genFeature)) {
-    stringBuffer.append(TEXT_530);
+    stringBuffer.append(TEXT_526);
     stringBuffer.append(safeNameAccessor);
-    stringBuffer.append(TEXT_576);
+    stringBuffer.append(TEXT_572);
     stringBuffer.append(safeNameAccessor);
-    stringBuffer.append(TEXT_578);
+    stringBuffer.append(TEXT_574);
     } else {
     if (genFeature.isField() && genClass.getImplementingGenModel(genFeature).isVirtualDelegation()) {
-    stringBuffer.append(TEXT_238);
+    stringBuffer.append(TEXT_235);
     stringBuffer.append(genFeature.getImportedType(genClass));
     stringBuffer.append(TEXT_70);
     stringBuffer.append(safeNameAccessor);
@@ -4689,115 +4677,115 @@
     stringBuffer.append(TEXT_145);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(positiveOffsetCorrection);
-    stringBuffer.append(TEXT_579);
+    stringBuffer.append(TEXT_575);
     stringBuffer.append(safeNameAccessor);
-    stringBuffer.append(TEXT_576);
+    stringBuffer.append(TEXT_572);
     stringBuffer.append(safeNameAccessor);
-    stringBuffer.append(TEXT_578);
+    stringBuffer.append(TEXT_574);
     } else {
-    stringBuffer.append(TEXT_580);
+    stringBuffer.append(TEXT_576);
     stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_581);
+    stringBuffer.append(TEXT_577);
     }
     }
     }
     } else if (genFeature.isUnsettable()) {
-    stringBuffer.append(TEXT_573);
+    stringBuffer.append(TEXT_569);
     stringBuffer.append(genFeature.getAccessorName());
-    stringBuffer.append(TEXT_229);
+    stringBuffer.append(TEXT_226);
     } else if (genFeature.isResolveProxies()) {
     if (genClass.isField(genFeature)) {
-    stringBuffer.append(TEXT_530);
+    stringBuffer.append(TEXT_526);
     stringBuffer.append(safeNameAccessor);
-    stringBuffer.append(TEXT_582);
+    stringBuffer.append(TEXT_578);
     } else {
     if (genFeature.isField() && genClass.getImplementingGenModel(genFeature).isVirtualDelegation()) {
-    stringBuffer.append(TEXT_583);
+    stringBuffer.append(TEXT_579);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(positiveOffsetCorrection);
-    stringBuffer.append(TEXT_584);
+    stringBuffer.append(TEXT_580);
     } else {
-    stringBuffer.append(TEXT_585);
+    stringBuffer.append(TEXT_581);
     stringBuffer.append(genFeature.getAccessorName());
-    stringBuffer.append(TEXT_586);
+    stringBuffer.append(TEXT_582);
     }
     }
     } else if (!genFeature.hasEDefault()) {
     if (genClass.isField(genFeature)) {
-    stringBuffer.append(TEXT_530);
+    stringBuffer.append(TEXT_526);
     stringBuffer.append(safeNameAccessor);
-    stringBuffer.append(TEXT_582);
+    stringBuffer.append(TEXT_578);
     } else {
     if (genFeature.isField() && genClass.getImplementingGenModel(genFeature).isVirtualDelegation()) {
-    stringBuffer.append(TEXT_583);
+    stringBuffer.append(TEXT_579);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(positiveOffsetCorrection);
-    stringBuffer.append(TEXT_584);
+    stringBuffer.append(TEXT_580);
     } else {
-    stringBuffer.append(TEXT_530);
+    stringBuffer.append(TEXT_526);
     stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_586);
+    stringBuffer.append(TEXT_582);
     }
     }
     } else if (genFeature.isPrimitiveType() || genFeature.isEnumType()) {
     if (genClass.isField(genFeature)) {
     if (genClass.isFlag(genFeature)) {
     if (genFeature.isBooleanType()) {
-    stringBuffer.append(TEXT_500);
+    stringBuffer.append(TEXT_496);
     stringBuffer.append(genClass.getFlagsField(genFeature));
-    stringBuffer.append(TEXT_262);
+    stringBuffer.append(TEXT_259);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_587);
+    stringBuffer.append(TEXT_583);
     stringBuffer.append(genFeature.getEDefault());
     stringBuffer.append(TEXT_6);
     } else {
-    stringBuffer.append(TEXT_503);
+    stringBuffer.append(TEXT_499);
     stringBuffer.append(genClass.getFlagsField(genFeature));
-    stringBuffer.append(TEXT_262);
+    stringBuffer.append(TEXT_259);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_588);
+    stringBuffer.append(TEXT_584);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_428);
+    stringBuffer.append(TEXT_424);
     }
     } else {
-    stringBuffer.append(TEXT_530);
+    stringBuffer.append(TEXT_526);
     stringBuffer.append(safeNameAccessor);
-    stringBuffer.append(TEXT_359);
+    stringBuffer.append(TEXT_356);
     stringBuffer.append(genFeature.getEDefault());
     stringBuffer.append(TEXT_6);
     }
     } else {
     if (genFeature.isEnumType() && genFeature.isField() && genClass.getImplementingGenModel(genFeature).isVirtualDelegation()) {
-    stringBuffer.append(TEXT_583);
+    stringBuffer.append(TEXT_579);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(positiveOffsetCorrection);
     stringBuffer.append(TEXT_149);
     stringBuffer.append(genFeature.getEDefault());
-    stringBuffer.append(TEXT_589);
+    stringBuffer.append(TEXT_585);
     stringBuffer.append(genFeature.getEDefault());
     stringBuffer.append(TEXT_6);
     } else {
-    stringBuffer.append(TEXT_530);
+    stringBuffer.append(TEXT_526);
     stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_590);
+    stringBuffer.append(TEXT_586);
     stringBuffer.append(genFeature.getEDefault());
     stringBuffer.append(TEXT_6);
     }
     }
     } else {//datatype
     if (genClass.isField(genFeature)) {
-    stringBuffer.append(TEXT_530);
+    stringBuffer.append(TEXT_526);
     stringBuffer.append(genFeature.getEDefault());
-    stringBuffer.append(TEXT_384);
+    stringBuffer.append(TEXT_381);
     stringBuffer.append(safeNameAccessor);
-    stringBuffer.append(TEXT_591);
+    stringBuffer.append(TEXT_587);
     stringBuffer.append(genFeature.getEDefault());
-    stringBuffer.append(TEXT_592);
+    stringBuffer.append(TEXT_588);
     stringBuffer.append(safeNameAccessor);
     stringBuffer.append(TEXT_146);
     } else {
     if (genFeature.isField() && genClass.getImplementingGenModel(genFeature).isVirtualDelegation()) {
-    stringBuffer.append(TEXT_238);
+    stringBuffer.append(TEXT_235);
     stringBuffer.append(genFeature.getImportedType(genClass));
     stringBuffer.append(TEXT_70);
     stringBuffer.append(safeNameAccessor);
@@ -4808,34 +4796,34 @@
     stringBuffer.append(positiveOffsetCorrection);
     stringBuffer.append(TEXT_149);
     stringBuffer.append(genFeature.getEDefault());
-    stringBuffer.append(TEXT_579);
+    stringBuffer.append(TEXT_575);
     stringBuffer.append(genFeature.getEDefault());
-    stringBuffer.append(TEXT_384);
+    stringBuffer.append(TEXT_381);
     stringBuffer.append(safeNameAccessor);
-    stringBuffer.append(TEXT_591);
+    stringBuffer.append(TEXT_587);
     stringBuffer.append(genFeature.getEDefault());
-    stringBuffer.append(TEXT_592);
+    stringBuffer.append(TEXT_588);
     stringBuffer.append(safeNameAccessor);
     stringBuffer.append(TEXT_146);
     } else {
-    stringBuffer.append(TEXT_530);
+    stringBuffer.append(TEXT_526);
     stringBuffer.append(genFeature.getEDefault());
-    stringBuffer.append(TEXT_384);
+    stringBuffer.append(TEXT_381);
     stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_593);
+    stringBuffer.append(TEXT_589);
     stringBuffer.append(genFeature.getEDefault());
-    stringBuffer.append(TEXT_592);
+    stringBuffer.append(TEXT_588);
     stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_533);
+    stringBuffer.append(TEXT_529);
     }
     }
     }
     }
-    stringBuffer.append(TEXT_373);
+    stringBuffer.append(TEXT_370);
     if (genModel.isMinimalReflectiveMethods()) {
-    stringBuffer.append(TEXT_594);
+    stringBuffer.append(TEXT_590);
     } else {
-    stringBuffer.append(TEXT_595);
+    stringBuffer.append(TEXT_591);
     }
     stringBuffer.append(TEXT_176);
     //Class/eIsSet.override.javajetinc
@@ -4846,122 +4834,122 @@
     if (genModel.useClassOverrideAnnotation()) {
     stringBuffer.append(TEXT_124);
     }
-    stringBuffer.append(TEXT_596);
+    stringBuffer.append(TEXT_592);
     stringBuffer.append(singleWildcard);
-    stringBuffer.append(TEXT_597);
+    stringBuffer.append(TEXT_593);
     for (GenClass mixinGenClass : genClass.getMixinGenClasses()) {
-    stringBuffer.append(TEXT_598);
+    stringBuffer.append(TEXT_594);
     stringBuffer.append(mixinGenClass.getRawImportedInterfaceName());
-    stringBuffer.append(TEXT_599);
+    stringBuffer.append(TEXT_595);
     stringBuffer.append(negativeOffsetCorrection);
-    stringBuffer.append(TEXT_237);
+    stringBuffer.append(TEXT_234);
     for (GenFeature genFeature : mixinGenClass.getGenFeatures()) {
-    stringBuffer.append(TEXT_600);
+    stringBuffer.append(TEXT_596);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
-    stringBuffer.append(TEXT_601);
+    stringBuffer.append(TEXT_597);
     stringBuffer.append(mixinGenClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(TEXT_6);
     }
-    stringBuffer.append(TEXT_602);
+    stringBuffer.append(TEXT_598);
     }
-    stringBuffer.append(TEXT_603);
+    stringBuffer.append(TEXT_599);
     }
-    stringBuffer.append(TEXT_604);
+    stringBuffer.append(TEXT_600);
     if (genModel.useClassOverrideAnnotation()) {
     stringBuffer.append(TEXT_124);
     }
-    stringBuffer.append(TEXT_605);
-    stringBuffer.append(singleWildcard);
-    stringBuffer.append(TEXT_597);
-    for (GenClass mixinGenClass : genClass.getMixinGenClasses()) {
-    stringBuffer.append(TEXT_598);
-    stringBuffer.append(mixinGenClass.getRawImportedInterfaceName());
-    stringBuffer.append(TEXT_606);
-    for (GenFeature genFeature : mixinGenClass.getGenFeatures()) {
-    stringBuffer.append(TEXT_600);
-    stringBuffer.append(mixinGenClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(TEXT_601);
+    stringBuffer.append(singleWildcard);
+    stringBuffer.append(TEXT_593);
+    for (GenClass mixinGenClass : genClass.getMixinGenClasses()) {
+    stringBuffer.append(TEXT_594);
+    stringBuffer.append(mixinGenClass.getRawImportedInterfaceName());
+    stringBuffer.append(TEXT_602);
+    for (GenFeature genFeature : mixinGenClass.getGenFeatures()) {
+    stringBuffer.append(TEXT_596);
+    stringBuffer.append(mixinGenClass.getQualifiedFeatureID(genFeature));
+    stringBuffer.append(TEXT_597);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(positiveOffsetCorrection);
     stringBuffer.append(TEXT_6);
     }
-    stringBuffer.append(TEXT_602);
+    stringBuffer.append(TEXT_598);
     }
     if (genClass.hasOffsetCorrection() && !genClass.getGenFeatures().isEmpty()) {
-    stringBuffer.append(TEXT_598);
+    stringBuffer.append(TEXT_594);
     stringBuffer.append(genClass.getRawImportedInterfaceName());
-    stringBuffer.append(TEXT_607);
+    stringBuffer.append(TEXT_603);
     stringBuffer.append(negativeOffsetCorrection);
-    stringBuffer.append(TEXT_237);
+    stringBuffer.append(TEXT_234);
     for (GenFeature genFeature : genClass.getGenFeatures()) {
-    stringBuffer.append(TEXT_600);
+    stringBuffer.append(TEXT_596);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
-    stringBuffer.append(TEXT_601);
+    stringBuffer.append(TEXT_597);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(positiveOffsetCorrection);
     stringBuffer.append(TEXT_6);
     }
-    stringBuffer.append(TEXT_602);
+    stringBuffer.append(TEXT_598);
     }
-    stringBuffer.append(TEXT_608);
+    stringBuffer.append(TEXT_604);
     }
     if (genModel.isOperationReflection() && isImplementation && (!genClass.getMixinGenOperations().isEmpty() || !genClass.getOverrideGenOperations(genClass.getExtendedGenOperations(), genClass.getImplementedGenOperations()).isEmpty() || genClass.hasOffsetCorrection() && !genClass.getGenOperations().isEmpty())) {
     stringBuffer.append(TEXT_128);
     if (genModel.useClassOverrideAnnotation()) {
     stringBuffer.append(TEXT_124);
     }
-    stringBuffer.append(TEXT_609);
+    stringBuffer.append(TEXT_605);
     stringBuffer.append(singleWildcard);
-    stringBuffer.append(TEXT_597);
+    stringBuffer.append(TEXT_593);
     for (GenClass extendedGenClass : genClass.getExtendedGenClasses()) { List<GenOperation> extendedImplementedGenOperations = extendedGenClass.getImplementedGenOperations(); List<GenOperation> implementedGenOperations = genClass.getImplementedGenOperations();
     if (!genClass.getOverrideGenOperations(extendedImplementedGenOperations, implementedGenOperations).isEmpty()) {
-    stringBuffer.append(TEXT_598);
+    stringBuffer.append(TEXT_594);
     stringBuffer.append(extendedGenClass.getRawImportedInterfaceName());
-    stringBuffer.append(TEXT_610);
+    stringBuffer.append(TEXT_606);
     for (GenOperation genOperation : extendedImplementedGenOperations) { GenOperation overrideGenOperation = genClass.getOverrideGenOperation(genOperation);
     if (implementedGenOperations.contains(overrideGenOperation)) {
-    stringBuffer.append(TEXT_600);
+    stringBuffer.append(TEXT_596);
     stringBuffer.append(extendedGenClass.getQualifiedOperationID(genOperation));
-    stringBuffer.append(TEXT_601);
+    stringBuffer.append(TEXT_597);
     stringBuffer.append(genClass.getQualifiedOperationID(overrideGenOperation));
     stringBuffer.append(positiveOperationOffsetCorrection);
     stringBuffer.append(TEXT_6);
     }
     }
-    stringBuffer.append(TEXT_611);
+    stringBuffer.append(TEXT_607);
     }
     }
     for (GenClass mixinGenClass : genClass.getMixinGenClasses()) {
-    stringBuffer.append(TEXT_598);
+    stringBuffer.append(TEXT_594);
     stringBuffer.append(mixinGenClass.getRawImportedInterfaceName());
-    stringBuffer.append(TEXT_610);
+    stringBuffer.append(TEXT_606);
     for (GenOperation genOperation : mixinGenClass.getGenOperations()) { GenOperation overrideGenOperation = genClass.getOverrideGenOperation(genOperation);
-    stringBuffer.append(TEXT_600);
+    stringBuffer.append(TEXT_596);
     stringBuffer.append(mixinGenClass.getQualifiedOperationID(genOperation));
-    stringBuffer.append(TEXT_601);
+    stringBuffer.append(TEXT_597);
     stringBuffer.append(genClass.getQualifiedOperationID(overrideGenOperation != null ? overrideGenOperation : genOperation));
     stringBuffer.append(positiveOperationOffsetCorrection);
     stringBuffer.append(TEXT_6);
     }
-    stringBuffer.append(TEXT_602);
+    stringBuffer.append(TEXT_598);
     }
     if (genClass.hasOffsetCorrection() && !genClass.getGenOperations().isEmpty()) {
-    stringBuffer.append(TEXT_598);
+    stringBuffer.append(TEXT_594);
     stringBuffer.append(genClass.getRawImportedInterfaceName());
-    stringBuffer.append(TEXT_612);
+    stringBuffer.append(TEXT_608);
     stringBuffer.append(negativeOperationOffsetCorrection);
-    stringBuffer.append(TEXT_237);
+    stringBuffer.append(TEXT_234);
     for (GenOperation genOperation : genClass.getGenOperations()) {
-    stringBuffer.append(TEXT_600);
+    stringBuffer.append(TEXT_596);
     stringBuffer.append(genClass.getQualifiedOperationID(genOperation));
-    stringBuffer.append(TEXT_601);
+    stringBuffer.append(TEXT_597);
     stringBuffer.append(genClass.getQualifiedOperationID(genOperation));
     stringBuffer.append(positiveOperationOffsetCorrection);
     stringBuffer.append(TEXT_6);
     }
-    stringBuffer.append(TEXT_602);
+    stringBuffer.append(TEXT_598);
     }
-    stringBuffer.append(TEXT_613);
+    stringBuffer.append(TEXT_609);
     }
     if (isImplementation && genModel.isVirtualDelegation()) { String eVirtualValuesField = genClass.getEVirtualValuesField();
     if (eVirtualValuesField != null) {
@@ -4969,15 +4957,15 @@
     if (genModel.useClassOverrideAnnotation()) {
     stringBuffer.append(TEXT_124);
     }
-    stringBuffer.append(TEXT_614);
+    stringBuffer.append(TEXT_610);
     stringBuffer.append(eVirtualValuesField);
-    stringBuffer.append(TEXT_615);
+    stringBuffer.append(TEXT_611);
     if (genModel.useClassOverrideAnnotation()) {
     stringBuffer.append(TEXT_124);
     }
-    stringBuffer.append(TEXT_616);
+    stringBuffer.append(TEXT_612);
     stringBuffer.append(eVirtualValuesField);
-    stringBuffer.append(TEXT_617);
+    stringBuffer.append(TEXT_613);
     }
     { List<String> eVirtualIndexBitFields = genClass.getEVirtualIndexBitFields(new ArrayList<String>());
     if (!eVirtualIndexBitFields.isEmpty()) { List<String> allEVirtualIndexBitFields = genClass.getAllEVirtualIndexBitFields(new ArrayList<String>());
@@ -4985,27 +4973,27 @@
     if (genModel.useClassOverrideAnnotation()) {
     stringBuffer.append(TEXT_124);
     }
-    stringBuffer.append(TEXT_618);
+    stringBuffer.append(TEXT_614);
     for (int i = 0; i < allEVirtualIndexBitFields.size(); i++) {
-    stringBuffer.append(TEXT_498);
+    stringBuffer.append(TEXT_494);
     stringBuffer.append(i);
-    stringBuffer.append(TEXT_619);
+    stringBuffer.append(TEXT_615);
     stringBuffer.append(allEVirtualIndexBitFields.get(i));
     stringBuffer.append(TEXT_6);
     }
-    stringBuffer.append(TEXT_620);
+    stringBuffer.append(TEXT_616);
     if (genModel.useClassOverrideAnnotation()) {
     stringBuffer.append(TEXT_124);
     }
-    stringBuffer.append(TEXT_621);
+    stringBuffer.append(TEXT_617);
     for (int i = 0; i < allEVirtualIndexBitFields.size(); i++) {
-    stringBuffer.append(TEXT_498);
+    stringBuffer.append(TEXT_494);
     stringBuffer.append(i);
-    stringBuffer.append(TEXT_622);
+    stringBuffer.append(TEXT_618);
     stringBuffer.append(allEVirtualIndexBitFields.get(i));
-    stringBuffer.append(TEXT_623);
+    stringBuffer.append(TEXT_619);
     }
-    stringBuffer.append(TEXT_624);
+    stringBuffer.append(TEXT_620);
     }
     }
     }
@@ -5017,32 +5005,32 @@
     if (genModel.useGenerics()) {
     boolean isUnchecked = false; boolean isRaw = false; LOOP: for (GenOperation genOperation : (genModel.isMinimalReflectiveMethods() ? genClass.getImplementedGenOperations() : genClass.getAllGenOperations())) { for (GenParameter genParameter : genOperation.getGenParameters()) { if (genParameter.isUncheckedCast()) { if (genParameter.getTypeGenDataType() == null || !genParameter.getTypeGenDataType().isObjectType()) { isUnchecked = true; } if (genParameter.usesOperationTypeParameters() && !genParameter.getEcoreParameter().getEGenericType().getETypeArguments().isEmpty()) { isRaw = true; break LOOP; }}}}
     if (isUnchecked) {
-    stringBuffer.append(TEXT_625);
+    stringBuffer.append(TEXT_621);
     if (!isRaw) {
-    stringBuffer.append(TEXT_626);
+    stringBuffer.append(TEXT_622);
     } else {
-    stringBuffer.append(TEXT_627);
+    stringBuffer.append(TEXT_623);
     }
     stringBuffer.append(TEXT_86);
     }
     }
-    stringBuffer.append(TEXT_628);
+    stringBuffer.append(TEXT_624);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.util.EList"));
     stringBuffer.append(singleWildcard);
-    stringBuffer.append(TEXT_629);
+    stringBuffer.append(TEXT_625);
     stringBuffer.append(genModel.getImportedName(isGWT ? "org.eclipse.emf.common.util.InvocationTargetException" : "java.lang.reflect.InvocationTargetException"));
-    stringBuffer.append(TEXT_630);
+    stringBuffer.append(TEXT_626);
     stringBuffer.append(negativeOperationOffsetCorrection);
-    stringBuffer.append(TEXT_497);
+    stringBuffer.append(TEXT_493);
     for (GenOperation genOperation : (genModel.isMinimalReflectiveMethods() ? genClass.getImplementedGenOperations() : genClass.getAllGenOperations())) { List<GenParameter> genParameters = genOperation.getGenParameters(); int size = genParameters.size();  boolean hasCheckedException = genOperation.hasCheckedException(); String indent = hasCheckedException ? "\t" : ""; GenOperation overrideGenOperation = genClass.getOverrideGenOperation(genOperation);
-    stringBuffer.append(TEXT_498);
+    stringBuffer.append(TEXT_494);
     stringBuffer.append(genClass.getQualifiedOperationID(overrideGenOperation != null ? overrideGenOperation : genOperation));
-    stringBuffer.append(TEXT_499);
+    stringBuffer.append(TEXT_495);
     if (hasCheckedException) {
-    stringBuffer.append(TEXT_631);
+    stringBuffer.append(TEXT_627);
     /*}*/}
     if (genOperation.isVoid()) {
-    stringBuffer.append(TEXT_238);
+    stringBuffer.append(TEXT_235);
     stringBuffer.append(indent);
     stringBuffer.append(genOperation.getName());
     stringBuffer.append(TEXT_93);
@@ -5055,11 +5043,11 @@
     stringBuffer.append(genParameter.usesOperationTypeParameters() ? genParameter.getRawImportedType() : genParameter.getObjectType(genClass));
     stringBuffer.append(TEXT_86);
     }
-    stringBuffer.append(TEXT_632);
+    stringBuffer.append(TEXT_628);
     stringBuffer.append(i);
     stringBuffer.append(TEXT_86);
     if (!isJDK50 && genParameter.isPrimitiveType()) {
-    stringBuffer.append(TEXT_221);
+    stringBuffer.append(TEXT_218);
     stringBuffer.append(genParameter.getPrimitiveValueFunction());
     stringBuffer.append(TEXT_21);
     }
@@ -5067,15 +5055,15 @@
     stringBuffer.append(TEXT_149);
     }
     }
-    stringBuffer.append(TEXT_633);
+    stringBuffer.append(TEXT_629);
     stringBuffer.append(indent);
-    stringBuffer.append(TEXT_634);
+    stringBuffer.append(TEXT_630);
     } else {
-    stringBuffer.append(TEXT_238);
+    stringBuffer.append(TEXT_235);
     stringBuffer.append(indent);
-    stringBuffer.append(TEXT_635);
+    stringBuffer.append(TEXT_631);
     if (!isJDK50 && genOperation.isPrimitiveType()) {
-    stringBuffer.append(TEXT_343);
+    stringBuffer.append(TEXT_340);
     stringBuffer.append(genOperation.getObjectType(genClass));
     stringBuffer.append(TEXT_93);
     }
@@ -5090,11 +5078,11 @@
     stringBuffer.append(genParameter.usesOperationTypeParameters() ? genParameter.getRawImportedType() : genParameter.getObjectType(genClass));
     stringBuffer.append(TEXT_86);
     }
-    stringBuffer.append(TEXT_632);
+    stringBuffer.append(TEXT_628);
     stringBuffer.append(i);
     stringBuffer.append(TEXT_86);
     if (!isJDK50 && genParameter.isPrimitiveType()) {
-    stringBuffer.append(TEXT_221);
+    stringBuffer.append(TEXT_218);
     stringBuffer.append(genParameter.getPrimitiveValueFunction());
     stringBuffer.append(TEXT_21);
     }
@@ -5109,18 +5097,18 @@
     stringBuffer.append(TEXT_6);
     }
     if (hasCheckedException) {/*{*/
-    stringBuffer.append(TEXT_636);
+    stringBuffer.append(TEXT_632);
     stringBuffer.append(genModel.getImportedName("java.lang.Throwable"));
-    stringBuffer.append(TEXT_637);
+    stringBuffer.append(TEXT_633);
     stringBuffer.append(genModel.getImportedName(isGWT ? "org.eclipse.emf.common.util.InvocationTargetException" : "java.lang.reflect.InvocationTargetException"));
-    stringBuffer.append(TEXT_638);
+    stringBuffer.append(TEXT_634);
     }
     }
-    stringBuffer.append(TEXT_373);
+    stringBuffer.append(TEXT_370);
     if (genModel.isMinimalReflectiveMethods()) {
-    stringBuffer.append(TEXT_639);
+    stringBuffer.append(TEXT_635);
     } else {
-    stringBuffer.append(TEXT_640);
+    stringBuffer.append(TEXT_636);
     }
     stringBuffer.append(TEXT_176);
     }
@@ -5129,33 +5117,33 @@
     if (genModel.useClassOverrideAnnotation()) {
     stringBuffer.append(TEXT_124);
     }
-    stringBuffer.append(TEXT_641);
+    stringBuffer.append(TEXT_637);
     stringBuffer.append(genModel.useGenerics() ? "StringBuilder" : "StringBuffer");
-    stringBuffer.append(TEXT_642);
+    stringBuffer.append(TEXT_638);
     stringBuffer.append(genModel.useGenerics() ? "StringBuilder" : "StringBuffer");
-    stringBuffer.append(TEXT_643);
+    stringBuffer.append(TEXT_639);
     { boolean first = true;
     for (GenFeature genFeature : genClass.getToStringGenFeatures()) {
     if (first) { first = false;
-    stringBuffer.append(TEXT_644);
+    stringBuffer.append(TEXT_640);
     stringBuffer.append(genFeature.getName());
-    stringBuffer.append(TEXT_645);
+    stringBuffer.append(TEXT_641);
     stringBuffer.append(genModel.getNonNLS());
     } else {
-    stringBuffer.append(TEXT_646);
+    stringBuffer.append(TEXT_642);
     stringBuffer.append(genFeature.getName());
-    stringBuffer.append(TEXT_645);
+    stringBuffer.append(TEXT_641);
     stringBuffer.append(genModel.getNonNLS());
     }
     if (genFeature.isUnsettable() && !genFeature.isListType()) {
     if (genModel.isVirtualDelegation() && !genFeature.isPrimitiveType()) {
-    stringBuffer.append(TEXT_647);
+    stringBuffer.append(TEXT_643);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(positiveOffsetCorrection);
-    stringBuffer.append(TEXT_648);
+    stringBuffer.append(TEXT_644);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(positiveOffsetCorrection);
-    stringBuffer.append(TEXT_649);
+    stringBuffer.append(TEXT_645);
     stringBuffer.append(genModel.getNonNLS());
     } else {
     if (genClass.isFlag(genFeature)) {
@@ -5164,40 +5152,40 @@
     if (genClass.isESetFlag(genFeature)) {
     stringBuffer.append(TEXT_93);
     stringBuffer.append(genClass.getESetFlagsField(genFeature));
-    stringBuffer.append(TEXT_262);
+    stringBuffer.append(TEXT_259);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_650);
+    stringBuffer.append(TEXT_646);
     } else {
     stringBuffer.append(genFeature.getUncapName());
-    stringBuffer.append(TEXT_329);
+    stringBuffer.append(TEXT_326);
     }
-    stringBuffer.append(TEXT_651);
+    stringBuffer.append(TEXT_647);
     stringBuffer.append(genClass.getFlagsField(genFeature));
-    stringBuffer.append(TEXT_262);
+    stringBuffer.append(TEXT_259);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_652);
+    stringBuffer.append(TEXT_648);
     stringBuffer.append(genModel.getNonNLS());
     } else {
     stringBuffer.append(TEXT_136);
     if (genClass.isESetFlag(genFeature)) {
     stringBuffer.append(TEXT_93);
     stringBuffer.append(genClass.getESetFlagsField(genFeature));
+    stringBuffer.append(TEXT_259);
+    stringBuffer.append(genFeature.getUpperName());
+    stringBuffer.append(TEXT_646);
+    } else {
+    stringBuffer.append(genFeature.getUncapName());
+    stringBuffer.append(TEXT_326);
+    }
+    stringBuffer.append(TEXT_649);
+    stringBuffer.append(genFeature.getUpperName());
+    stringBuffer.append(TEXT_261);
+    stringBuffer.append(genClass.getFlagsField(genFeature));
+    stringBuffer.append(TEXT_259);
+    stringBuffer.append(genFeature.getUpperName());
     stringBuffer.append(TEXT_262);
     stringBuffer.append(genFeature.getUpperName());
     stringBuffer.append(TEXT_650);
-    } else {
-    stringBuffer.append(genFeature.getUncapName());
-    stringBuffer.append(TEXT_329);
-    }
-    stringBuffer.append(TEXT_653);
-    stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_264);
-    stringBuffer.append(genClass.getFlagsField(genFeature));
-    stringBuffer.append(TEXT_262);
-    stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_265);
-    stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_654);
     stringBuffer.append(genModel.getNonNLS());
     }
     } else {
@@ -5205,50 +5193,50 @@
     if (genClass.isESetFlag(genFeature)) {
     stringBuffer.append(TEXT_93);
     stringBuffer.append(genClass.getESetFlagsField(genFeature));
-    stringBuffer.append(TEXT_262);
+    stringBuffer.append(TEXT_259);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_650);
+    stringBuffer.append(TEXT_646);
     } else {
     stringBuffer.append(genFeature.getUncapName());
-    stringBuffer.append(TEXT_329);
+    stringBuffer.append(TEXT_326);
     }
-    stringBuffer.append(TEXT_653);
+    stringBuffer.append(TEXT_649);
     stringBuffer.append(genFeature.getSafeName());
-    stringBuffer.append(TEXT_655);
+    stringBuffer.append(TEXT_651);
     stringBuffer.append(genModel.getNonNLS());
     }
     }
     } else {
     if (genModel.isVirtualDelegation() && !genFeature.isPrimitiveType()) {
-    stringBuffer.append(TEXT_656);
+    stringBuffer.append(TEXT_652);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(positiveOffsetCorrection);
     if (!genFeature.isListType() && !genFeature.isReferenceType()){
     stringBuffer.append(TEXT_149);
     stringBuffer.append(genFeature.getEDefault());
     }
-    stringBuffer.append(TEXT_259);
+    stringBuffer.append(TEXT_256);
     } else {
     if (genClass.isFlag(genFeature)) {
     if (genFeature.isBooleanType()) {
-    stringBuffer.append(TEXT_657);
+    stringBuffer.append(TEXT_653);
     stringBuffer.append(genClass.getFlagsField(genFeature));
-    stringBuffer.append(TEXT_262);
+    stringBuffer.append(TEXT_259);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_658);
+    stringBuffer.append(TEXT_654);
     } else {
-    stringBuffer.append(TEXT_659);
+    stringBuffer.append(TEXT_655);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_264);
+    stringBuffer.append(TEXT_261);
     stringBuffer.append(genClass.getFlagsField(genFeature));
+    stringBuffer.append(TEXT_259);
+    stringBuffer.append(genFeature.getUpperName());
     stringBuffer.append(TEXT_262);
     stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_265);
-    stringBuffer.append(genFeature.getUpperName());
-    stringBuffer.append(TEXT_660);
+    stringBuffer.append(TEXT_656);
     }
     } else {
-    stringBuffer.append(TEXT_659);
+    stringBuffer.append(TEXT_655);
     stringBuffer.append(genFeature.getSafeName());
     stringBuffer.append(TEXT_146);
     }
@@ -5256,7 +5244,7 @@
     }
     }
     }
-    stringBuffer.append(TEXT_661);
+    stringBuffer.append(TEXT_657);
     }
     if (isImplementation && genClass.isMapEntry()) { GenFeature keyFeature = genClass.getMapEntryKeyFeature(); GenFeature valueFeature = genClass.getMapEntryValueFeature();
     String objectType = genModel.getImportedName("java.lang.Object");
@@ -5268,57 +5256,71 @@
     stringBuffer.append(TEXT_43);
     stringBuffer.append(genModel.getImportedName("com.google.gwt.user.client.rpc.GwtTransient"));
     }
-    stringBuffer.append(TEXT_662);
+    stringBuffer.append(TEXT_658);
     if (useInterfaceOverrideAnnotation) {
     stringBuffer.append(TEXT_124);
     }
-    stringBuffer.append(TEXT_663);
+    stringBuffer.append(TEXT_659);
     stringBuffer.append(objectType);
+    stringBuffer.append(TEXT_660);
+    if (useInterfaceOverrideAnnotation) {
+    stringBuffer.append(TEXT_124);
+    }
+    stringBuffer.append(TEXT_661);
+    if (useInterfaceOverrideAnnotation) {
+    stringBuffer.append(TEXT_124);
+    }
+    stringBuffer.append(TEXT_131);
+    stringBuffer.append(keyType);
+    stringBuffer.append(TEXT_662);
+    if (!isJDK50 && keyFeature.isPrimitiveType()) {
+    stringBuffer.append(TEXT_269);
+    stringBuffer.append(keyFeature.getObjectType(genClass));
+    stringBuffer.append(TEXT_663);
+    } else {
     stringBuffer.append(TEXT_664);
+    }
+    stringBuffer.append(TEXT_123);
     if (useInterfaceOverrideAnnotation) {
     stringBuffer.append(TEXT_124);
     }
     stringBuffer.append(TEXT_665);
-    if (useInterfaceOverrideAnnotation) {
-    stringBuffer.append(TEXT_124);
-    }
-    stringBuffer.append(TEXT_131);
     stringBuffer.append(keyType);
     stringBuffer.append(TEXT_666);
-    if (!isJDK50 && keyFeature.isPrimitiveType()) {
-    stringBuffer.append(TEXT_272);
-    stringBuffer.append(keyFeature.getObjectType(genClass));
-    stringBuffer.append(TEXT_667);
-    } else {
-    stringBuffer.append(TEXT_668);
-    }
-    stringBuffer.append(TEXT_123);
-    if (useInterfaceOverrideAnnotation) {
-    stringBuffer.append(TEXT_124);
-    }
-    stringBuffer.append(TEXT_669);
-    stringBuffer.append(keyType);
-    stringBuffer.append(TEXT_670);
     if (keyFeature.isListType()) {
-    stringBuffer.append(TEXT_671);
+    stringBuffer.append(TEXT_667);
     if (!genModel.useGenerics()) {
     stringBuffer.append(TEXT_93);
     stringBuffer.append(genModel.getImportedName("java.util.Collection"));
     stringBuffer.append(TEXT_86);
     }
-    stringBuffer.append(TEXT_672);
+    stringBuffer.append(TEXT_668);
     } else if (isJDK50) {
-    stringBuffer.append(TEXT_673);
+    stringBuffer.append(TEXT_669);
     } else if (keyFeature.isPrimitiveType()) {
-    stringBuffer.append(TEXT_674);
+    stringBuffer.append(TEXT_670);
     stringBuffer.append(keyFeature.getObjectType(genClass));
-    stringBuffer.append(TEXT_675);
+    stringBuffer.append(TEXT_671);
     stringBuffer.append(keyFeature.getPrimitiveValueFunction());
-    stringBuffer.append(TEXT_533);
+    stringBuffer.append(TEXT_529);
+    } else {
+    stringBuffer.append(TEXT_672);
+    stringBuffer.append(keyFeature.getImportedType(genClass));
+    stringBuffer.append(TEXT_673);
+    }
+    stringBuffer.append(TEXT_123);
+    if (useInterfaceOverrideAnnotation) {
+    stringBuffer.append(TEXT_124);
+    }
+    stringBuffer.append(TEXT_131);
+    stringBuffer.append(valueType);
+    stringBuffer.append(TEXT_674);
+    if (!isJDK50 && valueFeature.isPrimitiveType()) {
+    stringBuffer.append(TEXT_269);
+    stringBuffer.append(valueFeature.getObjectType(genClass));
+    stringBuffer.append(TEXT_675);
     } else {
     stringBuffer.append(TEXT_676);
-    stringBuffer.append(keyFeature.getImportedType(genClass));
-    stringBuffer.append(TEXT_677);
     }
     stringBuffer.append(TEXT_123);
     if (useInterfaceOverrideAnnotation) {
@@ -5326,59 +5328,45 @@
     }
     stringBuffer.append(TEXT_131);
     stringBuffer.append(valueType);
+    stringBuffer.append(TEXT_677);
+    stringBuffer.append(valueType);
     stringBuffer.append(TEXT_678);
-    if (!isJDK50 && valueFeature.isPrimitiveType()) {
-    stringBuffer.append(TEXT_272);
-    stringBuffer.append(valueFeature.getObjectType(genClass));
+    stringBuffer.append(valueType);
     stringBuffer.append(TEXT_679);
-    } else {
-    stringBuffer.append(TEXT_680);
-    }
-    stringBuffer.append(TEXT_123);
-    if (useInterfaceOverrideAnnotation) {
-    stringBuffer.append(TEXT_124);
-    }
-    stringBuffer.append(TEXT_131);
-    stringBuffer.append(valueType);
-    stringBuffer.append(TEXT_681);
-    stringBuffer.append(valueType);
-    stringBuffer.append(TEXT_682);
-    stringBuffer.append(valueType);
-    stringBuffer.append(TEXT_683);
     if (valueFeature.isListType()) {
-    stringBuffer.append(TEXT_684);
+    stringBuffer.append(TEXT_680);
     if (!genModel.useGenerics()) {
     stringBuffer.append(TEXT_93);
     stringBuffer.append(genModel.getImportedName("java.util.Collection"));
     stringBuffer.append(TEXT_86);
     }
-    stringBuffer.append(TEXT_685);
+    stringBuffer.append(TEXT_681);
     } else if (isJDK50) {
-    stringBuffer.append(TEXT_686);
+    stringBuffer.append(TEXT_682);
     } else if (valueFeature.isPrimitiveType()) {
-    stringBuffer.append(TEXT_687);
+    stringBuffer.append(TEXT_683);
     stringBuffer.append(valueFeature.getObjectType(genClass));
-    stringBuffer.append(TEXT_688);
+    stringBuffer.append(TEXT_684);
     stringBuffer.append(valueFeature.getPrimitiveValueFunction());
-    stringBuffer.append(TEXT_533);
+    stringBuffer.append(TEXT_529);
     } else {
-    stringBuffer.append(TEXT_689);
+    stringBuffer.append(TEXT_685);
     stringBuffer.append(valueFeature.getImportedType(genClass));
-    stringBuffer.append(TEXT_690);
+    stringBuffer.append(TEXT_686);
     }
-    stringBuffer.append(TEXT_691);
+    stringBuffer.append(TEXT_687);
     if (genModel.useGenerics()) {
     stringBuffer.append(TEXT_73);
     }
     stringBuffer.append(TEXT_131);
     stringBuffer.append(eMapType);
-    stringBuffer.append(TEXT_692);
+    stringBuffer.append(TEXT_688);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EObject"));
-    stringBuffer.append(TEXT_693);
+    stringBuffer.append(TEXT_689);
     stringBuffer.append(eMapType);
-    stringBuffer.append(TEXT_694);
+    stringBuffer.append(TEXT_690);
     }
-    stringBuffer.append(TEXT_695);
+    stringBuffer.append(TEXT_691);
     stringBuffer.append(isInterface ? " " + genClass.getInterfaceName() : genClass.getClassName());
     // TODO fix the space above
     genModel.emitSortedImports();
diff --git a/plugins/org.eclipse.emf.codegen.ecore/src/org/eclipse/emf/codegen/ecore/templates/model/EnumClass.java b/plugins/org.eclipse.emf.codegen.ecore/src/org/eclipse/emf/codegen/ecore/templates/model/EnumClass.java
index b1d8c22..7f80c5f 100644
--- a/plugins/org.eclipse.emf.codegen.ecore/src/org/eclipse/emf/codegen/ecore/templates/model/EnumClass.java
+++ b/plugins/org.eclipse.emf.codegen.ecore/src/org/eclipse/emf/codegen/ecore/templates/model/EnumClass.java
@@ -58,66 +58,63 @@
   protected final String TEXT_40 = NL;
   protected final String TEXT_41 = NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tpublic static final ";
   protected final String TEXT_42 = " copyright = ";
-  protected final String TEXT_43 = "</b></em>' literal value." + NL + "\t * <!-- begin-user-doc -->";
-  protected final String TEXT_44 = NL + "\t * <p>" + NL + "\t * If the meaning of '<em><b>";
-  protected final String TEXT_45 = "</b></em>' literal object isn't clear," + NL + "\t * there really should be more of a description here..." + NL + "\t * </p>";
-  protected final String TEXT_46 = NL + "\t * <!-- end-user-doc -->";
-  protected final String TEXT_47 = NL + "\t * @model ";
-  protected final String TEXT_48 = NL + "\t *        ";
-  protected final String TEXT_49 = NL + "\t * @model";
-  protected final String TEXT_50 = NL + "\tpublic static final int ";
-  protected final String TEXT_51 = " = ";
-  protected final String TEXT_52 = "</b></em>' literal object." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @see #";
-  protected final String TEXT_53 = NL + "\t * ";
-  protected final String TEXT_54 = NL + "\tpublic static final ";
-  protected final String TEXT_55 = " = new ";
-  protected final String TEXT_56 = ");";
-  protected final String TEXT_57 = NL + "\t/**" + NL + "\t * An array of all the '<em><b>";
-  protected final String TEXT_58 = "</b></em>' enumerators." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tprivate static final ";
-  protected final String TEXT_59 = "[] VALUES_ARRAY =" + NL + "\t\tnew ";
-  protected final String TEXT_60 = "[]" + NL + "\t\t{";
-  protected final String TEXT_61 = NL + "\t\t\t";
-  protected final String TEXT_62 = NL + "\t\t};" + NL + "" + NL + "\t/**" + NL + "\t * A public read-only list of all the '<em><b>";
-  protected final String TEXT_63 = "</b></em>' enumerators." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tpublic static final List";
-  protected final String TEXT_64 = "<";
-  protected final String TEXT_65 = ">";
-  protected final String TEXT_66 = " VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));" + NL + "" + NL + "\t/**" + NL + "\t * Returns the '<em><b>";
-  protected final String TEXT_67 = "</b></em>' literal with the specified literal value." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @param literal the literal." + NL + "\t * @return the matching enumerator or <code>null</code>." + NL + "\t * @generated" + NL + "\t */" + NL + "\tpublic static ";
-  protected final String TEXT_68 = " get(";
-  protected final String TEXT_69 = " literal)" + NL + "\t{" + NL + "\t\tfor (int i = 0; i < VALUES_ARRAY.length; ++i)" + NL + "\t\t{" + NL + "\t\t\t";
-  protected final String TEXT_70 = " result = VALUES_ARRAY[i];" + NL + "\t\t\tif (result.toString().equals(literal))" + NL + "\t\t\t{" + NL + "\t\t\t\treturn result;" + NL + "\t\t\t}" + NL + "\t\t}" + NL + "\t\treturn null;" + NL + "\t}" + NL + "" + NL + "\t/**" + NL + "\t * Returns the '<em><b>";
-  protected final String TEXT_71 = "</b></em>' literal with the specified name." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @param name the name." + NL + "\t * @return the matching enumerator or <code>null</code>." + NL + "\t * @generated" + NL + "\t */" + NL + "\tpublic static ";
-  protected final String TEXT_72 = " getByName(";
-  protected final String TEXT_73 = " name)" + NL + "\t{" + NL + "\t\tfor (int i = 0; i < VALUES_ARRAY.length; ++i)" + NL + "\t\t{" + NL + "\t\t\t";
-  protected final String TEXT_74 = " result = VALUES_ARRAY[i];" + NL + "\t\t\tif (result.getName().equals(name))" + NL + "\t\t\t{" + NL + "\t\t\t\treturn result;" + NL + "\t\t\t}" + NL + "\t\t}" + NL + "\t\treturn null;" + NL + "\t}" + NL + "" + NL + "\t/**" + NL + "\t * Returns the '<em><b>";
-  protected final String TEXT_75 = "</b></em>' literal with the specified integer value." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @param value the integer value." + NL + "\t * @return the matching enumerator or <code>null</code>." + NL + "\t * @generated" + NL + "\t */" + NL + "\tpublic static ";
-  protected final String TEXT_76 = " get(int value)" + NL + "\t{" + NL + "\t\tswitch (value)" + NL + "\t\t{";
-  protected final String TEXT_77 = NL + "\t\t\tcase ";
-  protected final String TEXT_78 = ": return ";
-  protected final String TEXT_79 = NL + "\t\t}" + NL + "\t\treturn null;" + NL + "\t}" + NL;
-  protected final String TEXT_80 = NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tprivate final int value;" + NL + "" + NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tprivate final ";
-  protected final String TEXT_81 = " name;" + NL + "" + NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tprivate final ";
-  protected final String TEXT_82 = " literal;" + NL;
-  protected final String TEXT_83 = NL + "\t/**" + NL + "\t * Only this class can construct instances." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tprivate ";
-  protected final String TEXT_84 = "(int value, ";
-  protected final String TEXT_85 = " name, ";
-  protected final String TEXT_86 = " literal)" + NL + "\t{";
-  protected final String TEXT_87 = NL + "\t\tthis.value = value;" + NL + "\t\tthis.name = name;" + NL + "\t\tthis.literal = literal;";
-  protected final String TEXT_88 = NL + "\t\tsuper(value, name, literal);";
-  protected final String TEXT_89 = NL + "\t}" + NL;
-  protected final String TEXT_90 = NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
-  protected final String TEXT_91 = NL + "\t@Override";
-  protected final String TEXT_92 = NL + "\tpublic int getValue()" + NL + "\t{" + NL + "\t  return value;" + NL + "\t}" + NL + "" + NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
-  protected final String TEXT_93 = NL + "\tpublic ";
-  protected final String TEXT_94 = " getName()" + NL + "\t{" + NL + "\t  return name;" + NL + "\t}" + NL + "" + NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
-  protected final String TEXT_95 = " getLiteral()" + NL + "\t{" + NL + "\t  return literal;" + NL + "\t}" + NL + "" + NL + "\t/**" + NL + "\t * Returns the literal value of the enumerator, which is its string representation." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
-  protected final String TEXT_96 = " toString()" + NL + "\t{" + NL + "\t\treturn literal;" + NL + "\t}" + NL + "\t";
-  protected final String TEXT_97 = NL + "} //";
-  protected final String TEXT_98 = NL + "/**" + NL + " * A private implementation interface used to hide the inheritance from Enumerator." + NL + " * <!-- begin-user-doc -->" + NL + " * <!-- end-user-doc -->" + NL + " * @generated" + NL + " */" + NL + "interface Internal";
-  protected final String TEXT_99 = " extends org.eclipse.emf.common.util.Enumerator" + NL + "{" + NL + "\t// Empty " + NL + "}";
-  protected final String TEXT_100 = NL + "/**" + NL + " * A private implementation class to construct the instances." + NL + " * <!-- begin-user-doc -->" + NL + " * <!-- end-user-doc -->" + NL + " * @generated" + NL + " */" + NL + "class Internal";
-  protected final String TEXT_101 = " extends org.eclipse.emf.common.util.AbstractEnumerator" + NL + "{" + NL + "\t/**" + NL + "\t * Only this class can construct instances." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tprotected Internal";
-  protected final String TEXT_102 = " literal)" + NL + "\t{" + NL + "\t\tsuper(value, name, literal);" + NL + "\t}" + NL + "}";
+  protected final String TEXT_43 = "</b></em>' literal value." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->";
+  protected final String TEXT_44 = NL + "\t * @model ";
+  protected final String TEXT_45 = NL + "\t *        ";
+  protected final String TEXT_46 = NL + "\t * @model";
+  protected final String TEXT_47 = NL + "\tpublic static final int ";
+  protected final String TEXT_48 = " = ";
+  protected final String TEXT_49 = "</b></em>' literal object." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @see #";
+  protected final String TEXT_50 = NL + "\t * ";
+  protected final String TEXT_51 = NL + "\tpublic static final ";
+  protected final String TEXT_52 = " = new ";
+  protected final String TEXT_53 = ");";
+  protected final String TEXT_54 = NL + "\t/**" + NL + "\t * An array of all the '<em><b>";
+  protected final String TEXT_55 = "</b></em>' enumerators." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tprivate static final ";
+  protected final String TEXT_56 = "[] VALUES_ARRAY =" + NL + "\t\tnew ";
+  protected final String TEXT_57 = "[]" + NL + "\t\t{";
+  protected final String TEXT_58 = NL + "\t\t\t";
+  protected final String TEXT_59 = NL + "\t\t};" + NL + "" + NL + "\t/**" + NL + "\t * A public read-only list of all the '<em><b>";
+  protected final String TEXT_60 = "</b></em>' enumerators." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tpublic static final List";
+  protected final String TEXT_61 = "<";
+  protected final String TEXT_62 = ">";
+  protected final String TEXT_63 = " VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));" + NL + "" + NL + "\t/**" + NL + "\t * Returns the '<em><b>";
+  protected final String TEXT_64 = "</b></em>' literal with the specified literal value." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @param literal the literal." + NL + "\t * @return the matching enumerator or <code>null</code>." + NL + "\t * @generated" + NL + "\t */" + NL + "\tpublic static ";
+  protected final String TEXT_65 = " get(";
+  protected final String TEXT_66 = " literal)" + NL + "\t{" + NL + "\t\tfor (int i = 0; i < VALUES_ARRAY.length; ++i)" + NL + "\t\t{" + NL + "\t\t\t";
+  protected final String TEXT_67 = " result = VALUES_ARRAY[i];" + NL + "\t\t\tif (result.toString().equals(literal))" + NL + "\t\t\t{" + NL + "\t\t\t\treturn result;" + NL + "\t\t\t}" + NL + "\t\t}" + NL + "\t\treturn null;" + NL + "\t}" + NL + "" + NL + "\t/**" + NL + "\t * Returns the '<em><b>";
+  protected final String TEXT_68 = "</b></em>' literal with the specified name." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @param name the name." + NL + "\t * @return the matching enumerator or <code>null</code>." + NL + "\t * @generated" + NL + "\t */" + NL + "\tpublic static ";
+  protected final String TEXT_69 = " getByName(";
+  protected final String TEXT_70 = " name)" + NL + "\t{" + NL + "\t\tfor (int i = 0; i < VALUES_ARRAY.length; ++i)" + NL + "\t\t{" + NL + "\t\t\t";
+  protected final String TEXT_71 = " result = VALUES_ARRAY[i];" + NL + "\t\t\tif (result.getName().equals(name))" + NL + "\t\t\t{" + NL + "\t\t\t\treturn result;" + NL + "\t\t\t}" + NL + "\t\t}" + NL + "\t\treturn null;" + NL + "\t}" + NL + "" + NL + "\t/**" + NL + "\t * Returns the '<em><b>";
+  protected final String TEXT_72 = "</b></em>' literal with the specified integer value." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @param value the integer value." + NL + "\t * @return the matching enumerator or <code>null</code>." + NL + "\t * @generated" + NL + "\t */" + NL + "\tpublic static ";
+  protected final String TEXT_73 = " get(int value)" + NL + "\t{" + NL + "\t\tswitch (value)" + NL + "\t\t{";
+  protected final String TEXT_74 = NL + "\t\t\tcase ";
+  protected final String TEXT_75 = ": return ";
+  protected final String TEXT_76 = NL + "\t\t}" + NL + "\t\treturn null;" + NL + "\t}" + NL;
+  protected final String TEXT_77 = NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tprivate final int value;" + NL + "" + NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tprivate final ";
+  protected final String TEXT_78 = " name;" + NL + "" + NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tprivate final ";
+  protected final String TEXT_79 = " literal;" + NL;
+  protected final String TEXT_80 = NL + "\t/**" + NL + "\t * Only this class can construct instances." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tprivate ";
+  protected final String TEXT_81 = "(int value, ";
+  protected final String TEXT_82 = " name, ";
+  protected final String TEXT_83 = " literal)" + NL + "\t{";
+  protected final String TEXT_84 = NL + "\t\tthis.value = value;" + NL + "\t\tthis.name = name;" + NL + "\t\tthis.literal = literal;";
+  protected final String TEXT_85 = NL + "\t\tsuper(value, name, literal);";
+  protected final String TEXT_86 = NL + "\t}" + NL;
+  protected final String TEXT_87 = NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
+  protected final String TEXT_88 = NL + "\t@Override";
+  protected final String TEXT_89 = NL + "\tpublic int getValue()" + NL + "\t{" + NL + "\t  return value;" + NL + "\t}" + NL + "" + NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
+  protected final String TEXT_90 = NL + "\tpublic ";
+  protected final String TEXT_91 = " getName()" + NL + "\t{" + NL + "\t  return name;" + NL + "\t}" + NL + "" + NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
+  protected final String TEXT_92 = " getLiteral()" + NL + "\t{" + NL + "\t  return literal;" + NL + "\t}" + NL + "" + NL + "\t/**" + NL + "\t * Returns the literal value of the enumerator, which is its string representation." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
+  protected final String TEXT_93 = " toString()" + NL + "\t{" + NL + "\t\treturn literal;" + NL + "\t}" + NL + "\t";
+  protected final String TEXT_94 = NL + "} //";
+  protected final String TEXT_95 = NL + "/**" + NL + " * A private implementation interface used to hide the inheritance from Enumerator." + NL + " * <!-- begin-user-doc -->" + NL + " * <!-- end-user-doc -->" + NL + " * @generated" + NL + " */" + NL + "interface Internal";
+  protected final String TEXT_96 = " extends org.eclipse.emf.common.util.Enumerator" + NL + "{" + NL + "\t// Empty " + NL + "}";
+  protected final String TEXT_97 = NL + "/**" + NL + " * A private implementation class to construct the instances." + NL + " * <!-- begin-user-doc -->" + NL + " * <!-- end-user-doc -->" + NL + " * @generated" + NL + " */" + NL + "class Internal";
+  protected final String TEXT_98 = " extends org.eclipse.emf.common.util.AbstractEnumerator" + NL + "{" + NL + "\t/**" + NL + "\t * Only this class can construct instances." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tprotected Internal";
+  protected final String TEXT_99 = " literal)" + NL + "\t{" + NL + "\t\tsuper(value, name, literal);" + NL + "\t}" + NL + "}";
 
   public String generate(Object argument)
   {
@@ -250,12 +247,6 @@
     stringBuffer.append(TEXT_26);
     stringBuffer.append(genEnumLiteral.getFormattedName());
     stringBuffer.append(TEXT_43);
-    if (!genEnumLiteral.hasDocumentation()) {
-    stringBuffer.append(TEXT_44);
-    stringBuffer.append(genEnumLiteral.getFormattedName());
-    stringBuffer.append(TEXT_45);
-    }
-    stringBuffer.append(TEXT_46);
     if (genEnumLiteral.hasDocumentation()) {
     stringBuffer.append(TEXT_28);
     stringBuffer.append(genEnumLiteral.getDocumentation(genModel.getIndentation(stringBuffer)));
@@ -264,42 +255,42 @@
     stringBuffer.append(TEXT_30);
     stringBuffer.append(genEnumLiteral.getEnumLiteralInstanceConstantName());
     if (!genModel.isSuppressEMFModelTags()) { boolean first = true; for (StringTokenizer stringTokenizer = new StringTokenizer(genEnumLiteral.getModelInfo(), "\n\r"); stringTokenizer.hasMoreTokens(); ) { String modelInfo = stringTokenizer.nextToken(); if (first) { first = false;
-    stringBuffer.append(TEXT_47);
+    stringBuffer.append(TEXT_44);
     stringBuffer.append(modelInfo);
     } else {
-    stringBuffer.append(TEXT_48);
+    stringBuffer.append(TEXT_45);
     stringBuffer.append(modelInfo);
     }} if (first) {
-    stringBuffer.append(TEXT_49);
+    stringBuffer.append(TEXT_46);
     }}
     stringBuffer.append(TEXT_31);
     if (isJDK50 && genEnumLiteral.hasAPIDeprecatedTag()) {
     stringBuffer.append(TEXT_32);
     }
-    stringBuffer.append(TEXT_50);
+    stringBuffer.append(TEXT_47);
     stringBuffer.append(genEnumLiteral.getEnumLiteralValueConstantName());
-    stringBuffer.append(TEXT_51);
+    stringBuffer.append(TEXT_48);
     stringBuffer.append(genEnumLiteral.getValue());
     stringBuffer.append(TEXT_5);
     }
     if (!isEnum) for (GenEnumLiteral genEnumLiteral : genEnum.getGenEnumLiterals()) {
     stringBuffer.append(TEXT_26);
     stringBuffer.append(genEnumLiteral.getFormattedName());
-    stringBuffer.append(TEXT_52);
+    stringBuffer.append(TEXT_49);
     stringBuffer.append(genEnumLiteral.getEnumLiteralValueConstantName());
     if (genEnumLiteral.hasAPITags()) {
-    stringBuffer.append(TEXT_53);
+    stringBuffer.append(TEXT_50);
     stringBuffer.append(genEnumLiteral.getAPITags(genModel.getIndentation(stringBuffer)));
     }
     stringBuffer.append(TEXT_31);
     if (isJDK50 && genEnumLiteral.hasAPIDeprecatedTag()) {
     stringBuffer.append(TEXT_32);
     }
-    stringBuffer.append(TEXT_54);
+    stringBuffer.append(TEXT_51);
     stringBuffer.append(genEnum.getName());
     stringBuffer.append(TEXT_21);
     stringBuffer.append(genEnumLiteral.getEnumLiteralInstanceConstantName());
-    stringBuffer.append(TEXT_55);
+    stringBuffer.append(TEXT_52);
     stringBuffer.append(genEnum.getName());
     stringBuffer.append(TEXT_34);
     stringBuffer.append(genEnumLiteral.getEnumLiteralValueConstantName());
@@ -307,123 +298,123 @@
     stringBuffer.append(genEnumLiteral.getName());
     stringBuffer.append(TEXT_36);
     stringBuffer.append(Literals.toStringLiteral(genEnumLiteral.getLiteral(), genModel));
-    stringBuffer.append(TEXT_56);
+    stringBuffer.append(TEXT_53);
     stringBuffer.append(genModel.getNonNLS());
     stringBuffer.append(genModel.getNonNLS(2));
     stringBuffer.append(TEXT_40);
     }
-    stringBuffer.append(TEXT_57);
+    stringBuffer.append(TEXT_54);
     stringBuffer.append(genEnum.getFormattedName());
-    stringBuffer.append(TEXT_58);
+    stringBuffer.append(TEXT_55);
     stringBuffer.append(genEnum.getName());
-    stringBuffer.append(TEXT_59);
+    stringBuffer.append(TEXT_56);
     stringBuffer.append(genEnum.getName());
-    stringBuffer.append(TEXT_60);
+    stringBuffer.append(TEXT_57);
     for (GenEnumLiteral genEnumLiteral : genEnum.getGenEnumLiterals()) {
-    stringBuffer.append(TEXT_61);
+    stringBuffer.append(TEXT_58);
     stringBuffer.append(genEnumLiteral.getEnumLiteralInstanceConstantName());
     stringBuffer.append(TEXT_38);
     }
-    stringBuffer.append(TEXT_62);
+    stringBuffer.append(TEXT_59);
     stringBuffer.append(genEnum.getFormattedName());
-    stringBuffer.append(TEXT_63);
+    stringBuffer.append(TEXT_60);
     if (isEnum) {
+    stringBuffer.append(TEXT_61);
+    stringBuffer.append(genEnum.getName());
+    stringBuffer.append(TEXT_62);
+    }
+    stringBuffer.append(TEXT_63);
+    stringBuffer.append(genEnum.getFormattedName());
     stringBuffer.append(TEXT_64);
     stringBuffer.append(genEnum.getName());
     stringBuffer.append(TEXT_65);
-    }
+    stringBuffer.append(genModel.getImportedName("java.lang.String"));
     stringBuffer.append(TEXT_66);
-    stringBuffer.append(genEnum.getFormattedName());
+    stringBuffer.append(genEnum.getName());
     stringBuffer.append(TEXT_67);
-    stringBuffer.append(genEnum.getName());
+    stringBuffer.append(genEnum.getFormattedName());
     stringBuffer.append(TEXT_68);
-    stringBuffer.append(genModel.getImportedName("java.lang.String"));
+    stringBuffer.append(genEnum.getName());
     stringBuffer.append(TEXT_69);
-    stringBuffer.append(genEnum.getName());
-    stringBuffer.append(TEXT_70);
-    stringBuffer.append(genEnum.getFormattedName());
-    stringBuffer.append(TEXT_71);
-    stringBuffer.append(genEnum.getName());
-    stringBuffer.append(TEXT_72);
     stringBuffer.append(genModel.getImportedName("java.lang.String"));
-    stringBuffer.append(TEXT_73);
+    stringBuffer.append(TEXT_70);
     stringBuffer.append(genEnum.getName());
-    stringBuffer.append(TEXT_74);
+    stringBuffer.append(TEXT_71);
     stringBuffer.append(genEnum.getFormattedName());
-    stringBuffer.append(TEXT_75);
+    stringBuffer.append(TEXT_72);
     stringBuffer.append(genEnum.getName());
-    stringBuffer.append(TEXT_76);
+    stringBuffer.append(TEXT_73);
     for (GenEnumLiteral genEnumLiteral : genEnum.getUniqueValuedGenEnumLiterals()) {
-    stringBuffer.append(TEXT_77);
+    stringBuffer.append(TEXT_74);
     stringBuffer.append(genEnumLiteral.getEnumLiteralValueConstantName());
-    stringBuffer.append(TEXT_78);
+    stringBuffer.append(TEXT_75);
     stringBuffer.append(genEnumLiteral.getEnumLiteralInstanceConstantName());
     stringBuffer.append(TEXT_39);
     }
-    stringBuffer.append(TEXT_79);
+    stringBuffer.append(TEXT_76);
     if (isEnum) {
-    stringBuffer.append(TEXT_80);
+    stringBuffer.append(TEXT_77);
     stringBuffer.append(genModel.getImportedName("java.lang.String"));
+    stringBuffer.append(TEXT_78);
+    stringBuffer.append(genModel.getImportedName("java.lang.String"));
+    stringBuffer.append(TEXT_79);
+    }
+    stringBuffer.append(TEXT_80);
+    stringBuffer.append(genEnum.getName());
     stringBuffer.append(TEXT_81);
     stringBuffer.append(genModel.getImportedName("java.lang.String"));
     stringBuffer.append(TEXT_82);
-    }
+    stringBuffer.append(genModel.getImportedName("java.lang.String"));
     stringBuffer.append(TEXT_83);
-    stringBuffer.append(genEnum.getName());
+    if (isEnum) {
     stringBuffer.append(TEXT_84);
-    stringBuffer.append(genModel.getImportedName("java.lang.String"));
+    } else {
     stringBuffer.append(TEXT_85);
-    stringBuffer.append(genModel.getImportedName("java.lang.String"));
+    }
     stringBuffer.append(TEXT_86);
     if (isEnum) {
     stringBuffer.append(TEXT_87);
-    } else {
+    if (genModel.useInterfaceOverrideAnnotation()) {
     stringBuffer.append(TEXT_88);
     }
     stringBuffer.append(TEXT_89);
-    if (isEnum) {
+    if (genModel.useInterfaceOverrideAnnotation()) {
+    stringBuffer.append(TEXT_88);
+    }
     stringBuffer.append(TEXT_90);
-    if (genModel.useInterfaceOverrideAnnotation()) {
+    stringBuffer.append(genModel.getImportedName("java.lang.String"));
     stringBuffer.append(TEXT_91);
+    if (genModel.useInterfaceOverrideAnnotation()) {
+    stringBuffer.append(TEXT_88);
     }
+    stringBuffer.append(TEXT_90);
+    stringBuffer.append(genModel.getImportedName("java.lang.String"));
     stringBuffer.append(TEXT_92);
-    if (genModel.useInterfaceOverrideAnnotation()) {
-    stringBuffer.append(TEXT_91);
-    }
-    stringBuffer.append(TEXT_93);
-    stringBuffer.append(genModel.getImportedName("java.lang.String"));
-    stringBuffer.append(TEXT_94);
-    if (genModel.useInterfaceOverrideAnnotation()) {
-    stringBuffer.append(TEXT_91);
-    }
-    stringBuffer.append(TEXT_93);
-    stringBuffer.append(genModel.getImportedName("java.lang.String"));
-    stringBuffer.append(TEXT_95);
     if (genModel.useClassOverrideAnnotation()) {
-    stringBuffer.append(TEXT_91);
+    stringBuffer.append(TEXT_88);
     }
-    stringBuffer.append(TEXT_93);
+    stringBuffer.append(TEXT_90);
     stringBuffer.append(genModel.getImportedName("java.lang.String"));
-    stringBuffer.append(TEXT_96);
+    stringBuffer.append(TEXT_93);
     }
-    stringBuffer.append(TEXT_97);
+    stringBuffer.append(TEXT_94);
     stringBuffer.append(genEnum.getName());
     if (genModel.isSuppressEMFMetaData()&& !genModel.isSuppressInterfaces() ) {
     stringBuffer.append(TEXT_40);
     if (isEnum) {
+    stringBuffer.append(TEXT_95);
+    stringBuffer.append(genEnum.getName());
+    stringBuffer.append(TEXT_96);
+    } else {
+    stringBuffer.append(TEXT_97);
+    stringBuffer.append(genEnum.getName());
     stringBuffer.append(TEXT_98);
     stringBuffer.append(genEnum.getName());
+    stringBuffer.append(TEXT_81);
+    stringBuffer.append(genModel.getImportedName("java.lang.String"));
+    stringBuffer.append(TEXT_82);
+    stringBuffer.append(genModel.getImportedName("java.lang.String"));
     stringBuffer.append(TEXT_99);
-    } else {
-    stringBuffer.append(TEXT_100);
-    stringBuffer.append(genEnum.getName());
-    stringBuffer.append(TEXT_101);
-    stringBuffer.append(genEnum.getName());
-    stringBuffer.append(TEXT_84);
-    stringBuffer.append(genModel.getImportedName("java.lang.String"));
-    stringBuffer.append(TEXT_85);
-    stringBuffer.append(genModel.getImportedName("java.lang.String"));
-    stringBuffer.append(TEXT_102);
     }
     }
     genModel.emitSortedImports();
diff --git a/plugins/org.eclipse.emf.codegen.ecore/templates/model/Class.javajet b/plugins/org.eclipse.emf.codegen.ecore/templates/model/Class.javajet
index 4cd33d8..4de6472 100644
--- a/plugins/org.eclipse.emf.codegen.ecore/templates/model/Class.javajet
+++ b/plugins/org.eclipse.emf.codegen.ecore/templates/model/Class.javajet
@@ -855,12 +855,6 @@
     <%}%>
 <%@ include file="Class/getGenFeature.javadoc.insert.javajetinc" fail="silent" %>
 	 * <!-- begin-user-doc -->
-    <%if (!genFeature.hasDocumentation()) {%>
-	 * <p>
-	 * If the meaning of the '<em><%=genFeature.getFormattedName()%></em>' <%=genFeature.getFeatureKind()%> isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-    <%}%>
 	 * <!-- end-user-doc -->
     <%if (genFeature.hasDocumentation()) {%>
 	 * <!-- begin-model-doc -->
diff --git a/plugins/org.eclipse.emf.codegen.ecore/templates/model/EnumClass.javajet b/plugins/org.eclipse.emf.codegen.ecore/templates/model/EnumClass.javajet
index b0ffb04..a064f69 100644
--- a/plugins/org.eclipse.emf.codegen.ecore/templates/model/EnumClass.javajet
+++ b/plugins/org.eclipse.emf.codegen.ecore/templates/model/EnumClass.javajet
@@ -90,12 +90,6 @@
 	/**
 	 * The '<em><b><%=genEnumLiteral.getFormattedName()%></b></em>' literal value.
 	 * <!-- begin-user-doc -->
-<%if (!genEnumLiteral.hasDocumentation()) {%>
-	 * <p>
-	 * If the meaning of '<em><b><%=genEnumLiteral.getFormattedName()%></b></em>' literal object isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-<%}%>
 	 * <!-- end-user-doc -->
 <%if (genEnumLiteral.hasDocumentation()) {%>
 	 * <!-- begin-model-doc -->
