本文为大家讲解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.csdn.net/download/jiujiya123/10643377
(本教程是从一个项目中抽取出来的,可能会多引用了一些jar,另外Msun是以前项目名称,可自行修改)