Eclipse RCP 属性 测试人员的预期值是否始终为字符串?
Are expected values for Eclipse RCP property testers always String?
在 eclipse 文档中,我看到了以下代码片段 (http://help.eclipse.org/neon/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fapi%2Forg%2Feclipse%2Fcore%2Fexpressions%2FPropertyTester.html):
<propertyTester
namespace="org.eclipse.jdt.core"
id="org.eclipse.jdt.core.IPackageFragmentTester"
properties="isDefaultPackage"
type="org.eclipse.jdt.core.IPackageFragment"
class="org.eclipse.demo.MyPackageFragmentTester">
</propertyTester>
使用以下 属性 测试器实现:
public class MyPackageFragmentTester extends PropertyTester {
public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
IPackageFragment fragment= (IPackageFragment)receiver;
if ("isDefaultPackage".equals(property)) {
return expectedValue == null
? fragment.isDefaultPackage()
: fragment.isDefaultPackage() == ((Boolean)expectedValue).booleanValue();
}
Assert.isTrue(false);
return false;
}
}
我有点想知道 ((Boolean)expectedValue)
部分 - 因为期望值在 <test property="..."/>
标记中作为字符串给出:
<test property="org.eclipse.jdt.core.isDefaultPackage" value="true" />
每当我实现一个 属性 测试器时,值都是以字符串的形式给出的。
所以我的问题是:是否可能有一个不是字符串的期望值?根据 Eclipse RCP 文档,它应该是...但是如何!?
不是很清楚,但预期值可以是 String
或 Boolean
、Float
(!) 或 Integer
.
计算出的代码在org.eclipse.core.internal.expressions.Expressions
:
public static Object convertArgument(String arg) throws CoreException {
if (arg == null) {
return null;
} else if (arg.length() == 0) {
return arg;
} else if (arg.charAt(0) == '\'' && arg.charAt(arg.length() - 1) == '\'') {
return unEscapeString(arg.substring(1, arg.length() - 1));
} else if ("true".equals(arg)) { //$NON-NLS-1$
return Boolean.TRUE;
} else if ("false".equals(arg)) { //$NON-NLS-1$
return Boolean.FALSE;
} else if (arg.indexOf('.') != -1) {
try {
return Float.valueOf(arg);
} catch (NumberFormatException e) {
return arg;
}
} else {
try {
return Integer.valueOf(arg);
} catch (NumberFormatException e) {
return arg;
}
}
}
所以它是 String
除非它是 true
、false
或数字。
在 eclipse 文档中,我看到了以下代码片段 (http://help.eclipse.org/neon/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fapi%2Forg%2Feclipse%2Fcore%2Fexpressions%2FPropertyTester.html):
<propertyTester
namespace="org.eclipse.jdt.core"
id="org.eclipse.jdt.core.IPackageFragmentTester"
properties="isDefaultPackage"
type="org.eclipse.jdt.core.IPackageFragment"
class="org.eclipse.demo.MyPackageFragmentTester">
</propertyTester>
使用以下 属性 测试器实现:
public class MyPackageFragmentTester extends PropertyTester {
public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
IPackageFragment fragment= (IPackageFragment)receiver;
if ("isDefaultPackage".equals(property)) {
return expectedValue == null
? fragment.isDefaultPackage()
: fragment.isDefaultPackage() == ((Boolean)expectedValue).booleanValue();
}
Assert.isTrue(false);
return false;
}
}
我有点想知道 ((Boolean)expectedValue)
部分 - 因为期望值在 <test property="..."/>
标记中作为字符串给出:
<test property="org.eclipse.jdt.core.isDefaultPackage" value="true" />
每当我实现一个 属性 测试器时,值都是以字符串的形式给出的。
所以我的问题是:是否可能有一个不是字符串的期望值?根据 Eclipse RCP 文档,它应该是...但是如何!?
不是很清楚,但预期值可以是 String
或 Boolean
、Float
(!) 或 Integer
.
计算出的代码在org.eclipse.core.internal.expressions.Expressions
:
public static Object convertArgument(String arg) throws CoreException {
if (arg == null) {
return null;
} else if (arg.length() == 0) {
return arg;
} else if (arg.charAt(0) == '\'' && arg.charAt(arg.length() - 1) == '\'') {
return unEscapeString(arg.substring(1, arg.length() - 1));
} else if ("true".equals(arg)) { //$NON-NLS-1$
return Boolean.TRUE;
} else if ("false".equals(arg)) { //$NON-NLS-1$
return Boolean.FALSE;
} else if (arg.indexOf('.') != -1) {
try {
return Float.valueOf(arg);
} catch (NumberFormatException e) {
return arg;
}
} else {
try {
return Integer.valueOf(arg);
} catch (NumberFormatException e) {
return arg;
}
}
}
所以它是 String
除非它是 true
、false
或数字。