Java 在开普勒4.3中,向Eclipse工作台窗口添加自定义修剪不起作用

Java 在开普勒4.3中,向Eclipse工作台窗口添加自定义修剪不起作用,java,eclipse,Java,Eclipse,我正在为一个Eclipse插件维护一些预先存在的代码,该插件构成了一个更大项目的一部分。这段代码应该通过使用名为NotificationTrim的自定义trim,在Eclipse的工作台窗口右下角显示通知图标。代码在Indigo中工作得很好,但在开普勒它不再工作,图标也不再出现。代码如下所示,通知处理程序调用createTrim(): private NotificationTrim createTrim() { IWorkbenchWindow[] windows =

我正在为一个Eclipse插件维护一些预先存在的代码,该插件构成了一个更大项目的一部分。这段代码应该通过使用名为
NotificationTrim
的自定义trim,在Eclipse的工作台窗口右下角显示通知图标。代码在Indigo中工作得很好,但在开普勒它不再工作,图标也不再出现。代码如下所示,通知处理程序调用
createTrim()

private NotificationTrim createTrim() {
    IWorkbenchWindow[] windows = 
        PlatformUI.getWorkbench().getWorkbenchWindows();

    if (windows == null || windows.length < 1) {
        return null;
    }

    IWorkbenchWindow main = windows[0];

    if (!(main instanceof WorkbenchWindow)) {
        return null;
    }

    WorkbenchWindow window = (WorkbenchWindow)main;
    ITrimManager manager = window.getTrimManager();

    if (manager.getTrim(getClass().getName()) == null) {
        int height = getBottomTrimHeight(manager);

        trim = new NotificationTrim(main.getShell(), height);

        manager.addTrim(ITrimManager.BOTTOM, trim);
        manager.forceLayout();

        return trim;
    }

    return null;
}

private int getBottomTrimHeight (ITrimManager manager) {
    List<IWindowTrim> items = manager.getAreaTrim(SWT.BOTTOM);
    int height = -1;

    if (items != null) {
        for (IWindowTrim item : items) {
            int itemHeight = item.getControl().getSize().y;

            if (itemHeight > height) {
                height = itemHeight;
            }
        }
    }

    return height;
}
private NotificationTrim createTrim(){
IWorkbenchWindow[]窗口=
PlatformUI.getWorkbench().getWorkbenchWindows();
if(windows==null | | windows.length<1){
返回null;
}
IWorkbenchWindow main=windows[0];
if(!(工作台窗口的主实例)){
返回null;
}
工作台窗口=(工作台窗口)主窗口;
ITrimManager=window.getTrimManager();
if(manager.getTrim(getClass().getName())==null){
int height=getBottomTrimHeight(管理器);
trim=新通知trim(main.getShell(),高度);
manager.addTrim(itrimanager.BOTTOM,trim);
manager.forceLayout();
回位微调;
}
返回null;
}
专用int getBottomTrimHeight(ITrimManager){
列表项=manager.getAreaTrim(SWT.BOTTOM);
整数高度=-1;
如果(项!=null){
用于(IWindowTrim项目:项目){
int itemHeight=item.getControl().getSize().y;
如果(项目高度>高度){
高度=项目高度;
}
}
}
返回高度;
}

据我所知,调用
window.getTrimManager()
会返回一个基本的
ITrimManager
,它对ITrimManager的任何方法的实现都不做任何事情(特别是
getAreaTrim()
addTrim()
),因此不会向工作台窗口的trim添加任何内容。我很清楚,这段代码依赖于一个自Indigo以来发生变化的未记录的内部API,所以我的问题是是否有更好的方法向Eclipse的工作台窗口底部添加自定义修剪?如果做不到这一点,是否有另一种方法将通知图像和标签添加到窗口中,使其在所有透视图中保持持久性,基本上与旧代码相同?

因为您发现这些内部类不再起任何作用

要添加到窗口中,您可能需要编辑Eclipse4应用程序模型。对于现有的Eclipse,这是
org.Eclipse.platform
插件中的
LegacyIDE.e4xmi
文件

有关编辑应用程序模型的更多详细信息,请参阅