文档章节

Eclipse插件开发资源查找

素人派
 素人派
发布于 2016/12/31 20:49
字数 856
阅读 9
收藏 0
  • 介绍
我们在开发Eclipse插件的时候,需要查找类、接口等资源的时候,怎么办呢?本文介绍如何使用Eclipse自带的查找对话框来获取类路径。
  • 查找类
[codesyntax lang="java"]
/**
* http://surenpi.com
*/
package org.surenpi.dev.plugin.utill;

import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.core.search.SearchEngine;
import org.eclipse.jdt.ui.IJavaElementSearchConstants;
import org.eclipse.jdt.ui.JavaUI;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.dialogs.SelectionDialog;

/**
 * @author surenpi.com
 * @since jdk1.6
 * 2015年9月24日
 */
public class SearchDialog {
	/**
	 * 查找类
	 * @param shell
	 * @param multipleSelection
	 * @param title 对话框标题
	 * @param message
	 * @return
	 */
	public static Object[] searchType(Shell shell, int type, boolean multipleSelection,
			String title, String message){
		try {
			SelectionDialog dialog = JavaUI.createTypeDialog(shell,
					new ProgressMonitorDialog(shell),
					SearchEngine.createWorkspaceScope(), type,
					multipleSelection);
			
			dialog.setTitle(title);
			dialog.setMessage(message);
			
			if(dialog.open() == IDialogConstants.CANCEL_ID){
				return null;
			}
			
			return dialog.getResult();
		} catch (JavaModelException e) {
			e.printStackTrace();
		}
		
		return null;
	}
	
	public static Object[] searchClass(Shell shell, boolean multipleSelection,
			String title, String message){
		return searchType(shell, IJavaElementSearchConstants.CONSIDER_CLASSES,
				multipleSelection, title, message);
	}
	
	public static IType searchClass(Shell shell, String title, String message){
		Object[] result = searchClass(shell, false, title, message);
		
		if(result != null && result.length > 0){
			return (IType) result[0];
		}
		
		return null;
	}
	
	/**
	 * 查找Action中的Module类
	 * @param shell
	 * @return
	 */
	public static IType searchModuleClass(Shell shell){
		String title = "查找Module类";
		String message = "请选择PO或者VO作为Action的Module(ListModule)";
		
		return searchClass(shell, title, message);
	}
	
	public static Object[] searchInterface(Shell shell, boolean multipleSelection,
			String title, String message){
		return searchType(shell, IJavaElementSearchConstants.CONSIDER_INTERFACES,
				multipleSelection, title, message);
	}
	
	public static IType searchInterface(Shell shell, String title, String message){
		Object[] result = searchType(shell, IJavaElementSearchConstants.CONSIDER_INTERFACES,
				false, title, message);
		
		if(result != null && result.length > 0){
			return (IType) result[0];
		}
		
		return null;
	}
	
	/**
	 * 查找Action中的Module类
	 * @param shell
	 * @return
	 */
	public static IType searchInjectClass(Shell shell){
		String title = "查找依赖类";
		String message = "请选择服务";
		
		return searchInterface(shell, title, message);
	}
}
[/codesyntax]
  • 查找所有的工程(project)
[codesyntax lang="java"]
/**
* Copyright © 1998-2015, surenpi.com. All Rights Reserved.
*/

import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.dialogs.ListSelectionDialog;

/**
 * @author surenpi
 * @since jdk1.6
 * 2015年11月17日
 */
public class ProjectDialog {
	/**
	 * 从当前工作空间(workspace)中选择工程(project)
	 * @param shell
	 * @param selection
	 * @return
	 */
	public static Object[] getSelectProjects(Shell shell, SelectionAdapter selection){
		IProject[] allProjects = ResourcesPlugin.getWorkspace().getRoot().getProjects();

		ILabelProvider labelProvider = new LabelProvider(){
			public String getText(Object element){
				if(element instanceof IProject){
					return ((IProject) element).getName();
				}else{
					return element.toString();
				}
			}
		};
		
		SimpleListContentProvider contentsProvider = new SimpleListContentProvider();
		contentsProvider.setElements(allProjects);
		
		ListSelectionDialog dialog = new ListSelectionDialog(shell, selection,
				contentsProvider, labelProvider, "从列表中选择工程"){
			protected int getShellStyle(){
				return super.getShellStyle() | SWT.LONG;
			}
		};
		
		if(dialog.open() != 0){
			return null;
		}else{
			return dialog.getResult();
		}
	}
	
	private static class SimpleListContentProvider implements IStructuredContentProvider{

		private Object[] elements;
		
		@Override
		public void dispose() {
		}

		@Override
		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
		}

		@Override
		public Object[] getElements(Object inputElement) {
			return this.elements;
		}
		
		public void setElements(Object[] items){
			this.elements = items;
		}
	}
}
[/codesyntax] 注意:上面的对话框,返回的结果集是IProject对象。
  • 查找工程(Project)下的包(Package)
[codesyntax lang="java"]
**
 * @see #searchPackage(Shell, String, String, String, IJavaProject)
 * @param shell
 * @param project
 * @return
 */
public static IPackageFragment searchPackage(Shell shell, IJavaProject project) {
	return searchPackage(shell, "Package Selection", "Choose a folder", "", project);
}

/**
 * 查找某个Project下的Package
 * @param shell
 * @param title
 * @param message
 * @param emptyMsg
 * @param project
 * @return
 */
public static IPackageFragment searchPackage(Shell shell, String title, String message, String emptyMsg, IJavaProject project) {
	IPackageFragmentRoot packageFragmentRoot = null;

	try {
	    for(IPackageFragmentRoot root  : project.getPackageFragmentRoots()) {
	        if(root.getKind() == 1) {
	            packageFragmentRoot = root;
	            break;
	        }
	    }
	} catch (JavaModelException e) {
	    e.printStackTrace();
	}
	
    IJavaElement[] packages = null;
    try {
      if ((packageFragmentRoot != null) && (packageFragmentRoot.exists()))
        packages = packageFragmentRoot.getChildren();
    } catch (JavaModelException e) {
    	e.printStackTrace();
    }
    
    if(packages == null){
      packages = new IJavaElement[0];
    }
    
    ElementListSelectionDialog dialog = new ElementListSelectionDialog(shell,
    		new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT));
    dialog.setIgnoreCase(false);
    dialog.setTitle(title);
    dialog.setMessage(message);
    dialog.setEmptyListMessage(emptyMsg);
    dialog.setElements(packages);
    dialog.setHelpAvailable(true);
    
    if(dialog.open() == 0) {
    	return (IPackageFragment) dialog.getFirstResult();
    } else {
    	return null;
    }
}
[/codesyntax] 上面是包查找的一个代码片段。
  • 查找文件夹(Folder)
[codesyntax lang="java"]
/**
 * 文件夹查找
 * @param shell
 * @param title
 * @param message
 * @return
 */
public static IPackageFragmentRoot searchFolder(Shell shell, String title, String message) {
	StandardJavaElementContentProvider provider = new StandardJavaElementContentProvider();
	ILabelProvider labelProvider = new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT);
	IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();

	Class<?>[] acceptedClasses = new Class[] { IJavaModel.class, IPackageFragmentRoot.class, IJavaProject.class };
	ViewerFilter filter = new TypedViewerFilter(acceptedClasses) {
		public boolean select(Viewer viewer, Object parent, Object element) {
			if ((element instanceof IPackageFragmentRoot)) {
				try {
					return ((IPackageFragmentRoot) element).getKind() == 1;
				} catch (JavaModelException e) {
					return false;
				}
			}

			return super.select(viewer, parent, element);
		}
	};

	ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(shell, labelProvider, provider);
	dialog.setComparator(new JavaElementComparator());
	dialog.setTitle(title);
	dialog.setMessage(message);
	dialog.addFilter(filter);
	dialog.setInput(JavaCore.create(workspaceRoot));
	dialog.setHelpAvailable(true);

	if (dialog.open() == IDialogConstants.CANCEL_ID) {
		return null;
	}

	Object element = dialog.getFirstResult();
	if ((element instanceof IJavaProject)) {
		IJavaProject jproject = (IJavaProject) element;
		return jproject.getPackageFragmentRoot(jproject.getProject());
	}

	if ((element instanceof IPackageFragmentRoot)) {
		return (IPackageFragmentRoot) element;
	}

	return null;
}
[/codesyntax] 和其他资源查找类似的,同样可以对要查找的内容进行过滤以及设置初始选择值。

本文转载自:http://surenpi.com/2015/09/25/eclipse_plugin_resource_search/

共有 人打赏支持
素人派
粉丝 25
博文 1907
码字总数 10223
作品 6
东城
程序员
私信 提问

暂无文章

租房软件隐私保护如同虚设

近日,苏州市民赵先生向江苏新闻广播新闻热线025-84658888反映,他在“安居客”手机应用软件上浏览二手房信息,并且使用该软件自动生成的虚拟号码向当地一家中介公司进行咨询。可电话刚挂不久...

linux-tao
今天
1
0
分布式项目(五)iot-pgsql

书接上回,在Mapping server中,我们已经把数据都整理好了,现在利用postgresql存储历史数据。 iot-pgsql 构建iot-pgsql模块,这里我们写数据库为了性能考虑不在使用mybatis,换成spring jd...

lelinked
今天
4
0
一文分析java基础面试题中易出错考点

前言 这篇文章主要针对的是笔试题中出现的通过查看代码执行结果选择正确答案题材。 正式进入题目内容: 1、(单选题)下面代码的输出结果是什么? public class Base { private Strin...

一看就喷亏的小猿
今天
2
0
cocoapods 用法

cocoapods install pod install 更新本地已经install的仓库 更新所有的仓库 pod update --verbose --no-repo-update 更新制定的仓库 pod update ** --verbose --no-repo-update...

HOrange
今天
3
0
linux下socket编程实现一个服务器连接多个客户端

使用socekt通信一般步骤 1)服务器端:socker()建立套接字,绑定(bind)并监听(listen),用accept()等待客户端连接。 2)客户端:socker()建立套接字,连接(connect)服务器,连接上后...

shzwork
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部