从IPartListener2.partOpened的内部API实现迁移

时间:2015-03-27 18:53:22

标签: eclipse-rcp

我正在使用3.7 RCP应用程序,我们正在迁移到4.4并决定使用兼容性层。我们有一个实现IPartListener2接口的类,我们提供了partOpened方法的实现,如下所示:

public void partOpened(IWorkbenchPartReference partRef) {
    if (partRef instanceof IEditorReference) {
        //force editor area visible
        partRef.getPage().setEditorAreaVisible(true);
        // if the editors are currently minimimized and we try to maximize them, 
             then we'll cause a bug.
        if (partRef.getPage().getPartState(partRef) == 
                                 IWorkbenchPage.STATE_MINIMIZED) {
            return; // so exit here
        }
        //get preferences from local method not included in example
        final boolean maximized = 
            getMaximizedValue(PreferenceConstants.P_BOOL_MAXIMIZED_EDITORS);
        if (maximized) {
            partRef.getPage().setPartState(partRef, IWorkbenchPage.STATE_MAXIMIZED);
        }
    }
}

当我调试对此方法的调用时,partRef的实例属于org.eclipse.ui.internal.EditorReference类型。此外,partRef.getPage().setPartState(partRef, IWorkbenchPage.STATE_MAXIMIZED)本身会调用内部工作台方法。我的问题是如何用适当的Eclipse 4等效替换引用的内部调用/对象?

1 个答案:

答案 0 :(得分:0)

只要您只使用partRef接口来访问它,IEditorReference的实际类是什么并不重要。 Eclipse传递给您的值通常具有内部的实现类。只要您只使用这些类实现的公共接口,您就遵循规则。

同样,setPartState调用是IWorkbenchPage接口的一部分。同样,实现IWorkbenchPage的实际类通常是内部的。

因此,此代码中没有任何问题。只要您坚持使用该接口,Eclipse用于实现接口并不重要。

快速查看源文件的导入,如果它导入包名称中包含internal的任何内容,则肯定存在问题。