Eclipse-Plugin с использованием CDT: связать расширение файла с пользовательским языком CDT - PullRequest
0 голосов
/ 08 апреля 2019

Я могу настроить свой плагин так, чтобы в 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, чтобы иметь больше функций и изменить некоторые существующиефункциональность.Например, я не доволен видом структуры.Согласно этому старому сообщению от 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>

Этот тип контента можно добавить в языковой раздел.

<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>

С этой записью, под Window-> Настройки-> Общие-> Типы содержимого Я вижу ассоциацию файлов.Он заблокирован, поэтому я не могу его редактировать.Звучит многообещающе, но, к сожалению, это не имеет никакого эффекта.Возможно, используется правильный редактор, но не правильный язык.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...