[471114] Avoid generated warnings for Ecore literals
diff --git a/examples/org.eclipse.ocl.examples.autogen/.gitignore b/examples/org.eclipse.ocl.examples.autogen/.gitignore
index 1c6056e..2989852 100644
--- a/examples/org.eclipse.ocl.examples.autogen/.gitignore
+++ b/examples/org.eclipse.ocl.examples.autogen/.gitignore
@@ -1,2 +1,3 @@
 /bin
 /text
+/xtend-gen
diff --git a/examples/org.eclipse.ocl.examples.autogen/src/org/eclipse/ocl/examples/autogen/xtend/GenerateAutoLookupInfrastructureXtend.xtend b/examples/org.eclipse.ocl.examples.autogen/src/org/eclipse/ocl/examples/autogen/xtend/GenerateAutoLookupInfrastructureXtend.xtend
index 790b2e2..2fcefe7 100644
--- a/examples/org.eclipse.ocl.examples.autogen/src/org/eclipse/ocl/examples/autogen/xtend/GenerateAutoLookupInfrastructureXtend.xtend
+++ b/examples/org.eclipse.ocl.examples.autogen/src/org/eclipse/ocl/examples/autogen/xtend/GenerateAutoLookupInfrastructureXtend.xtend
@@ -283,15 +283,17 @@
 		private @NonNull EClass typeFilter;
 		private @Nullable «projectPrefix»LookupFilter expFilter;
 		
-		public «className»(@NonNull Executor executor, @NonNull EClass typeFilter, @NonNull String name,  @Nullable «projectPrefix»LookupFilter expFilter) {
+		public «className»(@NonNull Executor executor, /*@NonNull*/ EClass typeFilter, /*@NonNull*/ String name,  @Nullable «projectPrefix»LookupFilter expFilter) {
+			assert typeFilter != null;
+			assert name != null;
 			this.executor = executor;
 			this.name = name;
 			this.typeFilter = typeFilter;
 			this.expFilter = expFilter;
 		}
 	
-		public «className»(@NonNull Executor executor, @NonNull EClass typeFilter, @NonNull String name) {
-			this(executor,typeFilter, name, null);
+		public «className»(@NonNull Executor executor, /*@NonNull*/ EClass typeFilter, /*@NonNull*/ String name) {
+			this(executor, typeFilter, name, null);
 		}
 		
 		@Override
diff --git a/examples/org.eclipse.ocl.examples.autogen/xtend-gen/org/eclipse/ocl/examples/autogen/xtend/.GenerateAutoLookupInfrastructureXtend.xtendbin b/examples/org.eclipse.ocl.examples.autogen/xtend-gen/org/eclipse/ocl/examples/autogen/xtend/.GenerateAutoLookupInfrastructureXtend.xtendbin
deleted file mode 100644
index 75b82cb..0000000
--- a/examples/org.eclipse.ocl.examples.autogen/xtend-gen/org/eclipse/ocl/examples/autogen/xtend/.GenerateAutoLookupInfrastructureXtend.xtendbin
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.ocl.examples.autogen/xtend-gen/org/eclipse/ocl/examples/autogen/xtend/.gitignore b/examples/org.eclipse.ocl.examples.autogen/xtend-gen/org/eclipse/ocl/examples/autogen/xtend/.gitignore
deleted file mode 100644
index 5a14705..0000000
--- a/examples/org.eclipse.ocl.examples.autogen/xtend-gen/org/eclipse/ocl/examples/autogen/xtend/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/.GenerateAutoLookupInfrastructureXtend.java._trace
diff --git a/examples/org.eclipse.ocl.examples.autogen/xtend-gen/org/eclipse/ocl/examples/autogen/xtend/GenerateAutoLookupInfrastructureXtend.java b/examples/org.eclipse.ocl.examples.autogen/xtend-gen/org/eclipse/ocl/examples/autogen/xtend/GenerateAutoLookupInfrastructureXtend.java
deleted file mode 100644
index f4b5644..0000000
--- a/examples/org.eclipse.ocl.examples.autogen/xtend-gen/org/eclipse/ocl/examples/autogen/xtend/GenerateAutoLookupInfrastructureXtend.java
+++ /dev/null
@@ -1,1384 +0,0 @@
-/**
- * Copyright (c) 2015 Willink Transformations, University of York and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v2.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v20.html
- * 
- * Contributors:
- *     Adolfo Sanchez-Barbudo Herrera (University of York) - initial API and implementation
- */
-package org.eclipse.ocl.examples.autogen.xtend;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import org.eclipse.emf.codegen.ecore.genmodel.GenClassifier;
-import org.eclipse.emf.codegen.ecore.genmodel.GenPackage;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.mwe.core.issues.Issues;
-import org.eclipse.ocl.examples.autogen.lookup.LookupCGUtil;
-import org.eclipse.ocl.examples.autogen.lookup.LookupCodeGenerator;
-import org.eclipse.ocl.examples.build.utilities.GenPackageHelper;
-import org.eclipse.ocl.examples.build.xtend.GenerateVisitorsWorkflowComponent;
-import org.eclipse.ocl.examples.build.xtend.GenerateVisitorsXtend;
-import org.eclipse.ocl.examples.build.xtend.MergeWriter;
-import org.eclipse.ocl.examples.codegen.generator.AbstractGenModelHelper;
-import org.eclipse.ocl.examples.codegen.generator.GenModelHelper;
-import org.eclipse.ocl.pivot.CollectionType;
-import org.eclipse.ocl.pivot.Operation;
-import org.eclipse.ocl.pivot.Parameter;
-import org.eclipse.ocl.pivot.Type;
-import org.eclipse.ocl.pivot.internal.manager.PivotMetamodelManager;
-import org.eclipse.ocl.pivot.internal.utilities.PivotUtilInternal;
-import org.eclipse.ocl.pivot.model.OCLstdlib;
-import org.eclipse.ocl.pivot.utilities.ClassUtil;
-import org.eclipse.ocl.pivot.utilities.EnvironmentFactory;
-import org.eclipse.ocl.pivot.utilities.OCL;
-import org.eclipse.ocl.xtext.completeocl.CompleteOCLStandaloneSetup;
-import org.eclipse.xtend2.lib.StringConcatenation;
-import org.eclipse.xtext.xbase.lib.CollectionLiterals;
-import org.eclipse.xtext.xbase.lib.Exceptions;
-
-@SuppressWarnings("all")
-public class GenerateAutoLookupInfrastructureXtend extends GenerateVisitorsXtend {
-  protected String lookupFilePath;
-  
-  protected String lookupArtifactsJavaPackage;
-  
-  protected String lookupArtifactsOutputFolder;
-  
-  protected String lookupPackageName;
-  
-  protected String superLookupPackageName;
-  
-  protected String baseLookupPackageName;
-  
-  protected GenModelHelper genModelHelper;
-  
-  @Override
-  public void checkConfiguration(final Issues issues) {
-    super.checkConfiguration(issues);
-    boolean _isDefined = GenerateVisitorsWorkflowComponent.isDefined(this.lookupFilePath);
-    boolean _not = (!_isDefined);
-    if (_not) {
-      issues.addError(this, "lookupFilePath must be specified");
-    }
-  }
-  
-  /**
-   * The path inside the projectName to the Complete OCL file which contains the
-   * name resolution description (e.g. "model/NameResolution.ocl"). It
-   * can't be null
-   */
-  public String setLookupFilePath(final String lookupFilePath) {
-    return this.lookupFilePath = lookupFilePath;
-  }
-  
-  public String setLookupPackageName(final String lookupPackageName) {
-    return this.lookupPackageName = lookupPackageName;
-  }
-  
-  public String setSuperLookupPackageName(final String superLookupPackageName) {
-    return this.superLookupPackageName = superLookupPackageName;
-  }
-  
-  public String setBaseLookupPackageName(final String baseLookupPackageName) {
-    return this.baseLookupPackageName = baseLookupPackageName;
-  }
-  
-  @Override
-  protected void doSetup() {
-    CompleteOCLStandaloneSetup.doSetup();
-    OCLstdlib.install();
-  }
-  
-  @Override
-  protected void doPropertiesConfiguration(final OCL ocl) {
-    super.doPropertiesConfiguration(ocl);
-    final URI genModelURI = this.getGenModelURI(this.projectName, this.genModelFile);
-    final Resource genModelResource = this.getGenModelResource(ocl, genModelURI);
-    final GenPackage genPackage = this.getGenPackage(genModelResource);
-    GenPackageHelper helper = new GenPackageHelper(genPackage);
-    if (((!GenerateVisitorsWorkflowComponent.isDefined(this.lookupPackageName)) || (this.lookupPackageName.length() == 0))) {
-      String _modelPackageName = helper.getModelPackageName();
-      String _plus = (_modelPackageName + ".lookup");
-      this.lookupPackageName = _plus;
-    }
-    boolean _isDerived = this.isDerived();
-    if (_isDerived) {
-      final URI superGenModelURI = this.getGenModelURI(this.superProjectName, this.superGenModelFile);
-      final Resource superGenModelResource = this.getGenModelResource(ocl, superGenModelURI);
-      final GenPackage superGenPackage = this.getGenPackage(superGenModelResource);
-      GenPackageHelper _genPackageHelper = new GenPackageHelper(superGenPackage);
-      helper = _genPackageHelper;
-      if (((!GenerateVisitorsWorkflowComponent.isDefined(this.superLookupPackageName)) || (this.superLookupPackageName.length() == 0))) {
-        String _modelPackageName_1 = helper.getModelPackageName();
-        String _plus_1 = (_modelPackageName_1 + ".lookup");
-        this.superLookupPackageName = _plus_1;
-      }
-      final URI baseGenModelURI = this.getGenModelURI(this.baseProjectName, this.baseGenModelFile);
-      final Resource baseGenModelResource = this.getGenModelResource(ocl, baseGenModelURI);
-      final GenPackage baseGenPackage = this.getGenPackage(baseGenModelResource);
-      GenPackageHelper _genPackageHelper_1 = new GenPackageHelper(baseGenPackage);
-      helper = _genPackageHelper_1;
-      if (((!GenerateVisitorsWorkflowComponent.isDefined(this.baseLookupPackageName)) || (this.baseLookupPackageName.length() == 0))) {
-        String _modelPackageName_2 = helper.getModelPackageName();
-        String _plus_2 = (_modelPackageName_2 + ".lookup");
-        this.baseLookupPackageName = _plus_2;
-      }
-    } else {
-      if (((!GenerateVisitorsWorkflowComponent.isDefined(this.baseLookupPackageName)) || (this.baseLookupPackageName.length() == 0))) {
-        this.baseLookupPackageName = this.lookupPackageName;
-      }
-    }
-  }
-  
-  @SuppressWarnings("null")
-  protected void doGenerateVisitors(final GenPackage genPackage) {
-    LookupCodeGenerator.generate(genPackage, this.superGenPackage, this.baseGenPackage, this.projectName, this.lookupFilePath, 
-      this.lookupPackageName, this.lookupPackageName, null);
-  }
-  
-  protected void generateAutoLookupResultItf(final EPackage ePackage) {
-    try {
-      boolean isDerived = this.isDerived();
-      if ((!isDerived)) {
-        MergeWriter writer = new MergeWriter(((this.lookupArtifactsOutputFolder + this.projectPrefix) + "LookupResult.java"));
-        StringConcatenation _builder = new StringConcatenation();
-        String _generateHeaderWithTemplate = this.generateHeaderWithTemplate(ePackage, this.lookupArtifactsJavaPackage);
-        _builder.append(_generateHeaderWithTemplate);
-        _builder.newLineIfNotEmpty();
-        _builder.newLine();
-        _builder.append("import java.util.List;");
-        _builder.newLine();
-        _builder.newLine();
-        _builder.append("import org.eclipse.jdt.annotation.NonNull;");
-        _builder.newLine();
-        _builder.append("import org.eclipse.jdt.annotation.Nullable;");
-        _builder.newLine();
-        _builder.newLine();
-        _builder.append("/**");
-        _builder.newLine();
-        _builder.append(" ");
-        _builder.append("* The lookup result returned by the name lookup solver");
-        _builder.newLine();
-        _builder.append(" ");
-        _builder.append("*/");
-        _builder.newLine();
-        _builder.append("public interface ");
-        _builder.append(this.projectPrefix);
-        _builder.append("LookupResult<NE> {");
-        _builder.newLineIfNotEmpty();
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("@Nullable");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("NE getSingleResult();");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("@NonNull");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("List<NE> getAllResults();");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("int size();");
-        _builder.newLine();
-        _builder.append("}");
-        _builder.newLine();
-        writer.append(_builder.toString());
-        writer.close();
-      }
-    } catch (Throwable _e) {
-      throw Exceptions.sneakyThrow(_e);
-    }
-  }
-  
-  protected void generateAutoLookupResultClass(final EPackage ePackage) {
-    try {
-      boolean isDerived = this.isDerived();
-      if ((!isDerived)) {
-        MergeWriter writer = new MergeWriter(((this.lookupArtifactsOutputFolder + this.projectPrefix) + "LookupResultImpl.java"));
-        StringConcatenation _builder = new StringConcatenation();
-        String _generateHeaderWithTemplate = this.generateHeaderWithTemplate(ePackage, this.lookupArtifactsJavaPackage);
-        _builder.append(_generateHeaderWithTemplate);
-        _builder.newLineIfNotEmpty();
-        _builder.newLine();
-        _builder.append("import java.util.ArrayList;");
-        _builder.newLine();
-        _builder.append("import java.util.Collections;");
-        _builder.newLine();
-        _builder.append("import java.util.List;");
-        _builder.newLine();
-        _builder.newLine();
-        _builder.append("import org.eclipse.jdt.annotation.NonNull;");
-        _builder.newLine();
-        _builder.append("import org.eclipse.jdt.annotation.Nullable;");
-        _builder.newLine();
-        _builder.newLine();
-        _builder.append("public class ");
-        _builder.append(this.projectPrefix);
-        _builder.append("LookupResultImpl<NE> implements ");
-        _builder.append(this.projectPrefix);
-        _builder.append("LookupResult<NE> {");
-        _builder.newLineIfNotEmpty();
-        _builder.append("\t");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("private @NonNull List<NE> results = new ArrayList<NE>();");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("public ");
-        _builder.append(this.projectPrefix, "\t");
-        _builder.append("LookupResultImpl(List<NE> results){");
-        _builder.newLineIfNotEmpty();
-        _builder.append("\t\t");
-        _builder.append("this.results.addAll(results);");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("}");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("@Override");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("public @NonNull List<NE> getAllResults() {");
-        _builder.newLine();
-        _builder.append("\t\t");
-        _builder.append("return Collections.unmodifiableList(results);");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("}");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("@Override");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("public @Nullable NE getSingleResult() {");
-        _builder.newLine();
-        _builder.append("\t\t");
-        _builder.append("return results.size() == 0 ? null : results.get(0);");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("}");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("@Override");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("public int size() {");
-        _builder.newLine();
-        _builder.append("\t\t");
-        _builder.append("return results.size();");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("}");
-        _builder.newLine();
-        _builder.append("}");
-        _builder.newLine();
-        writer.append(_builder.toString());
-        writer.close();
-      }
-    } catch (Throwable _e) {
-      throw Exceptions.sneakyThrow(_e);
-    }
-  }
-  
-  protected void generateAutoLookupFilterItf(final EPackage ePackage) {
-    try {
-      final boolean isDerived = this.isDerived();
-      if ((!isDerived)) {
-        StringConcatenation _builder = new StringConcatenation();
-        _builder.append(this.projectPrefix);
-        _builder.append("LookupFilter");
-        final String itfName = _builder.toString();
-        final MergeWriter writer = new MergeWriter(((this.lookupArtifactsOutputFolder + itfName) + ".java"));
-        StringConcatenation _builder_1 = new StringConcatenation();
-        String _generateHeaderWithTemplate = this.generateHeaderWithTemplate(ePackage, this.lookupArtifactsJavaPackage);
-        _builder_1.append(_generateHeaderWithTemplate);
-        _builder_1.newLineIfNotEmpty();
-        _builder_1.newLine();
-        _builder_1.append("import org.eclipse.jdt.annotation.NonNull;");
-        _builder_1.newLine();
-        _builder_1.append("import ");
-        _builder_1.append(this.modelPackageName);
-        _builder_1.append(".NamedElement;");
-        _builder_1.newLineIfNotEmpty();
-        _builder_1.newLine();
-        _builder_1.append("/**");
-        _builder_1.newLine();
-        _builder_1.append(" ");
-        _builder_1.append("* ");
-        _builder_1.newLine();
-        _builder_1.append(" ");
-        _builder_1.append("*/");
-        _builder_1.newLine();
-        _builder_1.append("public interface ");
-        _builder_1.append(itfName);
-        _builder_1.append(" {");
-        _builder_1.newLineIfNotEmpty();
-        _builder_1.append("\t");
-        _builder_1.newLine();
-        _builder_1.append("\t");
-        _builder_1.append("boolean matches(@NonNull NamedElement namedElement);");
-        _builder_1.newLine();
-        _builder_1.append("\t");
-        _builder_1.newLine();
-        _builder_1.append("}");
-        _builder_1.newLine();
-        writer.append(_builder_1.toString());
-        writer.close();
-      }
-    } catch (Throwable _e) {
-      throw Exceptions.sneakyThrow(_e);
-    }
-  }
-  
-  protected void generateAutoLookupFilterClass(final EPackage ePackage) {
-    try {
-      final boolean isDerived = this.isDerived();
-      if ((!isDerived)) {
-        StringConcatenation _builder = new StringConcatenation();
-        _builder.append("Abstract");
-        _builder.append(this.projectPrefix);
-        _builder.append("LookupFilter");
-        final String className = _builder.toString();
-        StringConcatenation _builder_1 = new StringConcatenation();
-        _builder_1.append(this.projectPrefix);
-        _builder_1.append("LookupFilter");
-        final String itfName = _builder_1.toString();
-        final MergeWriter writer = new MergeWriter(((this.lookupArtifactsOutputFolder + className) + ".java"));
-        StringConcatenation _builder_2 = new StringConcatenation();
-        String _generateHeaderWithTemplate = this.generateHeaderWithTemplate(ePackage, this.lookupArtifactsJavaPackage);
-        _builder_2.append(_generateHeaderWithTemplate);
-        _builder_2.newLineIfNotEmpty();
-        _builder_2.newLine();
-        _builder_2.append("import org.eclipse.jdt.annotation.NonNull;");
-        _builder_2.newLine();
-        _builder_2.append("import ");
-        _builder_2.append(this.modelPackageName);
-        _builder_2.append(".NamedElement;");
-        _builder_2.newLineIfNotEmpty();
-        _builder_2.newLine();
-        _builder_2.append("/**");
-        _builder_2.newLine();
-        _builder_2.append(" ");
-        _builder_2.append("* ");
-        _builder_2.newLine();
-        _builder_2.append(" ");
-        _builder_2.append("*/");
-        _builder_2.newLine();
-        _builder_2.append("public abstract class ");
-        _builder_2.append(className);
-        _builder_2.append("<C extends NamedElement> implements ");
-        _builder_2.append(itfName);
-        _builder_2.append(" {");
-        _builder_2.newLineIfNotEmpty();
-        _builder_2.append("\t");
-        _builder_2.newLine();
-        _builder_2.append("\t");
-        _builder_2.append("@NonNull private Class<C> _class;");
-        _builder_2.newLine();
-        _builder_2.append("\t");
-        _builder_2.newLine();
-        _builder_2.append("\t");
-        _builder_2.append("public ");
-        _builder_2.append(className, "\t");
-        _builder_2.append("(@NonNull Class<C> _class) {");
-        _builder_2.newLineIfNotEmpty();
-        _builder_2.append("\t\t");
-        _builder_2.append("this._class = _class;");
-        _builder_2.newLine();
-        _builder_2.append("\t");
-        _builder_2.append("}");
-        _builder_2.newLine();
-        _builder_2.append("\t");
-        _builder_2.newLine();
-        _builder_2.append("\t");
-        _builder_2.append("@SuppressWarnings(\"unchecked\")");
-        _builder_2.newLine();
-        _builder_2.append("\t");
-        _builder_2.append("@Override");
-        _builder_2.newLine();
-        _builder_2.append("\t");
-        _builder_2.append("public boolean matches(@NonNull NamedElement namedElement) {");
-        _builder_2.newLine();
-        _builder_2.append("\t\t");
-        _builder_2.append("return _class.isInstance(namedElement) && _matches((C)namedElement);");
-        _builder_2.newLine();
-        _builder_2.append("\t");
-        _builder_2.append("}");
-        _builder_2.newLine();
-        _builder_2.append("\t");
-        _builder_2.newLine();
-        _builder_2.append("\t");
-        _builder_2.append("abstract protected Boolean _matches(@NonNull C element);");
-        _builder_2.newLine();
-        _builder_2.append("}");
-        _builder_2.newLine();
-        writer.append(_builder_2.toString());
-        writer.close();
-      }
-    } catch (Throwable _e) {
-      throw Exceptions.sneakyThrow(_e);
-    }
-  }
-  
-  protected void generateSingleResultLookupEnvironment(final EPackage ePackage) {
-    try {
-      boolean isDerived = this.isDerived();
-      String className = (this.projectPrefix + "SingleResultLookupEnvironment");
-      if ((!isDerived)) {
-        MergeWriter writer = new MergeWriter(((this.lookupArtifactsOutputFolder + className) + ".java"));
-        StringConcatenation _builder = new StringConcatenation();
-        String _generateHeaderWithTemplate = this.generateHeaderWithTemplate(ePackage, this.lookupArtifactsJavaPackage);
-        _builder.append(_generateHeaderWithTemplate);
-        _builder.newLineIfNotEmpty();
-        _builder.newLine();
-        _builder.append("import java.util.ArrayList;");
-        _builder.newLine();
-        _builder.append("import java.util.Collection;");
-        _builder.newLine();
-        _builder.append("import java.util.List;");
-        _builder.newLine();
-        _builder.newLine();
-        _builder.append("import org.eclipse.emf.ecore.EClass;");
-        _builder.newLine();
-        _builder.append("import org.eclipse.jdt.annotation.NonNull;");
-        _builder.newLine();
-        _builder.append("import org.eclipse.jdt.annotation.Nullable;");
-        _builder.newLine();
-        _builder.append("import org.eclipse.ocl.pivot.evaluation.Executor;");
-        _builder.newLine();
-        _builder.newLine();
-        _builder.append("import ");
-        _builder.append(this.modelPackageName);
-        _builder.append(".NamedElement;");
-        _builder.newLineIfNotEmpty();
-        _builder.append("import ");
-        _builder.append(this.lookupPackageName);
-        _builder.append(".LookupEnvironment;");
-        _builder.newLineIfNotEmpty();
-        _builder.append("import ");
-        _builder.append(this.lookupPackageName);
-        _builder.append(".impl.LookupEnvironmentImpl;");
-        _builder.newLineIfNotEmpty();
-        _builder.newLine();
-        _builder.append("public class ");
-        _builder.append(className);
-        _builder.append(" extends LookupEnvironmentImpl   {");
-        _builder.newLineIfNotEmpty();
-        _builder.append("\t");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("private @NonNull Executor executor;");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("private @NonNull String name;");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("private @NonNull EClass typeFilter;");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("private @Nullable ");
-        _builder.append(this.projectPrefix, "\t");
-        _builder.append("LookupFilter expFilter;");
-        _builder.newLineIfNotEmpty();
-        _builder.append("\t");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("public ");
-        _builder.append(className, "\t");
-        _builder.append("(@NonNull Executor executor, @NonNull EClass typeFilter, @NonNull String name,  @Nullable ");
-        _builder.append(this.projectPrefix, "\t");
-        _builder.append("LookupFilter expFilter) {");
-        _builder.newLineIfNotEmpty();
-        _builder.append("\t\t");
-        _builder.append("this.executor = executor;");
-        _builder.newLine();
-        _builder.append("\t\t");
-        _builder.append("this.name = name;");
-        _builder.newLine();
-        _builder.append("\t\t");
-        _builder.append("this.typeFilter = typeFilter;");
-        _builder.newLine();
-        _builder.append("\t\t");
-        _builder.append("this.expFilter = expFilter;");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("}");
-        _builder.newLine();
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("public ");
-        _builder.append(className, "\t");
-        _builder.append("(@NonNull Executor executor, @NonNull EClass typeFilter, @NonNull String name) {");
-        _builder.newLineIfNotEmpty();
-        _builder.append("\t\t");
-        _builder.append("this(executor,typeFilter, name, null);");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("}");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("@Override");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("@NonNull");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("public Executor getExecutor() {");
-        _builder.newLine();
-        _builder.append("\t\t");
-        _builder.append("return executor;");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("}");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("@Override");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("public boolean hasFinalResult() {");
-        _builder.newLine();
-        _builder.append("\t\t");
-        _builder.append("for (NamedElement element : getNamedElements()) {");
-        _builder.newLine();
-        _builder.append("\t\t\t");
-        _builder.append("if (name.equals(element.getName())) {");
-        _builder.newLine();
-        _builder.append("\t\t\t\t");
-        _builder.append("return true;");
-        _builder.newLine();
-        _builder.append("\t\t\t");
-        _builder.append("}");
-        _builder.newLine();
-        _builder.append("\t\t");
-        _builder.append("}");
-        _builder.newLine();
-        _builder.append("\t\t");
-        _builder.append("return false;");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("}");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("@Override");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("@NonNull");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("public LookupEnvironment addElement(@Nullable NamedElement namedElement) {");
-        _builder.newLine();
-        _builder.append("\t\t");
-        _builder.append("if (namedElement != null) {");
-        _builder.newLine();
-        _builder.append("\t\t\t");
-        _builder.append("if (name.equals(namedElement.getName())) {");
-        _builder.newLine();
-        _builder.append("\t\t\t\t");
-        _builder.append("if (typeFilter.isInstance(namedElement)) {");
-        _builder.newLine();
-        _builder.append("\t\t\t\t    ");
-        _builder.append(this.projectPrefix, "\t\t\t\t    ");
-        _builder.append("LookupFilter expFilter2 = expFilter;");
-        _builder.newLineIfNotEmpty();
-        _builder.append("\t\t\t\t\t");
-        _builder.append("if (expFilter2 == null || expFilter2.matches(namedElement)) {");
-        _builder.newLine();
-        _builder.append("\t\t\t\t\t\t");
-        _builder.append("List<NamedElement> elements = getNamedElements();");
-        _builder.newLine();
-        _builder.append("\t\t\t\t\t\t");
-        _builder.append("if (!elements.contains(namedElement)) { \t// FIXME use a set ?");
-        _builder.newLine();
-        _builder.append("\t\t\t\t\t\t\t");
-        _builder.append("elements.add(namedElement);");
-        _builder.newLine();
-        _builder.append("\t\t\t\t\t\t");
-        _builder.append("}");
-        _builder.newLine();
-        _builder.append("\t\t\t\t\t");
-        _builder.append("}");
-        _builder.newLine();
-        _builder.append("\t\t\t\t");
-        _builder.append("}");
-        _builder.newLine();
-        _builder.append("\t\t\t");
-        _builder.append("}");
-        _builder.newLine();
-        _builder.append("\t\t");
-        _builder.append("}");
-        _builder.newLine();
-        _builder.append("\t\t");
-        _builder.append("return this;");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("}");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("@Override");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("@NonNull");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("public <NE extends NamedElement > LookupEnvironment addElements(");
-        _builder.newLine();
-        _builder.append("\t\t\t");
-        _builder.append("@Nullable Collection<NE> namedElements) {");
-        _builder.newLine();
-        _builder.append("\t\t");
-        _builder.newLine();
-        _builder.append("\t\t");
-        _builder.append("if (namedElements != null) {");
-        _builder.newLine();
-        _builder.append("\t\t\t");
-        _builder.append("for (NamedElement namedElement : namedElements) {");
-        _builder.newLine();
-        _builder.append("\t\t\t\t");
-        _builder.append("addElement(namedElement);");
-        _builder.newLine();
-        _builder.append("\t\t\t");
-        _builder.append("}\t");
-        _builder.newLine();
-        _builder.append("\t\t");
-        _builder.append("}");
-        _builder.newLine();
-        _builder.append("\t\t");
-        _builder.append("return this;");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("}");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("@SuppressWarnings(\"unchecked\")");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("public <NE extends NamedElement> List<NE> getNamedElementsByKind(Class<NE> class_) {");
-        _builder.newLine();
-        _builder.append("\t\t");
-        _builder.append("List<NE> result = new ArrayList<NE>(); ");
-        _builder.newLine();
-        _builder.append("\t\t");
-        _builder.append("for (NamedElement namedElement : getNamedElements()) {");
-        _builder.newLine();
-        _builder.append("\t\t\t");
-        _builder.append("if (class_.isAssignableFrom(namedElement.getClass())) {");
-        _builder.newLine();
-        _builder.append("\t\t\t\t");
-        _builder.append("result.add((NE)namedElement);");
-        _builder.newLine();
-        _builder.append("\t\t\t");
-        _builder.append("}");
-        _builder.newLine();
-        _builder.append("\t\t");
-        _builder.append("}");
-        _builder.newLine();
-        _builder.append("\t\t");
-        _builder.append("return result;");
-        _builder.newLine();
-        _builder.append("\t");
-        _builder.append("}");
-        _builder.newLine();
-        _builder.append("}");
-        _builder.newLine();
-        writer.append(_builder.toString());
-        writer.close();
-      }
-    } catch (Throwable _e) {
-      throw Exceptions.sneakyThrow(_e);
-    }
-  }
-  
-  protected void generateAutoLookupSolver(final GenPackage genPackage, final GenPackage basePackage) {
-    try {
-      EPackage ePackage = genPackage.getEcorePackage();
-      String fqPackageItf = this.genModelHelper.getQualifiedPackageInterfaceName(ePackage);
-      List<Operation> lookupOps = this.getLookupMethods(basePackage);
-      boolean isDerived = this.isDerived();
-      String className = (this.projectPrefix + "LookupSolver");
-      String superClassName = (this.superProjectPrefix + "LookupSolver");
-      MergeWriter writer = new MergeWriter(((this.lookupArtifactsOutputFolder + className) + ".java"));
-      StringConcatenation _builder = new StringConcatenation();
-      String _generateHeaderWithTemplate = this.generateHeaderWithTemplate(ePackage, this.lookupArtifactsJavaPackage);
-      _builder.append(_generateHeaderWithTemplate);
-      _builder.newLineIfNotEmpty();
-      _builder.newLine();
-      _builder.append("import org.eclipse.jdt.annotation.NonNull;");
-      _builder.newLine();
-      _builder.append("import org.eclipse.ocl.pivot.evaluation.Executor;");
-      _builder.newLine();
-      {
-        Set<String> _lookupTypeNames = this.getLookupTypeNames(lookupOps, "Unqualified");
-        for(final String typeName : _lookupTypeNames) {
-          _builder.append("import ");
-          _builder.append(this.visitorPackageName);
-          _builder.append(".");
-          _builder.append(this.projectPrefix);
-          _builder.append("Unqualified");
-          _builder.append(typeName);
-          _builder.append("LookupVisitor;");
-          _builder.newLineIfNotEmpty();
-        }
-      }
-      {
-        Set<String> _lookupTypeNames_1 = this.getLookupTypeNames(lookupOps, "Exported");
-        for(final String typeName_1 : _lookupTypeNames_1) {
-          _builder.append("import ");
-          _builder.append(this.visitorPackageName);
-          _builder.append(".");
-          _builder.append(this.projectPrefix);
-          _builder.append("Exported");
-          _builder.append(typeName_1);
-          _builder.append("LookupVisitor;");
-          _builder.newLineIfNotEmpty();
-        }
-      }
-      {
-        Set<String> _lookupTypeNames_2 = this.getLookupTypeNames(lookupOps, "Qualified");
-        for(final String typeName_2 : _lookupTypeNames_2) {
-          _builder.append("import ");
-          _builder.append(this.visitorPackageName);
-          _builder.append(".");
-          _builder.append(this.projectPrefix);
-          _builder.append("Qualified");
-          _builder.append(typeName_2);
-          _builder.append("LookupVisitor;");
-          _builder.newLineIfNotEmpty();
-        }
-      }
-      _builder.newLine();
-      {
-        if (isDerived) {
-          _builder.append("import ");
-          _builder.append(this.superLookupPackageName);
-          _builder.append(".util.");
-          _builder.append(superClassName);
-          _builder.append(";");
-          _builder.newLineIfNotEmpty();
-          _builder.append("import ");
-          _builder.append(this.baseLookupPackageName);
-          _builder.append(".util.");
-          String _prefix = basePackage.getPrefix();
-          _builder.append(_prefix);
-          _builder.append("LookupResult;");
-          _builder.newLineIfNotEmpty();
-          _builder.append("import ");
-          _builder.append(this.baseLookupPackageName);
-          _builder.append(".util.");
-          String _prefix_1 = basePackage.getPrefix();
-          _builder.append(_prefix_1);
-          _builder.append("LookupResultImpl;");
-          _builder.newLineIfNotEmpty();
-          _builder.append("import ");
-          _builder.append(this.baseLookupPackageName);
-          _builder.append(".util.");
-          String _prefix_2 = basePackage.getPrefix();
-          _builder.append(_prefix_2);
-          _builder.append("SingleResultLookupEnvironment;");
-          _builder.newLineIfNotEmpty();
-        }
-      }
-      _builder.newLine();
-      _builder.append("public class ");
-      _builder.append(className);
-      {
-        if (isDerived) {
-          _builder.append(" extends ");
-          _builder.append(superClassName);
-        }
-      }
-      _builder.append(" {");
-      _builder.newLineIfNotEmpty();
-      _builder.append("\t");
-      _builder.newLine();
-      _builder.append("\t");
-      {
-        if ((!isDerived)) {
-          _builder.append("protected final @NonNull Executor executor;");
-          _builder.newLineIfNotEmpty();
-          _builder.append("\t");
-          _builder.newLine();
-        }
-      }
-      _builder.append("\t");
-      _builder.append("public ");
-      _builder.append(className, "\t");
-      _builder.append(" (@NonNull Executor executor) {");
-      _builder.newLineIfNotEmpty();
-      {
-        if (isDerived) {
-          _builder.append("\t\t");
-          _builder.append("super(executor);");
-          _builder.newLine();
-        } else {
-          _builder.append("\t\t");
-          _builder.append("this.executor = executor;");
-          _builder.newLine();
-        }
-      }
-      _builder.append("\t");
-      _builder.append("}");
-      _builder.newLine();
-      _builder.append("\t");
-      _builder.newLine();
-      {
-        for(final Operation op : lookupOps) {
-          _builder.append("\t");
-          final String opName = op.getName();
-          _builder.newLineIfNotEmpty();
-          _builder.append("\t");
-          final boolean isExportedLookup = this.isExportedLookupOperation(op);
-          _builder.newLineIfNotEmpty();
-          _builder.append("\t");
-          final String lookupVisitorName = this.getLookupVisitorName(op, op.getType().getName());
-          _builder.newLineIfNotEmpty();
-          _builder.append("\t");
-          final boolean hasAdditionalFilter = this.hasAdditionalFilterArgs(op);
-          _builder.newLineIfNotEmpty();
-          _builder.append("\t");
-          final String lookupVars = this.getLookupArgs(op);
-          _builder.newLineIfNotEmpty();
-          _builder.append("\t");
-          final String typeFQName = this.getTypeFQName(op.getType());
-          _builder.newLineIfNotEmpty();
-          _builder.append("\t");
-          final String typeLiteral = this.getTypeLiteral(op.getType());
-          _builder.newLineIfNotEmpty();
-          _builder.append("\t");
-          _builder.newLine();
-          _builder.append("\t");
-          _builder.append("public ");
-          String _prefix_3 = basePackage.getPrefix();
-          _builder.append(_prefix_3, "\t");
-          _builder.append("LookupResult<");
-          _builder.append(typeFQName, "\t");
-          _builder.append("> ");
-          _builder.append(opName, "\t");
-          _builder.append("(");
-          String _typeFQName = this.getTypeFQName(op.getOwningClass());
-          _builder.append(_typeFQName, "\t");
-          _builder.append(" context");
-          {
-            List<Parameter> _ownedParameters = op.getOwnedParameters();
-            for(final Parameter param : _ownedParameters) {
-              _builder.append(", ");
-              String _typeFQName_1 = this.getTypeFQName(param.getType());
-              _builder.append(_typeFQName_1, "\t");
-              _builder.append(" ");
-              String _name = param.getName();
-              _builder.append(_name, "\t");
-            }
-          }
-          _builder.append(") {");
-          _builder.newLineIfNotEmpty();
-          {
-            if (hasAdditionalFilter) {
-              _builder.append("\t");
-              _builder.append("\t");
-              String _name_1 = op.getType().getName();
-              _builder.append(_name_1, "\t\t");
-              _builder.append("Filter filter = new ");
-              String _name_2 = op.getType().getName();
-              _builder.append(_name_2, "\t\t");
-              _builder.append("Filter(executor, ");
-              String _filterArgs = this.getFilterArgs(op);
-              _builder.append(_filterArgs, "\t\t");
-              _builder.append(");");
-              _builder.newLineIfNotEmpty();
-            }
-          }
-          _builder.append("\t");
-          _builder.append("\t");
-          String _prefix_4 = basePackage.getPrefix();
-          _builder.append(_prefix_4, "\t\t");
-          _builder.append("SingleResultLookupEnvironment _lookupEnv = new ");
-          String _prefix_5 = basePackage.getPrefix();
-          _builder.append(_prefix_5, "\t\t");
-          _builder.append("SingleResultLookupEnvironment(executor, ");
-          _builder.append(fqPackageItf, "\t\t");
-          _builder.append(".Literals.");
-          _builder.append(typeLiteral, "\t\t");
-          _builder.append(lookupVars, "\t\t");
-          _builder.append(");");
-          _builder.newLineIfNotEmpty();
-          _builder.append("\t");
-          _builder.append("\t");
-          _builder.append(lookupVisitorName, "\t\t");
-          _builder.append(" _lookupVisitor = new ");
-          _builder.append(lookupVisitorName, "\t\t");
-          _builder.append("(_lookupEnv");
-          {
-            if (isExportedLookup) {
-              _builder.append(", importer");
-            }
-          }
-          _builder.append(");");
-          _builder.newLineIfNotEmpty();
-          _builder.append("\t");
-          _builder.append("\t");
-          _builder.append("context.accept(_lookupVisitor);");
-          _builder.newLine();
-          _builder.append("\t");
-          _builder.append("\t");
-          _builder.append("return new ");
-          String _prefix_6 = basePackage.getPrefix();
-          _builder.append(_prefix_6, "\t\t");
-          _builder.append("LookupResultImpl<");
-          _builder.append(typeFQName, "\t\t");
-          _builder.append(">");
-          _builder.newLineIfNotEmpty();
-          _builder.append("\t");
-          _builder.append("\t\t\t");
-          _builder.append("(_lookupEnv.getNamedElementsByKind(");
-          _builder.append(typeFQName, "\t\t\t\t");
-          _builder.append(".class));");
-          _builder.newLineIfNotEmpty();
-          _builder.append("\t");
-          _builder.append("}");
-          _builder.newLine();
-        }
-      }
-      _builder.append("}");
-      _builder.newLine();
-      writer.append(_builder.toString());
-      writer.close();
-    } catch (Throwable _e) {
-      throw Exceptions.sneakyThrow(_e);
-    }
-  }
-  
-  protected void generateAutoCommonLookupVisitor(final EPackage ePackage) {
-    try {
-      String fqPackageItf = this.genModelHelper.getQualifiedPackageInterfaceName(ePackage);
-      boolean isDerived = this.isDerived();
-      StringConcatenation _builder = new StringConcatenation();
-      _builder.append("Abstract");
-      _builder.append(this.projectPrefix);
-      _builder.append("CommonLookupVisitor");
-      String visitorName = _builder.toString();
-      StringConcatenation _builder_1 = new StringConcatenation();
-      _builder_1.append("Abstract");
-      _builder_1.append(this.superProjectPrefix);
-      _builder_1.append("CommonLookupVisitor");
-      String superVisitorName = _builder_1.toString();
-      StringConcatenation _builder_2 = new StringConcatenation();
-      _builder_2.append("AbstractExtending");
-      {
-        if (isDerived) {
-          _builder_2.append(this.projectPrefix);
-        }
-      }
-      _builder_2.append("Visitor");
-      String superClassName = _builder_2.toString();
-      MergeWriter writer = new MergeWriter(((this.outputFolder + visitorName) + ".java"));
-      StringConcatenation _builder_3 = new StringConcatenation();
-      String _generateHeaderWithTemplate = this.generateHeaderWithTemplate(ePackage, this.visitorPackageName);
-      _builder_3.append(_generateHeaderWithTemplate);
-      _builder_3.newLineIfNotEmpty();
-      _builder_3.append("import org.eclipse.jdt.annotation.NonNull;");
-      _builder_3.newLine();
-      _builder_3.append("import org.eclipse.jdt.annotation.Nullable;");
-      _builder_3.newLine();
-      _builder_3.append("import org.eclipse.ocl.pivot.internal.evaluation.EvaluationCache;");
-      _builder_3.newLine();
-      {
-        if ((!isDerived)) {
-          _builder_3.append("import org.eclipse.ocl.pivot.internal.evaluation.ExecutorInternal.ExecutorInternalExtension;");
-          _builder_3.newLine();
-        }
-      }
-      _builder_3.newLine();
-      _builder_3.append("import ");
-      _builder_3.append(this.baseLookupPackageName);
-      _builder_3.append(".LookupEnvironment;");
-      _builder_3.newLineIfNotEmpty();
-      _builder_3.append("import ");
-      _builder_3.append(this.visitablePackageName);
-      _builder_3.append(".");
-      _builder_3.append(this.visitableClassName);
-      _builder_3.append(";");
-      _builder_3.newLineIfNotEmpty();
-      {
-        if (isDerived) {
-          _builder_3.append("import ");
-          _builder_3.append(this.superVisitorPackageName);
-          _builder_3.append(".");
-          _builder_3.append(superVisitorName);
-          _builder_3.append(";");
-          _builder_3.newLineIfNotEmpty();
-        }
-      }
-      _builder_3.newLine();
-      _builder_3.append("public abstract class ");
-      _builder_3.append(visitorName);
-      _builder_3.newLineIfNotEmpty();
-      _builder_3.append("\t");
-      _builder_3.append("extends ");
-      _builder_3.append(superClassName, "\t");
-      _builder_3.append("<@Nullable LookupEnvironment, @NonNull LookupEnvironment> {");
-      _builder_3.newLineIfNotEmpty();
-      _builder_3.newLine();
-      _builder_3.append("\t");
-      {
-        if ((!isDerived)) {
-          _builder_3.append("protected final @NonNull EvaluationCache evaluationCache;");
-        }
-      }
-      _builder_3.newLineIfNotEmpty();
-      _builder_3.append("\t");
-      {
-        if (isDerived) {
-          _builder_3.append("private ");
-          _builder_3.append(superVisitorName, "\t");
-          _builder_3.append(" delegate;");
-        }
-      }
-      _builder_3.newLineIfNotEmpty();
-      _builder_3.append("\t");
-      _builder_3.newLine();
-      _builder_3.append("\t");
-      _builder_3.append("protected ");
-      _builder_3.append(visitorName, "\t");
-      _builder_3.append("(@NonNull LookupEnvironment context) {");
-      _builder_3.newLineIfNotEmpty();
-      _builder_3.append("\t\t");
-      _builder_3.append("super(context);");
-      _builder_3.newLine();
-      _builder_3.append("\t\t");
-      {
-        if ((!isDerived)) {
-          _builder_3.append("this.evaluationCache = ((ExecutorInternalExtension)context.getExecutor()).getEvaluationCache();");
-        }
-      }
-      _builder_3.newLineIfNotEmpty();
-      _builder_3.append("\t\t");
-      {
-        if (isDerived) {
-          _builder_3.append("this.delegate = createSuperLangVisitor();");
-        }
-      }
-      _builder_3.newLineIfNotEmpty();
-      _builder_3.append("\t");
-      _builder_3.append("}");
-      _builder_3.newLine();
-      _builder_3.append("\t");
-      _builder_3.newLine();
-      _builder_3.append("\t");
-      _builder_3.append("@Override");
-      _builder_3.newLine();
-      _builder_3.append("\t");
-      _builder_3.append("public final LookupEnvironment visiting(@NonNull Visitable visitable) {");
-      _builder_3.newLine();
-      {
-        if (isDerived) {
-          _builder_3.append("\t\t");
-          _builder_3.append("return ");
-          _builder_3.append(fqPackageItf, "\t\t");
-          _builder_3.append(".eINSTANCE == visitable.eClass().getEPackage()");
-          _builder_3.newLineIfNotEmpty();
-          _builder_3.append("\t\t");
-          _builder_3.append("\t");
-          _builder_3.append("? doVisiting(visitable)");
-          _builder_3.newLine();
-          _builder_3.append("\t\t");
-          _builder_3.append("\t");
-          _builder_3.append(": visitable.accept(getSuperLangVisitor());");
-          _builder_3.newLine();
-        } else {
-          _builder_3.append("\t\t");
-          _builder_3.append("return doVisiting(visitable);");
-          _builder_3.newLine();
-        }
-      }
-      _builder_3.append("\t");
-      _builder_3.append("}");
-      _builder_3.newLine();
-      _builder_3.append("\t");
-      _builder_3.newLine();
-      {
-        if (isDerived) {
-          _builder_3.append("\t");
-          _builder_3.append("protected ");
-          _builder_3.append(superVisitorName, "\t");
-          _builder_3.append(" getSuperLangVisitor(){");
-          _builder_3.newLineIfNotEmpty();
-          _builder_3.append("\t");
-          _builder_3.append("\t");
-          _builder_3.append("if (delegate == null) {");
-          _builder_3.newLine();
-          _builder_3.append("\t");
-          _builder_3.append("\t\t");
-          _builder_3.append("delegate = createSuperLangVisitor();");
-          _builder_3.newLine();
-          _builder_3.append("\t");
-          _builder_3.append("\t");
-          _builder_3.append("}");
-          _builder_3.newLine();
-          _builder_3.append("\t");
-          _builder_3.append("\t");
-          _builder_3.append("return delegate;");
-          _builder_3.newLine();
-          _builder_3.append("\t");
-          _builder_3.append("}");
-          _builder_3.newLine();
-        }
-      }
-      _builder_3.append("\t");
-      _builder_3.newLine();
-      _builder_3.append("\t");
-      _builder_3.append("abstract protected LookupEnvironment doVisiting(@NonNull Visitable visitable);");
-      _builder_3.newLine();
-      _builder_3.append("\t");
-      _builder_3.newLine();
-      _builder_3.append("\t");
-      {
-        if (isDerived) {
-          _builder_3.append("abstract protected ");
-          _builder_3.append(superVisitorName, "\t");
-          _builder_3.append("  createSuperLangVisitor();");
-        }
-      }
-      _builder_3.newLineIfNotEmpty();
-      _builder_3.append("}");
-      _builder_3.newLine();
-      writer.append(_builder_3.toString());
-      writer.close();
-    } catch (Throwable _e) {
-      throw Exceptions.sneakyThrow(_e);
-    }
-  }
-  
-  @Override
-  public void generateVisitors(final GenPackage genPackage) {
-    this.genModelHelper = this.createGenModelHelper(genPackage);
-    this.lookupArtifactsJavaPackage = (this.lookupPackageName + ".util");
-    String _replace = this.lookupArtifactsJavaPackage.replace(".", "/");
-    String _plus = (this.modelFolder + _replace);
-    String _plus_1 = (_plus + "/");
-    this.lookupArtifactsOutputFolder = _plus_1;
-    EPackage ePackage = genPackage.getEcorePackage();
-    this.generateAutoLookupResultClass(ePackage);
-    this.generateAutoLookupResultItf(ePackage);
-    this.generateAutoLookupFilterItf(ePackage);
-    this.generateAutoLookupFilterClass(ePackage);
-    this.generateSingleResultLookupEnvironment(ePackage);
-    this.generateAutoLookupSolver(genPackage, this.baseGenPackage);
-    this.generateAutoCommonLookupVisitor(ePackage);
-    this.doGenerateVisitors(genPackage);
-  }
-  
-  private List<Operation> getLookupMethods(final GenPackage genPackage) {
-    List<Operation> result = new ArrayList<Operation>();
-    EnvironmentFactory envFact = PivotUtilInternal.getEnvironmentFactory(genPackage.getEcorePackage().eResource());
-    List<org.eclipse.ocl.pivot.Package> _targetPackages = LookupCGUtil.getTargetPackages(genPackage, envFact, this.lookupFilePath, this.projectName);
-    for (final org.eclipse.ocl.pivot.Package oclPackage : _targetPackages) {
-      List<org.eclipse.ocl.pivot.Class> _ownedClasses = oclPackage.getOwnedClasses();
-      for (final org.eclipse.ocl.pivot.Class oclClass : _ownedClasses) {
-        List<Operation> _ownedOperations = oclClass.getOwnedOperations();
-        for (final Operation oclOp : _ownedOperations) {
-          boolean _isLookupOperation = this.isLookupOperation(oclOp);
-          if (_isLookupOperation) {
-            result.add(oclOp);
-          }
-        }
-      }
-    }
-    return result;
-  }
-  
-  private Set<String> getLookupTypeNames(final List<Operation> lookupOps, final String lookupProtocol) {
-    final HashSet<String> result = CollectionLiterals.<String>newHashSet();
-    for (final Operation op : lookupOps) {
-      boolean _contains = op.getName().contains(lookupProtocol);
-      if (_contains) {
-        result.add(op.getType().getName());
-      }
-    }
-    return result;
-  }
-  
-  private boolean isLookupOperation(final Operation op) {
-    boolean _startsWith = op.getName().startsWith("_lookup");
-    boolean _not = (!_startsWith);
-    if (_not) {
-      return false;
-    }
-    List<Parameter> _ownedParameters = op.getOwnedParameters();
-    for (final Parameter param : _ownedParameters) {
-      boolean _equals = "env".equals(param.getName());
-      if (_equals) {
-        return false;
-      }
-    }
-    return true;
-  }
-  
-  private boolean isExportedLookupOperation(final Operation op) {
-    return (this.isLookupOperation(op) && op.getName().contains("Exported"));
-  }
-  
-  private GenModelHelper createGenModelHelper(final GenPackage genPackage) {
-    PivotMetamodelManager mManager = PivotUtilInternal.getEnvironmentFactory(genPackage.getEcorePackage().eResource()).getMetamodelManager();
-    return new AbstractGenModelHelper(mManager);
-  }
-  
-  private String getTypeLiteral(final Type type) {
-    GenClassifier genClassifier = this.genModelHelper.getGenClassifier(((org.eclipse.ocl.pivot.Class) type));
-    return ClassUtil.<GenClassifier>nonNullState(genClassifier).getClassifierID();
-  }
-  
-  private String getTypeFQName(final Type type) {
-    String _xifexpression = null;
-    if ((type instanceof CollectionType)) {
-      StringConcatenation _builder = new StringConcatenation();
-      _builder.append("java.util.List<");
-      String _typeFQName = this.getTypeFQName(((CollectionType)type).getElementType());
-      _builder.append(_typeFQName);
-      _builder.append(">");
-      _xifexpression = _builder.toString();
-    } else {
-      _xifexpression = this.genModelHelper.getEcoreInterfaceName(((org.eclipse.ocl.pivot.Class) type));
-    }
-    return _xifexpression;
-  }
-  
-  private String getLookupVisitorName(final Operation op, final String typeName) {
-    String _xifexpression = null;
-    boolean _contains = op.getName().contains("Qualified");
-    if (_contains) {
-      StringConcatenation _builder = new StringConcatenation();
-      _builder.append(this.projectPrefix);
-      _builder.append("Qualified");
-      _builder.append(typeName);
-      _builder.append("LookupVisitor");
-      _xifexpression = _builder.toString();
-    } else {
-      String _xifexpression_1 = null;
-      boolean _contains_1 = op.getName().contains("Exported");
-      if (_contains_1) {
-        StringConcatenation _builder_1 = new StringConcatenation();
-        _builder_1.append(this.projectPrefix);
-        _builder_1.append("Exported");
-        _builder_1.append(typeName);
-        _builder_1.append("LookupVisitor");
-        _xifexpression_1 = _builder_1.toString();
-      } else {
-        StringConcatenation _builder_2 = new StringConcatenation();
-        _builder_2.append(this.projectPrefix);
-        _builder_2.append("Unqualified");
-        _builder_2.append(typeName);
-        _builder_2.append("LookupVisitor");
-        _xifexpression_1 = _builder_2.toString();
-      }
-      _xifexpression = _xifexpression_1;
-    }
-    return _xifexpression;
-  }
-  
-  private boolean hasAdditionalFilterArgs(final Operation op) {
-    boolean _xblockexpression = false;
-    {
-      final List<Parameter> params = op.getOwnedParameters();
-      boolean _xifexpression = false;
-      boolean _isExportedLookupOperation = this.isExportedLookupOperation(op);
-      if (_isExportedLookupOperation) {
-        int _size = params.size();
-        _xifexpression = (_size > 2);
-      } else {
-        int _size_1 = params.size();
-        _xifexpression = (_size_1 > 1);
-      }
-      _xblockexpression = _xifexpression;
-    }
-    return _xblockexpression;
-  }
-  
-  private String getLookupArgs(final Operation op) {
-    String _xblockexpression = null;
-    {
-      final List<Parameter> params = op.getOwnedParameters();
-      Parameter _xifexpression = null;
-      boolean _isExportedLookupOperation = this.isExportedLookupOperation(op);
-      if (_isExportedLookupOperation) {
-        _xifexpression = params.get(1);
-      } else {
-        _xifexpression = params.get(0);
-      }
-      final Parameter nameParam = _xifexpression;
-      StringConcatenation _builder = new StringConcatenation();
-      _builder.append(",");
-      String _name = nameParam.getName();
-      _builder.append(_name);
-      {
-        boolean _hasAdditionalFilterArgs = this.hasAdditionalFilterArgs(op);
-        if (_hasAdditionalFilterArgs) {
-          _builder.append(",filter");
-        }
-      }
-      _xblockexpression = _builder.toString();
-    }
-    return _xblockexpression;
-  }
-  
-  private String getFilterArgs(final Operation op) {
-    String _xblockexpression = null;
-    {
-      final StringBuffer sb = new StringBuffer();
-      int _xifexpression = (int) 0;
-      boolean _isExportedLookupOperation = this.isExportedLookupOperation(op);
-      if (_isExportedLookupOperation) {
-        _xifexpression = 2;
-      } else {
-        _xifexpression = 1;
-      }
-      final int filterArgsIndex = _xifexpression;
-      final List<Parameter> params = op.getOwnedParameters();
-      boolean first = true;
-      for (int i = filterArgsIndex; (i < params.size()); i++) {
-        {
-          if (first) {
-            first = false;
-          } else {
-            sb.append(",");
-          }
-          StringConcatenation _builder = new StringConcatenation();
-          String _name = params.get(i).getName();
-          _builder.append(_name);
-          sb.append(_builder);
-        }
-      }
-      _xblockexpression = sb.toString();
-    }
-    return _xblockexpression;
-  }
-}
diff --git a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/genmodel/OCLGenModelUtil.java b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/genmodel/OCLGenModelUtil.java
index 2772828..8707a82 100644
--- a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/genmodel/OCLGenModelUtil.java
+++ b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/genmodel/OCLGenModelUtil.java
@@ -166,12 +166,10 @@
 			listConstructor = listConstructor.replaceAll(f0, f2);
 		}
 		else if (r0.length() > f0.length()) {
-			listConstructor = listConstructor.replaceAll(r0, r2);
-			listConstructor = listConstructor.replaceAll(f0, f2);
+			listConstructor = listConstructor.replaceAll(r0, r2).replaceAll(f0, f2);
 		}
 		else {
-			listConstructor = listConstructor.replaceAll(f0, f2);
-			listConstructor = listConstructor.replaceAll(r0, r2);
+			listConstructor = listConstructor.replaceAll(f0, f2).replaceAll(r0, r2);
 		}
 		return listConstructor;
 	}