[517119] Use primitive-specific descriptors
diff --git a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/java/types/BoxedValueDescriptor.java b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/java/types/BoxedValueDescriptor.java
index b15210e..d097b66 100644
--- a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/java/types/BoxedValueDescriptor.java
+++ b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/java/types/BoxedValueDescriptor.java
@@ -35,58 +35,105 @@
 
 	protected abstract @NonNull EcoreDescriptor createEcoreDescriptor();
 
+	protected @Nullable UnboxedValueDescriptor createPrimitiveObjectEcoreDescriptor(@NonNull Class<?> instanceClass) {
+		if (BigDecimal.class == instanceClass) {
+			return new UnboxedValueDescriptor(elementId, BigDecimal.class);
+		}
+		else if (BigInteger.class == instanceClass) {
+			return new UnboxedValueDescriptor(elementId, BigInteger.class);
+		}
+		else if (Byte.class == instanceClass) {
+			return new UnboxedValueDescriptor(elementId, Byte.class);
+		}
+		else if (Character.class == instanceClass) {
+			return new UnboxedValueDescriptor(elementId, Character.class);
+		}
+		else if (Double.class == instanceClass) {
+			return new UnboxedValueDescriptor(elementId, Double.class);
+		}
+		else if (Float.class == instanceClass) {
+			return new UnboxedValueDescriptor(elementId, Float.class);
+		}
+		else if (Integer.class == instanceClass) {
+			return new UnboxedValueDescriptor(elementId, Integer.class);
+		}
+		else if (Long.class == instanceClass) {
+			return new UnboxedValueDescriptor(elementId, Long.class);
+		}
+		else if (Short.class == instanceClass) {
+			return new UnboxedValueDescriptor(elementId, Short.class);
+		}
+		else {
+			return null;
+		}
+	}
+
+	protected @Nullable EcoreDescriptor createPrimitiveTypeEcoreDescriptor(@NonNull Class<?> instanceClass) {
+		if (byte.class == instanceClass) {
+			return new UnboxedValueDescriptor(elementId, byte.class);
+		}
+		else if (char.class == instanceClass) {
+			return new UnboxedValueDescriptor(elementId, char.class);
+		}
+		else if (double.class == instanceClass) {
+			return new DoublePrimitiveDescriptor(elementId);
+		}
+		else if (float.class == instanceClass) {
+			return new FloatPrimitiveDescriptor(elementId);
+		}
+		else if (int.class == instanceClass) {
+			return new IntPrimitiveDescriptor(elementId);
+		}
+		else if (long.class == instanceClass) {
+			return new LongPrimitiveDescriptor(elementId);
+		}
+		else if (short.class == instanceClass) {
+			return new ShortPrimitiveDescriptor(elementId);
+		}
+		else {
+			return null;
+		}
+	}
+
+	protected @Nullable UnboxedDescriptor createPrimitiveTypeUnboxedDescriptor(@NonNull Class<?> instanceClass) {
+		if (byte.class == instanceClass) {
+			return new UnboxedValueDescriptor(elementId, byte.class);
+		}
+		else if (char.class == instanceClass) {
+			return new UnboxedValueDescriptor(elementId, char.class);
+		}
+		else if (double.class == instanceClass) {
+			return new DoublePrimitiveDescriptor(elementId);
+		}
+		else if (float.class == instanceClass) {
+			return new FloatPrimitiveDescriptor(elementId);
+		}
+		else if (int.class == instanceClass) {
+			return new IntPrimitiveDescriptor(elementId);
+		}
+		else if (long.class == instanceClass) {
+			return new LongPrimitiveDescriptor(elementId);
+		}
+		else if (short.class == instanceClass) {
+			return new ShortPrimitiveDescriptor(elementId);
+		}
+		else {
+			return null;
+		}
+	}
+
 	protected abstract @NonNull UnboxedDescriptor createUnboxedDescriptor();
 
 	@Override
 	public @NonNull EcoreDescriptor getEcoreDescriptor(@NonNull CodeGenerator codeGenerator, @Nullable Class<?> instanceClass) {
 		if (instanceClass != null) {
-			if (BigDecimal.class == instanceClass) {
-				return new UnboxedValueDescriptor(elementId, BigDecimal.class);
+			EcoreDescriptor ecoreDescriptor = createPrimitiveObjectEcoreDescriptor(instanceClass);
+			if (ecoreDescriptor != null) {
+				return ecoreDescriptor;
 			}
-			else if (BigInteger.class == instanceClass) {
-				return new UnboxedValueDescriptor(elementId, BigInteger.class);
-			}
-			else if (Byte.class == instanceClass) {
-				return new UnboxedValueDescriptor(elementId, Byte.class);
-			}
-			else if (Character.class == instanceClass) {
-				return new UnboxedValueDescriptor(elementId, Character.class);
-			}
-			else if (Double.class == instanceClass) {
-				return new UnboxedValueDescriptor(elementId, Double.class);
-			}
-			else if (Float.class == instanceClass) {
-				return new UnboxedValueDescriptor(elementId, Float.class);
-			}
-			else if (Integer.class == instanceClass) {
-				return new UnboxedValueDescriptor(elementId, Integer.class);
-			}
-			else if (Long.class == instanceClass) {
-				return new UnboxedValueDescriptor(elementId, Long.class);
-			}
-			else if (Short.class == instanceClass) {
-				return new UnboxedValueDescriptor(elementId, Short.class);
-			}
-			else if (byte.class == instanceClass) {
-				return new UnboxedValueDescriptor(elementId, byte.class);
-			}
-			else if (char.class == instanceClass) {
-				return new UnboxedValueDescriptor(elementId, char.class);
-			}
-			else if (double.class == instanceClass) {
-				return new DoublePrimitiveDescriptor(elementId);
-			}
-			else if (float.class == instanceClass) {
-				return new FloatPrimitiveDescriptor(elementId);
-			}
-			else if (int.class == instanceClass) {
-				return new IntPrimitiveDescriptor(elementId);
-			}
-			else if (long.class == instanceClass) {
-				return new LongPrimitiveDescriptor(elementId);
-			}
-			else if (short.class == instanceClass) {
-				return new ShortPrimitiveDescriptor(elementId);
+			ecoreDescriptor = createPrimitiveTypeEcoreDescriptor(instanceClass);
+			if (ecoreDescriptor != null) {
+				return ecoreDescriptor;
 			}
 			//			else {
 			//				return new SimpleDataTypeDescriptor(id, instanceClassName);
diff --git a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/java/types/PrimitiveValueDescriptor.java b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/java/types/PrimitiveValueDescriptor.java
index 3042ea9..edd6995 100644
--- a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/java/types/PrimitiveValueDescriptor.java
+++ b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/java/types/PrimitiveValueDescriptor.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2015 Willink Transformations and others.
+ * Copyright (c) 2015, 2017 Willink Transformations and others.
  * All rights reserved.   This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- * 
+ *
  * Contributors:
  *   E.D.Willink - Initial API and implementation
  *******************************************************************************/
@@ -20,7 +20,7 @@
 public class PrimitiveValueDescriptor extends BoxedValueDescriptor
 {
 	private @NonNull Class<?> primitiveClass;
-	
+
 	public PrimitiveValueDescriptor(@NonNull DataTypeId typeId, @NonNull Class<? extends Value> boxedClass,
 			@NonNull Class<?> primitiveClass) {
 		super(typeId, boxedClass);
@@ -29,11 +29,23 @@
 
 	@Override
 	protected @NonNull EcoreDescriptor createEcoreDescriptor() {
+		EcoreDescriptor ecoreDescriptor = createPrimitiveObjectEcoreDescriptor(primitiveClass);
+		if (ecoreDescriptor != null) {
+			return ecoreDescriptor;
+		}
+		ecoreDescriptor = createPrimitiveTypeEcoreDescriptor(primitiveClass);
+		if (ecoreDescriptor != null) {
+			return ecoreDescriptor;
+		}
 		return new UnboxedValueDescriptor(elementId, primitiveClass);
 	}
 
 	@Override
 	protected @NonNull UnboxedDescriptor createUnboxedDescriptor() {
+		UnboxedDescriptor unboxedDescriptor = createPrimitiveTypeUnboxedDescriptor(primitiveClass);
+		if (unboxedDescriptor != null) {
+			return unboxedDescriptor;
+		}
 		return new UnboxedValueDescriptor(elementId, primitiveClass);
 	}
 }
\ No newline at end of file