为什么在编辑器中选择文本时会调用我的属性测试器?

时间:2013-02-07 22:38:01

标签: eclipse-plugin popup

在我正在编写的eclipse插件中,我希望能够根据编辑器中当前所选行的内容使弹出菜单贡献可见或不可见。

为了帮助我,我使用属性测试器。由属性测试器执行的测试可能有点耗时(约200毫秒),这在等待弹出菜单显示时是可以的。

但是我注意到,不仅在弹出窗口即将显示时调用属性测试器,但是一旦我在编辑器中标记文本而选择文本非常慢且烦人,它也会被调用。

所以问题是:为什么在选择/标记文本时调用它,而不仅仅是在弹出即将显示时,以及如何避免这种情况?

这就是我设置属性测试器和菜单的方法:

<extension
     point="org.eclipse.core.expressions.propertyTesters">
  <propertyTester 
        class="popupmenucontribtest.PropertyTester"
        id="PopupMenuContribTest.test1"
        namespace="PopupMenuContribTest.propertyTester"
        properties="propertyTester1"
        type="java.lang.Object">
  </propertyTester>

<extension
     point="org.eclipse.ui.menus">
<menuContribution
        allPopups="false"
        locationURI="popup:org.eclipse.ui.popup.any?after=additions">
     <command
           commandId="PopupMenuContribTest.command"
           label="My Popup Option"
           style="push">
        <visibleWhen
              checkEnabled="false">
           <and>
              <test
                 forcePluginActivation="true"
                 property="PopupMenuContribTest.propertyTester.propertyTester1">
              </test>
           </and>
        </visibleWhen>
     </command>
  </menuContribution>

谢谢!

1 个答案:

答案 0 :(得分:0)

您使用定义中的java.lang.Object属性指定要为type的每个实例调用属性测试器。将其限制为编辑器的更具体的超类。请参阅this example,其中仅限于资源。

那就是说,在我看来,200毫秒的财产测试时间是不可接受的,因为用户会注意到这种延迟。