我正在开发一个Eclipse插件,用于对两个程序执行等效检查。一旦用户在项目浏览器中选择了两个程序,"最初变灰"图标已启用,用户可以单击它以执行等效性检查。
问题是,当我在Eclipse中安装插件时,它不会监听用户选择。不知何故,我必须激活" Eclipse启动时我的选择类。为此,我使用了一个实现 IStartup 的类。
如果需要,这是我的选择课程;
import java.util.ArrayList;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;
public class SelectionView extends ViewPart{
static ArrayList<String> paths=new ArrayList<>(2);
private ISelectionListener listener = new ISelectionListener() {
public void selectionChanged(IWorkbenchPart sourcepart, ISelection selection) {
if (sourcepart != SelectionView.this) {
showSelection(sourcepart, selection);
}
}
};
public void showSelection(IWorkbenchPart sourcepart, ISelection selection) {
if (selection instanceof IStructuredSelection) {
IStructuredSelection ss = (IStructuredSelection) selection;
Object[] ob=ss.toArray();
String path=getPath().substring(0,getPath().lastIndexOf('/'));
String file=null;
for(int i=0;i<ob.length;i++){
if((file=ob[i].toString()).endsWith(".c")){
paths.add(0,path+"/"+file);
if(paths.size()>=2){
Handler.return_val=true;
Handler.arg1=paths.get(0);
Handler.arg2=paths.get(1);
}
}
}
}
}
public String getPath(){
IWorkbenchPart workbenchPart = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActivePart();
IFile file = (IFile) workbenchPart.getSite().getPage().getActiveEditor().getEditorInput().getAdapter(IFile.class);
String path=ResourcesPlugin.getWorkspace().getRoot().getLocation().toString()+file.getFullPath();
return path;
}
public void createPartControl(Composite parent) {
getSite().getWorkbenchWindow().getSelectionService().addSelectionListener(listener);
}
public void dispose() {
getSite().getWorkbenchWindow().getSelectionService().removeSelectionListener(listener);
super.dispose();
}
@Override
public void setFocus() {}
}
有人可以帮我解释一下我是如何激活&#34;这个关于Eclipse启动的课程?也就是说,在Eclipse启动后,在IStartup接口的 earlyStartup()方法中编写什么代码才能开始监听用户选择?
谢谢!
答案 0 :(得分:0)
您有自己的激活器,您可以在激活器启动方法上挂钩工作区选择服务。