PropertyTester: Как определить тип проекта по правому клику? - PullRequest
2 голосов
/ 14 августа 2011

Я могу проверить тип проекта, который я хочу, например, используя

<instanceof value="org.eclipse.core.resources.IProject"/>
<test property="org.eclipse.core.resources.projectNature" 
      value="org.eclipse.wst.jsdt.core.jsNature"/> 

в моей команде для всплывающего меню и затем отобразить соответствующий пункт меню.Однако необходимо проверить некоторые сложные условия, поэтому меня попросили использовать тестер свойств.Ниже приведен выдержка из файла plugin.xml:

<with variable="selection">
  <test forcePluginActivation="true"
        property="testWizard.propertyTester.checkFolder"/>  

<extension
        point="org.eclipse.core.expressions.propertyTesters">
     <propertyTester
           class="testwizard.wizards.MyPropTester"
           id="MyPropTester"
           namespace="testWizard.propertyTester"
           properties="checkFolder"
           type="org.eclipse.core.resources.IProject">
     </propertyTester>
  </extension>

... и Java-код PropertyTester:

package testwizard.wizards;

import org.eclipse.core.internal.propertytester.ResourcePropertyTester;
import org.eclipse.core.resources.IResource;

@SuppressWarnings("restriction")
public class MyPropTester extends ResourcePropertyTester {

    @Override
    public boolean test(Object receiver, String property, Object[] args,
            Object expectedValue) {

        IResource res = (IResource) receiver;

        if(res instanceof IProject)
        {
            return true;
        }
        return false;
    }

}

Я довольно новичок в использовании тестеров свойств, я очень признателен за этоЕсли бы кто-то мог направить меня, где мои ошибки.

1 Ответ

2 голосов
/ 14 августа 2011

Нашли решение: вам нужно определить свойство Tester, как указано выше, и использовать

<test property="org.eclipse.core.resources.projectNature" value="org.eclipse.wst.jsdt.core.jsNature"/>, здесь значение действует как ожидаемое значение в методе Test класса Property Tester, а затем используйте

IProject project=(IProject)receiver;
 if(project.hasNature(expectedValue.toString())) return true;
...