跟着实例学eclipse插件开发--第二篇:类注释插件(代码辅助)

本文介绍如何使用Eclipse的org.eclipse.jdt.ui.javaCompletionProposalComputer扩展点来实现自定义的Java代码辅助功能,包括类注释等实用功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文为大家讲解org.eclipse.jdt.ui.javaCompletionProposalComputer扩展点。

在类名上,按智能提示(alt+/),可以出来“类注释”的代码辅助功能,可能我举得这个例子意义不大,大家可以通过该扩展点做很多,对自己写代码更有意义的辅助功能。

首先需要使用org.eclipse.jdt.ui.javaCompletionProposalComputer扩展点,需要在plugin.xml中添加:

<extension point="org.eclipse.jdt.ui.javaCompletionProposalComputer" 
		   id="com.msun.plug.assist.MsunJavaProposalComputer" 
		   name="MsunJavaProposalComputer"> 
	<javaCompletionProposalComputer class="com.msun.plug.assist.MsunJavaProposalComputer" 
									activate="true" needsSortingAfterFiltering="true"> 
		<partition type="__java_string"/>  
		<partition type="__java_javadoc"/>  
		<partition type="__dftl_partition_content_type"/> 
	</javaCompletionProposalComputer> 
</extension>

然后创建MsunJavaProposalComputer类,该类需要继承org.eclipse.jdt.ui.text.java.IJavaCompletionProposalComputer类:

package com.msun.plug.assist;

import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.internal.filebuffers.SynchronizableDocument;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jdt.ui.text.java.ContentAssistInvocationContext;
import org.eclipse.jdt.ui.text.java.IJavaCompletionProposalComputer;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.eclipse.jface.text.contentassist.IContextInformation;
import com.msun.plug.util.AssistUtil;

/** 
 * Title: 插件开发
 * Description: java代码辅助
 * Copyright: MSun (c) 2018年7月23日
 * 
 * @author jiujiya
 * @version 1.0 
 */
@SuppressWarnings("restriction")
public class MsunJavaProposalComputer implements IJavaCompletionProposalComputer {
	
	@Override
	public List<ICompletionProposal> computeCompletionProposals(ContentAssistInvocationContext context, IProgressMonitor monitor) {
		List<ICompletionProposal> proposals = new ArrayList<ICompletionProposal>();
		
		try {
			SynchronizableDocument document = (SynchronizableDocument)context.getDocument();
			int cursorposition = context.getInvocationOffset();
			String text = document.get();
			String nowText = text.substring(0, cursorposition);
			if(nowText.lastIndexOf("\n") != -1) {
				nowText = nowText.substring(nowText.lastIndexOf("\n"), nowText.length());
			}
			// 处理类注释 整体
			String forClassText = nowText + text.substring(cursorposition, cursorposition + 1);
			if(forClassText.contains(" class ") || forClassText.contains(" interface ") 
					|| forClassText.contains(" enum ") || forClassText.contains(" @interface ")) {
				return AssistUtil.getClassAnnotation(context, cursorposition);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return proposals;
	}

	@Override
	public List<IContextInformation> computeContextInformation(ContentAssistInvocationContext arg0, IProgressMonitor arg1) {
		return null;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public String getErrorMessage() {

		return null;
	}

	/**
	 * Do nothing.
	 */
	@Override
	public void sessionEnded() {
	}

	/**
	 * Do nothing.
	 */
	@Override
	public void sessionStarted() {
	}
}

SVN的账号是存在C:/Users/{计算机名}/AppData/Roaming/Subversion/auth/svn.simple/目录下,可通过以下代码获取:

/**
 * @return 获取svn作者
 */
public static String getAuthor() {
	String userName;
	try {
		userName = (String) System.getenv().get("USERNAME");
		String dirPath = "C:/Users/" + userName + "/AppData/Roaming/Subversion/auth/svn.simple/";
		List<String> files = FileUtil.getFileList(dirPath);
		for (String file : files) {
			List<String> contents = FileUtil.readTextsFile(file, "UTF-8");
			for (String string : contents) {
				// 我公司的svn ip是192.168.0.110,需自行替换
				if ((string.contains("192.168.0.110"))) {
					return ((String) contents.get(contents.size() - 2));
				}
			}
		}
	} catch (Exception e) {
		e.printStackTrace();
	}
	return "";
}

源码下载地址:https://download.youkuaiyun.com/download/jiujiya123/10643377

(本教程是从一个项目中抽取出来的,可能会多引用了一些jar,另外Msun是以前项目名称,可自行修改)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值