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