[573836] Treat toBoolean/Integer/Real as queries
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/string/StringToBooleanOperation.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/string/StringToBooleanOperation.java
index 7dc1f3d..725a311 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/string/StringToBooleanOperation.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/string/StringToBooleanOperation.java
@@ -22,9 +22,16 @@
public static final @NonNull StringToBooleanOperation INSTANCE = new StringToBooleanOperation();
@Override
- public @NonNull Boolean evaluate(@Nullable Object sourceVal) {
+ public @Nullable Boolean evaluate(@Nullable Object sourceVal) {
String sourceString = asString(sourceVal);
- boolean result = "true".equals(sourceString); //$NON-NLS-1$
- return result;
+ if ("true".equals(sourceString)) { //$NON-NLS-1$
+ return Boolean.TRUE;
+ }
+ else if ("false".equals(sourceString)) { //$NON-NLS-1$
+ return Boolean.FALSE;
+ }
+ else {
+ return null;
+ }
}
}
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/string/StringToIntegerOperation.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/string/StringToIntegerOperation.java
index eaf8a26..5008893 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/string/StringToIntegerOperation.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/string/StringToIntegerOperation.java
@@ -24,9 +24,14 @@
public static final @NonNull StringToIntegerOperation INSTANCE = new StringToIntegerOperation();
@Override
- public @NonNull IntegerValue evaluate(@Nullable Object sourceVal) {
+ public @Nullable IntegerValue evaluate(@Nullable Object sourceVal) {
String sourceString = asString(sourceVal);
@NonNull String result = sourceString.trim();
- return ValueUtil.integerValueOf(result);
+ try {
+ return ValueUtil.integerValueOf(result);
+ }
+ catch (Throwable e) {
+ return null;
+ }
}
}
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/string/StringToRealOperation.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/string/StringToRealOperation.java
index 4a5b38c..4b7cc18 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/string/StringToRealOperation.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/string/StringToRealOperation.java
@@ -24,8 +24,13 @@
public static final @NonNull StringToRealOperation INSTANCE = new StringToRealOperation();
@Override
- public @NonNull RealValue evaluate(@Nullable Object sourceVal) {
+ public @Nullable RealValue evaluate(@Nullable Object sourceVal) {
String sourceString = asString(sourceVal);
- return ValueUtil.realValueOf(sourceString);
+ try {
+ return ValueUtil.realValueOf(sourceString);
+ }
+ catch (Throwable e) {
+ return null;
+ }
}
}
diff --git a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateOclAnyOperationsTest4.java b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateOclAnyOperationsTest4.java
index e2f7eee..e465f67 100644
--- a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateOclAnyOperationsTest4.java
+++ b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateOclAnyOperationsTest4.java
@@ -487,8 +487,8 @@
ocl.assertQueryFalse(null, "*.oclIsInvalid()");
ocl.assertQueryFalse(null, "'invalid'.oclIsInvalid()");
ocl.assertQueryFalse(ocl.pkg1, "self.oclIsInvalid()");
- ocl.assertQueryTrue(null, "('123a'.toInteger()).oclIsInvalid()"); // Bug 342561 for old evaluator
- ocl.assertQueryTrue(null, "let a:Integer='123a'.toInteger() in a.oclIsInvalid()"); // Bug 342561 for old evaluator
+ ocl.assertQueryTrue(null, "('123a'.toInteger()).oclIsUndefined()"); // Bug 342561 for old evaluator
+ ocl.assertQueryTrue(null, "let a:Integer='123a'.toInteger() in a.oclIsUndefined()"); // Bug 342561 for old evaluator
ocl.dispose();
}
diff --git a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateStringOperationsTest4.java b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateStringOperationsTest4.java
index d53cf25..8241990 100644
--- a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateStringOperationsTest4.java
+++ b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateStringOperationsTest4.java
@@ -20,7 +20,6 @@
import org.eclipse.ocl.pivot.messages.PivotMessages;
import org.eclipse.ocl.pivot.utilities.OCL;
import org.eclipse.ocl.pivot.utilities.StringUtil;
-import org.eclipse.osgi.util.NLS;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
@@ -547,11 +546,11 @@
@Test public void testStringToBoolean() {
TestOCL ocl = createOCL();
ocl.assertQueryTrue(null, "'true'.toBoolean()");
- ocl.assertQueryFalse(null, "' true'.toBoolean()");
- ocl.assertQueryFalse(null, "'true '.toBoolean()");
- ocl.assertQueryFalse(null, "'True'.toBoolean()");
+ ocl.assertQueryNull(null, "' true'.toBoolean()");
+ ocl.assertQueryNull(null, "'true '.toBoolean()");
+ ocl.assertQueryNull(null, "'True'.toBoolean()");
ocl.assertQueryFalse(null, "'false'.toBoolean()");
- ocl.assertQueryFalse(null, "'-4'.toBoolean()");
+ ocl.assertQueryNull(null, "'-4'.toBoolean()");
// invalid
ocl.assertQueryInvalid(null, "let s : String = invalid in s.toBoolean()");
// null
@@ -563,10 +562,10 @@
TestOCL ocl = createOCL();
ocl.assertQueryEquals(null, Integer.valueOf(4), "'4'.toInteger()");
ocl.assertQueryEquals(null, Integer.valueOf(-4), "'-4'.toInteger()");
- ocl.assertQueryInvalid(null, "'4.0'.toInteger()", NLS.bind(PivotMessages.InvalidInteger, "4.0"), NumberFormatException.class);
+ ocl.assertQueryNull(null, "'4.0'.toInteger()");
- ocl.assertQueryInvalid(null, "'2.4.0'.toInteger()");
- ocl.assertQueryInvalid(null, "'a'.toInteger()");
+ ocl.assertQueryNull(null, "'2.4.0'.toInteger()");
+ ocl.assertQueryNull(null, "'a'.toInteger()");
// invalid
ocl.assertQueryInvalid(null, "let s : String = invalid in s.toInteger()");
// null
@@ -596,8 +595,8 @@
ocl.assertQueryEquals(null, -4.0, "'-4'.toReal()", 0.0);
ocl.assertQueryEquals(null, 4.0, "'4.0'.toReal()", 0.0);
- ocl.assertQueryInvalid(null, "'2.4.0'.toReal()", NLS.bind(PivotMessages.InvalidReal, "2.4.0"), NumberFormatException.class);
- ocl.assertQueryInvalid(null, "'a'.toReal()", NLS.bind(PivotMessages.InvalidReal, "a"), NumberFormatException.class);
+ ocl.assertQueryNull(null, "'2.4.0'.toReal()");
+ ocl.assertQueryNull(null, "'a'.toReal()");
// invalid
ocl.assertQueryInvalid(null, "let s : String = invalid in s.toReal()");
// null