[579037] Avoid assuming custom PrimitiveTypes
diff --git a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/GenerateOCLCommonXtend.xtend b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/GenerateOCLCommonXtend.xtend
index bcefe13..e1bb5e7 100644
--- a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/GenerateOCLCommonXtend.xtend
+++ b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/GenerateOCLCommonXtend.xtend
@@ -123,7 +123,7 @@
 			«FOR pkge : sortedPackages»
 
 				«FOR type : ClassUtil.nullFree(pkge2primitiveTypes.get(pkge))»
-				private final @NonNull PrimitiveType «type.getPrefixedSymbolNameWithoutNormalization("_" + type.partialName())» = createPrimitiveType("«type.name»");
+				private final @NonNull Class «type.getPrefixedSymbolNameWithoutNormalization("_" + type.partialName())» = createPrimitiveType("«type.name»");
 				«ENDFOR»
 			«ENDFOR»
 		'''
@@ -272,6 +272,8 @@
 			«FOR name : externals»«var element = ClassUtil.nonNullState(name2external.get(name))»
 			«IF element instanceof Package»
 			private final @NonNull Package «getPrefixedSymbolName(element, name)» = «element.getExternalReference()»;
+			«ELSEIF element instanceof PrimitiveType»
+			private final @NonNull Class «getPrefixedSymbolName(element, name)» = «element.getExternalReference()»;
 			«ELSE»
 			private final @NonNull «element.eClass().getName()» «getPrefixedSymbolName(element, name)» = «element.getExternalReference()»;
 			«ENDIF»
diff --git a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/GenerateOCLmetamodelXtend.xtend b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/GenerateOCLmetamodelXtend.xtend
index 42bda99..7e37cdb 100644
--- a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/GenerateOCLmetamodelXtend.xtend
+++ b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/GenerateOCLmetamodelXtend.xtend
@@ -84,42 +84,51 @@
 			 * Do not edit it.
 			 *******************************************************************************/
 			package	«javaPackageName»;
-			
+
 			import java.io.IOException;
-			import java.math.BigInteger;
 			import java.util.List;
 			import java.util.Map;
-			
+
 			import org.eclipse.emf.common.notify.Notification;
 			import org.eclipse.emf.common.notify.NotificationChain;
 			import org.eclipse.emf.common.util.URI;
 			import org.eclipse.emf.ecore.resource.Resource;
 			import org.eclipse.emf.ecore.resource.ResourceSet;
-			import org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl;
 			import org.eclipse.jdt.annotation.NonNull;
 			import org.eclipse.jdt.annotation.Nullable;
-			import org.eclipse.ocl.pivot.*;
+			import org.eclipse.ocl.pivot.AnyType;
+			import org.eclipse.ocl.pivot.BagType;
+			import org.eclipse.ocl.pivot.BooleanType;
 			import org.eclipse.ocl.pivot.Class;
+			import org.eclipse.ocl.pivot.CollectionType;
+			import org.eclipse.ocl.pivot.DataType;
+			import org.eclipse.ocl.pivot.Enumeration;
+			import org.eclipse.ocl.pivot.EnumerationLiteral;
+			import org.eclipse.ocl.pivot.Model;
+			import org.eclipse.ocl.pivot.Operation;
+			import org.eclipse.ocl.pivot.OrderedSetType;
 			import org.eclipse.ocl.pivot.Package;
+			import org.eclipse.ocl.pivot.Parameter;
+			import org.eclipse.ocl.pivot.PivotPackage;
+			import org.eclipse.ocl.pivot.Property;
+			import org.eclipse.ocl.pivot.SequenceType;
+			import org.eclipse.ocl.pivot.SetType;
+			import org.eclipse.ocl.pivot.TemplateParameter;
 			import org.eclipse.ocl.pivot.ids.IdManager;
 			import org.eclipse.ocl.pivot.internal.complete.StandardLibraryInternal;
 			import org.eclipse.ocl.pivot.internal.library.StandardLibraryContribution;
 			import org.eclipse.ocl.pivot.internal.resource.ASResourceImpl;
 			import org.eclipse.ocl.pivot.internal.resource.OCLASResourceFactory;
 			import org.eclipse.ocl.pivot.internal.utilities.AbstractContents;
-			import org.eclipse.ocl.pivot.library.LibraryFeature;
 			import org.eclipse.ocl.pivot.model.OCLstdlib;
-			import org.eclipse.ocl.pivot.utilities.ClassUtil;
 			import org.eclipse.ocl.pivot.utilities.PivotConstants;
-			import org.eclipse.ocl.pivot.internal.utilities.PivotObjectImpl;
-			import org.eclipse.ocl.pivot.utilities.PivotUtil;
 			«IF ((externalPackages !== null) && !externalPackages.isEmpty())»
-			
+
 			«FOR externalPackage : externalPackages»
 				«externalPackage.declarePackageImport()»
 			«ENDFOR»
 			«ENDIF»
-			
+
 			/**
 			 * This is the pivot representation of the «uri» metamodel
 			 * auto-generated from «sourceFile».
diff --git a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/GenerateOCLstdlibXtend.xtend b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/GenerateOCLstdlibXtend.xtend
index 0e1b09b..8780ec7 100644
--- a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/GenerateOCLstdlibXtend.xtend
+++ b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/GenerateOCLstdlibXtend.xtend
@@ -136,31 +136,44 @@
 			 * Do not edit it.
 			 *******************************************************************************/
 			package	«javaPackageName»;
-			
+
 			import java.io.IOException;
-			import java.util.ArrayList;
 			import java.util.List;
 			import java.util.Map;
-			import java.util.Set;
-			
+
 			import org.eclipse.emf.common.notify.Notification;
 			import org.eclipse.emf.common.notify.NotificationChain;
-			import org.eclipse.emf.common.util.TreeIterator;
 			import org.eclipse.emf.common.util.URI;
-			import org.eclipse.emf.ecore.EObject;
 			import org.eclipse.emf.ecore.EPackage;
-			import org.eclipse.emf.ecore.EReference;
-			import org.eclipse.emf.ecore.impl.BasicEObjectImpl;
 			import org.eclipse.emf.ecore.resource.Resource;
 			import org.eclipse.emf.ecore.resource.ResourceSet;
-			import org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl;
 			import org.eclipse.jdt.annotation.NonNull;
 			import org.eclipse.jdt.annotation.Nullable;
-			import org.eclipse.ocl.pivot.*;
+			import org.eclipse.ocl.pivot.AnyType;
+			import org.eclipse.ocl.pivot.AssociativityKind;
+			import org.eclipse.ocl.pivot.BagType;
 			import org.eclipse.ocl.pivot.Class;
+			import org.eclipse.ocl.pivot.CollectionType;
+			import org.eclipse.ocl.pivot.InvalidType;
+			import org.eclipse.ocl.pivot.Iteration;
+			import org.eclipse.ocl.pivot.LambdaType;
+			import org.eclipse.ocl.pivot.Library;
+			import org.eclipse.ocl.pivot.MapType;
+			import org.eclipse.ocl.pivot.Model;
+			import org.eclipse.ocl.pivot.Operation;
+			import org.eclipse.ocl.pivot.OrderedSetType;
 			import org.eclipse.ocl.pivot.Package;
+			import org.eclipse.ocl.pivot.Parameter;
+			import org.eclipse.ocl.pivot.Precedence;
+			import org.eclipse.ocl.pivot.PrimitiveType;
+			import org.eclipse.ocl.pivot.Property;
+			import org.eclipse.ocl.pivot.SelfType;
+			import org.eclipse.ocl.pivot.SequenceType;
+			import org.eclipse.ocl.pivot.SetType;
+			import org.eclipse.ocl.pivot.TemplateParameter;
+			import org.eclipse.ocl.pivot.TupleType;
+			import org.eclipse.ocl.pivot.VoidType;
 			import org.eclipse.ocl.pivot.ids.IdManager;
-			import org.eclipse.ocl.pivot.ids.PackageId;
 			import org.eclipse.ocl.pivot.internal.library.StandardLibraryContribution;
 			import org.eclipse.ocl.pivot.internal.resource.ASResourceImpl;
 			import org.eclipse.ocl.pivot.internal.resource.OCLASResourceFactory;
@@ -168,16 +181,14 @@
 			import org.eclipse.ocl.pivot.internal.utilities.PivotUtilInternal;
 			import org.eclipse.ocl.pivot.model.OCLmetamodel;
 			import org.eclipse.ocl.pivot.utilities.ClassUtil;
-			import org.eclipse.ocl.pivot.utilities.MetamodelManager;
 			import org.eclipse.ocl.pivot.utilities.PivotConstants;
-			import org.eclipse.ocl.pivot.utilities.PivotUtil;
 			«IF ((externalPackages !== null) && !externalPackages.isEmpty())»
-			
+
 			«FOR externalPackage : externalPackages»
 				«externalPackage.declarePackageImport()»
 			«ENDFOR»
 			«ENDIF»
-			
+
 			/**
 			 * This is the «uri» Standard Library
 			 * auto-generated from «sourceFile».
diff --git a/examples/org.eclipse.ocl.examples.codegen/emf-gen/org/eclipse/ocl/examples/codegen/model/CGLibrary.java b/examples/org.eclipse.ocl.examples.codegen/emf-gen/org/eclipse/ocl/examples/codegen/model/CGLibrary.java
index d3ab3af..b30f0bb 100644
--- a/examples/org.eclipse.ocl.examples.codegen/emf-gen/org/eclipse/ocl/examples/codegen/model/CGLibrary.java
+++ b/examples/org.eclipse.ocl.examples.codegen/emf-gen/org/eclipse/ocl/examples/codegen/model/CGLibrary.java
@@ -252,11 +252,11 @@
 		}
 
 		private final @NonNull Package _ocl = getPackage(org.eclipse.ocl.pivot.model.OCLstdlib.getDefaultModel(), "ocl");
-		private final @NonNull PrimitiveType _Boolean = getPrimitiveType(_ocl, "Boolean");
-		private final @NonNull PrimitiveType _Integer = getPrimitiveType(_ocl, "Integer");
+		private final @NonNull Class _Boolean = getPrimitiveType(_ocl, "Boolean");
+		private final @NonNull Class _Integer = getPrimitiveType(_ocl, "Integer");
 		private final @NonNull AnyType _OclAny = getAnyType(_ocl, "OclAny");
 		private final @NonNull Class _OclElement = getClass(_ocl, "OclElement");
-		private final @NonNull PrimitiveType _String = getPrimitiveType(_ocl, "String");
+		private final @NonNull Class _String = getPrimitiveType(_ocl, "String");
 
 		private void installPackages() {
 			model.getOwnedPackages().add(ocl);
diff --git a/plugins/org.eclipse.ocl.pivot/.settings/.api_filters b/plugins/org.eclipse.ocl.pivot/.settings/.api_filters
index e046322..ff62169 100644
--- a/plugins/org.eclipse.ocl.pivot/.settings/.api_filters
+++ b/plugins/org.eclipse.ocl.pivot/.settings/.api_filters
@@ -1515,6 +1515,14 @@
             </message_arguments>
         </filter>
     </resource>
+    <resource path="src/org/eclipse/ocl/pivot/internal/utilities/AbstractContents.java" type="org.eclipse.ocl.pivot.internal.utilities.AbstractContents">
+        <filter id="338792546">
+            <message_arguments>
+                <message_argument value="org.eclipse.ocl.pivot.internal.utilities.AbstractContents"/>
+                <message_argument value="getPrimitiveType(Package, String)"/>
+            </message_arguments>
+        </filter>
+    </resource>
     <resource path="src/org/eclipse/ocl/pivot/internal/utilities/AbstractTechnology.java" type="org.eclipse.ocl.pivot.internal.utilities.AbstractTechnology">
         <filter comment="Bug 512402 workaround" id="576725006">
             <message_arguments>
diff --git a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/model/OCLmetamodel.java b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/model/OCLmetamodel.java
index 77ca920..c916825 100644
--- a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/model/OCLmetamodel.java
+++ b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/model/OCLmetamodel.java
@@ -42,7 +42,6 @@
 import org.eclipse.ocl.pivot.Package;
 import org.eclipse.ocl.pivot.Parameter;
 import org.eclipse.ocl.pivot.PivotPackage;
-import org.eclipse.ocl.pivot.PrimitiveType;
 import org.eclipse.ocl.pivot.Property;
 import org.eclipse.ocl.pivot.SequenceType;
 import org.eclipse.ocl.pivot.SetType;
@@ -55,6 +54,9 @@
 import org.eclipse.ocl.pivot.internal.utilities.AbstractContents;
 import org.eclipse.ocl.pivot.utilities.PivotConstants;
 
+import org.eclipse.ocl.pivot.oclstdlib.OCLstdlibPackage;
+import org.eclipse.ocl.pivot.PivotPackage;
+
 /**
  * This is the pivot representation of the http://www.eclipse.org/ocl/2015/Pivot metamodel
  * auto-generated from /org.eclipse.ocl.pivot/model/Pivot.ecore.
@@ -259,20 +261,20 @@
 
 		private final @NonNull Package _ocl = standardLibrary;
 		private final @NonNull BagType _Bag = getBagType(_ocl, "Bag");
-		private final @NonNull BooleanType _Boolean = getBooleanType(_ocl, "Boolean");
+		private final @NonNull Class _Boolean = getBooleanType(_ocl, "Boolean");
 		private final @NonNull CollectionType _Collection = getCollectionType(_ocl, "Collection");
-		private final @NonNull PrimitiveType _Integer = getPrimitiveType(_ocl, "Integer");
+		private final @NonNull Class _Integer = getPrimitiveType(_ocl, "Integer");
 		private final @NonNull AnyType _OclAny = getAnyType(_ocl, "OclAny");
 		private final @NonNull Class _OclElement = getClass(_ocl, "OclElement");
 		private final @NonNull Class _OclEnumeration = getClass(_ocl, "OclEnumeration");
 		private final @NonNull CollectionType _OrderedCollection = getCollectionType(_ocl, "OrderedCollection");
 		private final @NonNull OrderedSetType _OrderedSet = getOrderedSetType(_ocl, "OrderedSet");
-		private final @NonNull PrimitiveType _Real = getPrimitiveType(_ocl, "Real");
+		private final @NonNull Class _Real = getPrimitiveType(_ocl, "Real");
 		private final @NonNull SequenceType _Sequence = getSequenceType(_ocl, "Sequence");
 		private final @NonNull SetType _Set = getSetType(_ocl, "Set");
-		private final @NonNull PrimitiveType _String = getPrimitiveType(_ocl, "String");
+		private final @NonNull Class _String = getPrimitiveType(_ocl, "String");
 		private final @NonNull CollectionType _UniqueCollection = getCollectionType(_ocl, "UniqueCollection");
-		private final @NonNull PrimitiveType _UnlimitedNatural = getPrimitiveType(_ocl, "UnlimitedNatural");
+		private final @NonNull Class _UnlimitedNatural = getPrimitiveType(_ocl, "UnlimitedNatural");
 		private final @NonNull TemplateParameter _Bag_T = getTemplateParameter(_Bag, 0);
 		private final @NonNull TemplateParameter _Collection_T = getTemplateParameter(_Collection, 0);
 		private final @NonNull TemplateParameter _OrderedCollection_T = getTemplateParameter(_OrderedCollection, 0);
diff --git a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/model/OCLstdlib.java b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/model/OCLstdlib.java
index eecdabb..8252a1d 100644
--- a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/model/OCLstdlib.java
+++ b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/model/OCLstdlib.java
@@ -59,10 +59,11 @@
 import org.eclipse.ocl.pivot.internal.resource.OCLASResourceFactory;
 import org.eclipse.ocl.pivot.internal.utilities.AbstractContents;
 import org.eclipse.ocl.pivot.internal.utilities.PivotUtilInternal;
-import org.eclipse.ocl.pivot.oclstdlib.OCLstdlibPackage;
 import org.eclipse.ocl.pivot.utilities.ClassUtil;
 import org.eclipse.ocl.pivot.utilities.PivotConstants;
 
+import org.eclipse.ocl.pivot.oclstdlib.OCLstdlibPackage;
+
 /**
  * This is the http://www.eclipse.org/ocl/2015/Library Standard Library
  * auto-generated from /org.eclipse.ocl.pivot/model/OCL-2.5.oclstdlib.
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/utilities/AbstractContents.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/utilities/AbstractContents.java
index 417b3e3..dba20ef 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/utilities/AbstractContents.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/utilities/AbstractContents.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2012, 2018 Willink Transformations and others.
+ * Copyright (c) 2012, 2022 Willink Transformations 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
@@ -35,7 +35,6 @@
 import org.eclipse.ocl.pivot.OrderedSetType;
 import org.eclipse.ocl.pivot.ParameterVariable;
 import org.eclipse.ocl.pivot.PivotFactory;
-import org.eclipse.ocl.pivot.PrimitiveType;
 import org.eclipse.ocl.pivot.Property;
 import org.eclipse.ocl.pivot.SelfType;
 import org.eclipse.ocl.pivot.SequenceType;
@@ -420,8 +419,11 @@
 		return ClassUtil.nonNullState(NameUtil.getNameable(asModel.getOwnedPackages(), name));
 	}
 
-	protected @NonNull PrimitiveType getPrimitiveType(org.eclipse.ocl.pivot.@NonNull Package asPackage, @NonNull String name) {
-		return (PrimitiveType) ClassUtil.nonNullState(asPackage.getOwnedClass(name));
+	/**
+	 * @since 1.18
+	 */
+	protected org.eclipse.ocl.pivot.@NonNull Class getPrimitiveType(org.eclipse.ocl.pivot.@NonNull Package asPackage, @NonNull String name) {
+		return ClassUtil.nonNullState(asPackage.getOwnedClass(name));
 	}
 
 	protected @NonNull Property getProperty(org.eclipse.ocl.pivot.@NonNull Class asClass, @NonNull String name) {