[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