使用CDT的Eclipse-Plugin:将文件扩展名与定制CDT语言相关联

时间:2019-04-08 14:17:43

标签: java eclipse eclipse-plugin eclipse-cdt

我可以配置插件,以便在CDT CEditor中打开具有某些扩展名的文件。

<editor
      class="org.eclipse.cdt.internal.ui.editor.CEditor"
      contributorClass="org.eclipse.cdt.internal.ui.editor.CEditorActionContributor"
      default="true"
      filenames="*.ext, *.c"
      icon="icons/small.png"
      id="de.blub.ide.exteditor"
      name="EXT Editor">
</editor>

这可以某种方式起作用,但是我想扩展CEditor以具有更多功能并更改一些现有功能。例如,我对大纲视图不满意。根据{{​​3}}的说法,2009年,方法是使用扩展点“ org.eclipse.cdt.ui.language”定义我自己的语言。

这是我的方法:

 <extension
     point="org.eclipse.cdt.core.language"
     id="de.blub.ide.mylanguage"
     name="My Test Languager">
     <language
         class="de.blub.base.utils.MyTestLanguage"
         id="de.blub.plugin.mytestlanguage"
         name="My Test Language">
         <contentType id="org.eclipse.cdt.core.cSource"/>
         <contentType id="org.eclipse.cdt.core.cHeader"/>
     </language>
 </extension>

我写了一个扩展AbstractCLikeLanguage的类:

package de.blub.base.utils;

import org.eclipse.cdt.core.dom.parser.AbstractCLikeLanguage;
import org.eclipse.cdt.core.dom.parser.ISourceCodeParser;
import org.eclipse.cdt.core.index.IIndex;
import org.eclipse.cdt.core.model.ICLanguageKeywords;
import org.eclipse.cdt.core.parser.IParserLogService;
import org.eclipse.cdt.core.parser.IScanner;
import org.eclipse.cdt.core.parser.ParserLanguage;
import org.eclipse.cdt.core.parser.ParserMode;

public class MyTestLanguage extends AbstractCLikeLanguage {

    private static final String id = "de.blub.plugin.mytestlanguage";

    @Override
    public String getId() {
        return id;
    }

    @Override
    public int getLinkageID() {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    protected ISourceCodeParser createParser(IScanner scanner, ParserMode parserMode, IParserLogService logService,
            IIndex index) {
        return null;
    }

    @Override
    protected ParserLanguage getParserLanguage() {
        // TODO Auto-generated method stub
        return ParserLanguage.C;
    }

    @SuppressWarnings({ "unchecked", "rawtypes" })
    @Override
    public Object getAdapter(Class adapter) {
        if (ICLanguageKeywords.class.equals(adapter)) 
            return this;
        return super.getAdapter(adapter);
    }

    @Override
    public String[] getKeywords() {
        return super.getKeywords();
    }

}

如何将某个文件扩展名与此语言相关联? 不幸的是,我发现很少有使用扩展点org.eclipse.cdt.core.language的示例。目前,我什至不确定这是否是我想要的。但是描述似乎令人生厌:

  

此扩展点用于声明一种或多种语言   变体。语言定义了如何创建文件的C模型(例如   填充轮廓视图。

编辑:

我添加了一个contentType:

<extension
     point="org.eclipse.core.contenttype.contentTypes">
  <content-type
        file-extensions="ext"
        id="de.blub.contenttype.ext"
        name="EXT"
        priority="high">
  </content-type>

可以在语言部分添加此contentType。

<language 
    ...
    <contentType
        id="de.verified.rtt.contenttype.rts">
    </contentType>
</language>

Window->Preferences->General->Content Types下,我可以将新的内容类型与新的编辑器链接。我也可以在此处添加新的文件关联。但是我不想手动添加文件关联!一定可以在plugin.xml中执行此操作。

我还试图添加一个editorContentTypeBinding,如下所示:

 <editorContentTypeBinding
     contentTypeId="de.blub.contenttype.ext"
     editorId="de.blub.ide.exteditor">
  </editorContentTypeBinding>

使用此条目,在“窗口”->“首选项”->“常规”->“内容类型”下,我可以看到文件关联。它已被锁定,所以我无法对其进行编辑。听起来很有希望,但不幸的是它没有效果。也许使用了正确的编辑器,但没有使用正确的语言。

0 个答案:

没有答案