Java 使用文件的ActionProvider-EclipseCnf
我正在编写一个插件,它创建了一个自定义的Java 使用文件的ActionProvider-EclipseCnf,java,eclipse,eclipse-plugin,Java,Eclipse,Eclipse Plugin,我正在编写一个插件,它创建了一个自定义的包资源管理器,表示不同层次结构(某种虚拟文件夹)中的底层文件系统层次结构 我已经通过实现ITreeContentProvider创建了层次结构。最后一个节点应该表示一个文件及其所有操作(打开、复制、重命名…),当我返回org.eclipse.core.internal.resources.File的实例时效果非常好,但是如果我创建一个delegate/proxy类来实现IFile接口,我会看到操作,但是当我单击其中一个时,eclipse会冻结 无论如何,我
包资源管理器
,表示不同层次结构(某种虚拟文件夹)中的底层文件系统层次结构
我已经通过实现ITreeContentProvider
创建了层次结构。最后一个节点应该表示一个文件及其所有操作(打开、复制、重命名…),当我返回org.eclipse.core.internal.resources.File
的实例时效果非常好,但是如果我创建一个delegate/proxy
类来实现IFile
接口,我会看到操作,但是当我单击其中一个时,eclipse会冻结
无论如何,我想我需要实现我自己的CommonActionProvider
。我的问题是:
如何将相同的操作添加到一个节点,该节点将表示文件上的操作,是否有FileActionProvider?
我将遵循以下教程:
更新
我曾经尝试过按照@greg-449的建议处理适配器。但是他们都没有给我完整的菜单,我得到的最大菜单只是实现IAdaptable
接口,并将getAdapter()
委托给我的IFile实例。但这样做双击打开文件不起作用,最重要的是重命名、删除、移动都不在这里
我通过委托
getAdapter()
而不是试图实现IFile
获得的菜单,您应该使用IAdapterFactory
从UI类向底层IFile
提供适配器
使用org.eclipse.core.runtime.adapters
扩展点声明适配器工厂:
适配器工厂类方法类似于:
@Override
public Object getAdapter(Object adaptableObject, Class adapterType)
{
if (adaptableObject instanceof MyFile)
{
// TODO get the IFile from MyFile
return ifile;
}
return null;
}
@Override
public Class<?> [] getAdapterList()
{
return new Class<?> [] {IFile.class};
}
@覆盖
公共对象getAdapter(对象AdapterObject,类adapterType)
{
if(MyFile的AdaptiableObject实例)
{
//从MyFile中获取IFile
返回ifile;
}
返回null;
}
@凌驾
公共类[]getAdapterList()
{
返回新类[]{IFile.Class};
}
您可能还需要注册IResource
,才能使所有菜单项正常工作
您还可以使用
IAdapterManager
界面注册工厂。只是为了确保com.xyz.MyFile
与我从ITreeContentProvider
中的getChildren
方法返回的对象相同?第二,我这样做了,但我只得到了源代码
和生成
。此外,没有调用的IAdapterFactory
方法检查您的扩展点声明是否正确,我一开始就错了。看起来它配置正确,如果我删除扩展点,我就无法获得带有源代码和生成的菜单,但是,在任何情况下,适配器的方法都不会被调用OK如果您得到的东西声明是正确的,那么仅声明适配器就足以让菜单显示,在选择菜单项之前不会调用实际代码。其他菜单项可能需要IResource或org.eclipse.core.resources.mapping.ResourceMapping的适配器。我已经更新了我的问题,您介意看一下吗。谢谢