diff options
Diffstat (limited to 'plugins/org.eclipse.m2m.atl.emftvm')
3 files changed, 45 insertions, 1 deletions
diff --git a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/ExecEnvImpl.java b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/ExecEnvImpl.java index eff95be5..d0cb408a 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/ExecEnvImpl.java +++ b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/ExecEnvImpl.java @@ -1610,7 +1610,7 @@ public class ExecEnvImpl extends EObjectImpl implements ExecEnv { for (String modelName : re.getModels()) { final Model model = models.get(modelName); if (model == null) { - throw new IllegalArgumentException(String.format("Model %s not found", modelName)); + throw new IllegalArgumentException(String.format("Model %s not found for %s", modelName, re)); } eModels.add(model); } diff --git a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/util/EMFTVMUtil.java b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/util/EMFTVMUtil.java index 8365df2d..0a290f6c 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/util/EMFTVMUtil.java +++ b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/util/EMFTVMUtil.java @@ -39,6 +39,7 @@ import org.eclipse.emf.common.util.EList; import org.eclipse.emf.common.util.Enumerator; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EClassifier; +import org.eclipse.emf.ecore.EDataType; import org.eclipse.emf.ecore.EEnum; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EPackage; @@ -2427,6 +2428,33 @@ public final class EMFTVMUtil { } // overwrite with current value to prevent aliasing problems registry.put(nsURI, p); + } else if (object instanceof EDataType) { + adaptDataType((EDataType) object); + } + } + } + + /** + * Adapts the given {@link EDataType} if necessary. + * @param dt the {@link EDataType} to adapt + */ + private static void adaptDataType(final EDataType dt) { + String icn = dt.getInstanceClassName(); + if (icn == null) { + final String tname = dt.getName(); + if (tname.equals("Boolean")) { //$NON-NLS-1$ + icn = "boolean"; //$NON-NLS-1$ + } else if (tname.equals("Double") || tname.equals("Real")) { //$NON-NLS-1$ //$NON-NLS-2$ + icn = "java.lang.Double"; //$NON-NLS-1$ + } else if (tname.equals("Float")) { //$NON-NLS-1$ + icn = "java.lang.Float"; //$NON-NLS-1$ + } else if (tname.equals("Integer")) { //$NON-NLS-1$ + icn = "java.lang.Integer"; //$NON-NLS-1$ + } else if (tname.equals("String")) { //$NON-NLS-1$ + icn = "java.lang.String"; //$NON-NLS-1$ + } + if (icn != null) { + dt.setInstanceClassName(icn); } } } diff --git a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/util/OCLOperations.java b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/util/OCLOperations.java index 085644ce..ad0a142a 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/util/OCLOperations.java +++ b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/util/OCLOperations.java @@ -1024,6 +1024,14 @@ public final class OCLOperations { } }); createOperation(false, "-", Types.REAL_TYPE, Types.REAL_TYPE, + new String[][][]{}, + new NativeCodeBlock() { + @Override + public Object execute(final StackFrame frame) { + return -(Double)frame.getLocal(0, 0); + } + }); + createOperation(false, "-", Types.REAL_TYPE, Types.REAL_TYPE, new String[][][]{{{"r"}, Types.REAL_TYPE}}, new NativeCodeBlock() { @Override @@ -1226,6 +1234,14 @@ public final class OCLOperations { return (Integer)frame.getLocal(0, 0) + (Integer)frame.getLocal(0, 1); } }); + createOperation(false, "-", Types.INTEGER_TYPE, Types.INTEGER_TYPE, + new String[][][]{}, + new NativeCodeBlock() { + @Override + public Object execute(final StackFrame frame) { + return -(Integer)frame.getLocal(0, 0); + } + }); createOperation(false, "-", Types.INTEGER_TYPE, Types.REAL_TYPE, new String[][][]{{{"r"}, Types.REAL_TYPE}}, new NativeCodeBlock() { |