相关文章推荐
体贴的麻辣香锅  ·  winform ...·  1 月前    · 
淡定的跑步鞋  ·  DataGridViewComboBoxCe ...·  1 年前    · 
yay -S git
yay -S maven
git clone https://github.com/eclipse-cdt/cdt.git
git checkout CDT_9_7_0
cd cdt
mvn package

然后经过几十分钟的构建,可以编译成功。

下载Eclipse Committers:https://www.eclipse.org/downloads/packages/release/2019-03/r/eclipse-ide-eclipse-committers

下载完成,打开菜单 Help -> Install New Software,然后如图安装新组件:

将CDT目录导入到Eclipse中,将所有包全部导入

找到org.eclipse.cdt.target这个包,打开其中的cdt.target,右上角点击Set As Active Target Platform

同样打开cdt-baseline.target并点击

然后等待好久,等联网下载完成

点击菜单Project -> Build All

右键选择org.eclipse.cdt.ui这个包,右键菜单Run As Eclipse Application

不出意外,新的Eclipse就会打开,原Eclipse的下方Console窗口打印新Eclipse的log输出

至此,CDT开发环境搭建完成

3.代码修改

接下来到了激动人心的时刻,修改代码使其达到我们想要的功能dsa

首先打开 cdt/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CContentAssistProcessor.java ,找到verifyAutoActivation方法,按照下面修改,添加2行:

这个方法的功能是判断当前位置的字符是否可以触发自动提示,default分之的加入是为了处理我们的场景, Character.isAlphabetic过滤到非a-z A-Z的字符

    @Override
    protected boolean verifyAutoActivation(ITextViewer viewer, int offset) {
        IDocument doc = viewer.getDocument();
        System.out.println("verifyAutoActivation");
        if (doc == null) {
            return false;
        if (offset <= 0) {
            return false;
        try {
            char activationChar = doc.getChar(--offset);
            switch (activationChar) {
            case ':':
                return offset > 0 && doc.getChar(--offset) == ':';
            case '>':
                return offset > 0 && doc.getChar(--offset) == '-';
            case '.':
                // Avoid completion of float literals
                CHeuristicScanner scanner = new CHeuristicScanner(doc);
                int token = scanner.previousToken(--offset, Math.max(0, offset - 200));
                // The scanner reports numbers as identifiers
                if (token == Symbols.TokenIDENT
                        && !Character.isJavaIdentifierStart(doc.getChar(scanner.getPosition() + 1))) {
                    // Not a valid identifier
                    return false;
                return true;
            //add start
            default:
                return Character.isAlphabetic(activationChar);
            //add end
        } catch (org.eclipse.jface.text.BadLocationException e) {
        return false;

找到setCompletionProposalAutoActivationCharacters方法,按照下面修改:

这里的修改是为了加上字母触发代码提示

    public void setCompletionProposalAutoActivationCharacters(char[] activationSet) {
        String myAddCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; //$NON-NLS-1$
        myAddCharacters += new String(activationSet);
        fCompletionAutoActivationCharacters = myAddCharacters.toCharArray();
        //fCompletionAutoActivationCharacters = activationSet;

至此修改完毕,右键选择org.eclipse.cdt.ui这个包,右键菜单Run As Eclipse Application,试验一下,发现已经可以了

4.效果展示

5.插件打包

 右键选择org.eclipse.cdt.ui这个包,右键菜单Deployable Plug-ins and fragments

选择导出目录,点击Finish

在导出目录的plugins子目录可以找到jar,

在eclipse/plugins中有一个org.eclipse.cdt.ui_6.4.100.*****.jar,记录该文件名并备份,然后把新的jar拷贝过来并改名,大功告成!

如果到了目标eclipse环境还是不能使用的情况,推测原因可能是版本不配套,此时可能需要导出org.eclipse.jface.text

首先是导入这个包 Window -> Show View -> Other ->Plug-ins,

Plug-ins窗口选中org.eclipse.jface.text,右键Import As -> Source Project

然后和上面那个一样的方法,导出jar,拷贝到目标eclipse环境