2016-08-22 6 views
1

DSL eclipseに3番目のカテゴリを追加したいので、エラーと警告とmyNewCatが別々に表示されます。 また、warning()error()のような非常によく似た(同じパラメータ)関数を使用したいので、私の検証クラスからmyNewCat()と呼ぶことができます。 これを行う最も簡単な方法は何ですか?Xtext:別の問題カテゴリを追加する(警告とエラーの他に)

例の結果は Example what the outcome should look like

答えて

1

どのように見えるかの問題が深刻度(すなわち、エラー、警告、情報)であるそのうちの一つのマーカーの属性を使用してグループの問題を表示するが、他のマーカーは、あなたが別にグループができる属性があります、例えばタイプ。グループ化を選択するには、[表示]メニューの[問題]ビュー(問題ビューの右上にある白い下向き矢印) - >グループ化 - > ...を選択します。org.eclipse.ui.markerSupport拡張ポイントを使用して、利用可能なグループをカスタマイズしてください(Marker Support Reference参照)。固定数の重大度レベルがいくつかの場所でハードコードされているため、重大度レベルを「重大度」グループに追加することは機能しません。 org.eclipse.ui.internal.views.markers.Markers.getMarkerCounts(MarkerEntry[])ですが、重大度やその他の追加基準に応じて独自のグループを作成することもできます。

この時点で、追加するグループが実際にエラー、警告、情報(マイナーな警告、推奨事項など)に沿った別の重大度であるかどうか、異なる種類のグループ化。しかし、あなたが尋ねたように別の重大度を求めているとしましょう。

<extension point="org.eclipse.ui.ide.markerSupport"> 
    <markerContentGeneratorExtension generatorId="org.eclipse.ui.ide.problemsGenerator" id="org.example.mydsl.problemGeneratorExtension"> 
     <markerGrouping id="org.example.mydsl.customSeverityGrouping" label="Custom severity"> 
      <markerGroupingEntry id="org.example.mydsl.errorSeverity" label="Errors" priority="30" /> 
      <markerGroupingEntry id="org.example.mydsl.warningSeverity" label="Warnings" priority="20" /> 
      <markerGroupingEntry id="org.example.mydsl.infoSeverity" label="Infos" priority="10" /> 
      <markerGroupingEntry id="org.example.mydsl.myAdditionalSeverity" label="My Additional severity" priority="5" /> 

      <markerAttributeGrouping attribute="customseverity" markerType="org.eclipse.core.resources.problemmarker"> 
       <markerAttributeMapping markerGroupingEntry="org.example.mydsl.errorSeverity" value="2" /> 
       <markerAttributeMapping markerGroupingEntry="org.example.mydsl.warningSeverity" value="1" /> 
       <markerAttributeMapping markerGroupingEntry="org.example.mydsl.infoSeverity" value="0" /> 
       <markerAttributeMapping markerGroupingEntry="org.example.mydsl.myAdditionalSeverity" value="10" /> 
      </markerAttributeGrouping> 
     </markerGrouping> 
    </markerContentGeneratorExtension> 
</extension> 

markerGroupingEntry要素はカテゴリ定義:3のよく知られたカテゴリとあなたの追加の重症度を、カスタム重大度の属性に基づいてカスタムグループを追加するには、UIプロジェクトのplugin.xmlに次の拡張子を追加するには

レベルorg.example.mydsl.myAdditionalSeveritymarkerGroupingEntry要素は、マーカー属性 "customseverity"の値に従って、これらのカテゴリに問題を埋め込むために使用されます。この後

、あなたがする必要があるあなたの追加の重大度レベルは、属性「customseverityは」値10

は今、あなたは「 - - >グループ別>カスタムの重大問題Viewメニュー」からこのグループを開くことができたときに満たされています属性値が実際に設定されていることを確認してください。標準の重大度レベルの重大度は、あなたがそれを拡張することはできませんので、列挙型であるorg.eclipse.xtext.diagnostics.Severityを、使用して渡され

package org.example.xsduse.ui.validation 

import org.eclipse.core.resources.IMarker 
import org.eclipse.core.resources.IResource 
import org.eclipse.core.runtime.CoreException 
import org.eclipse.xtext.ui.editor.validation.MarkerCreator 
import org.eclipse.xtext.validation.Issue 

class XsduseMarkerCreator extends MarkerCreator { 
    public static val CUSTOM_SEVERITY = "customseverity" 

    override protected setMarkerAttributes(Issue issue, IResource resource, IMarker marker) throws CoreException { 
     super.setMarkerAttributes(issue, resource, marker) 

     if (issue.code.startsWith("org.example.mydsl.customseverityissues.")) { 
      marker.setAttribute(XsduseMarkerCreator.CUSTOM_SEVERITY, 10) 
     } else { 
      marker.setAttribute(XsduseMarkerCreator.CUSTOM_SEVERITY, marker.getAttribute(IMarker.SEVERITY)) 
     } 
    } 
} 

:私はこれを行うための場所は、あなたがあなた自身のサブクラスMydslMarkerCreatorを作成する必要がorg.eclipse.xtext.ui.editor.validation.MarkerCreator.setMarkerAttributes(Issue, IResource, IMarker)だと思います。したがって、それを使用して追加の重大度レベルを渡すことはできません。一例として、問題コードを使用して、この重大度レベルのすべての問題に共通のプレフィックスを使用して、この情報を転送します。他の重大度については、元の重大度属性を再使用しました。これはsuper.setMarkerAttributes(...)に設定されています。

は、UIモジュール(MydslUiModule)にクラスを登録することを忘れないでください:

... 

class MydslUiModule extends AbstractMydslUiModule { 
    def Class<? extends MarkerCreator> bindMarkerCreator() { 
     XsduseMarkerCreator 
    } 

    ... 
} 

今、あなたはorg.example.mydsl」で始まる問題のコードでいつもと課題としてバリデータを使用することができます。敬具。 "新しいカテゴリに表示されます。

問題コード内の情報を転送したため、私の例ではerror()、warning()などの関数を作成しても意味がありませんでしたが、別のチャネルを決定した場合は、 。

関連する問題