2016-09-21 1 views
1

В документации затмения я видел следующий фрагмент кода (http://help.eclipse.org/neon/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fapi%2Forg%2Feclipse%2Fcore%2Fexpressions%2FPropertyTester.html):Ожидаемые значения для тестеров свойств Eclipse RCP всегда String?

<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 это должно быть ... но как !?

ответ

1

Это не очень ясно, но ожидаемое значение может быть 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 или номер.

 Смежные вопросы

  • Нет связанных вопросов^_^