2016-08-22 3 views
1

내 DSL Eclipse에 세 번째 범주를 추가하여 오류, 경고 및 myNewCat을 별도로 볼 수 있습니다. warning()error()과 같은 기능 (동일한 매개 변수)을 사용하여 유효성 검사 클래스에서 myNewCat()을 호출 할 수도 있습니다. 가장 쉬운 방법은 무엇입니까? 결과는 문제가 심각도 (예 : 오류, 경고, 정보) 중 하나는 마커 속성을 사용하여 그룹의 문제를 볼 Example what the outcome should look likeXtext : 경고 및 오류 외에도

답변

1

처럼 보이지만, 다른 마커가해야하는지

예는 그룹화를 할 수있는 속성 , 예. 유형. 보기 메뉴 (문제보기의 오른쪽 상단에있는 흰색 아래쪽 화살표)에서 문제보기 -> 그룹화 -> 그룹을 선택할 수 있습니다. ...

org.eclipse.ui.markerSupport 확장 점을 사용할 수 있습니다 사용 가능한 그룹을 사용자 정의하십시오 (참조 : Marker Support Reference). 고정 된 수의 심각도 수준은 여러 곳에서 하드 코딩되기 때문에 "심각도"그룹에 추가 심각도 수준을 추가하는 것이 효과적이지 않을 것이라고 생각합니다. org.eclipse.ui.internal.views.markers.Markers.getMarkerCounts(MarkerEntry[])이지만 심각도 및 기타 추가 기준에 따라 자체 그룹을 만들 수 있습니다.

이 시점에서 추가하려는 그룹이 오류, 경고 및 정보 (예 : 경미한 경고, 권장 사항 또는 유사)와 일치하는 다른 심각도인지 또는 실제로 원하는지 여부를 생각할 수도 있습니다 그룹화의 다른 종류. 하지만 물어볼 때 또 다른 심각도 수준을 원한다고 가정 해 봅시다.

은에 다음과 같은 확장자를 추가, 사용자 정의 심각도 특성을 기반으로 사용자 정의 그룹을 추가하려면 당신의 UI 프로젝트의 plugin.xml : 세 가지 잘 알려진 범주와 추가 심각도 :
<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 요소

이 범주를 정의 레벨 org.example.mydsl.myAdditionalSeverity. markerGroupingEntry 요소는 마커 속성 "customseverity"의 값에 따라이 카테고리를 채우는 데 사용됩니다. 속성 "customseverity는"당신이에서 그룹화이 열 수 있습니다 이제 10

값이있는 경우 귀하의 추가 심각도 수준이 가득 "문제의보기 메뉴를 -> 그룹으로 -> 사용자 정의 심각도"이 후

, 당신은에 있습니다 속성 값이 실제로 설정되어 있는지 확인하십시오. 나는이 작업을 수행 할 수있는 장소가 org.eclipse.xtext.ui.editor.validation.MarkerCreator.setMarkerAttributes(Issue, IResource, IMarker) 그래서 당신이 당신의 자신의 서브 클래스 MydslMarkerCreator을 만들 필요가 생각 :

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

당신이 그것을 확장 할 수 있도록 심각도 열거입니다 org.eclipse.xtext.diagnostics.Severity를 사용하여 전달되는 표준 심각도 수준. 따라서 추가 심각도 레벨을 전달하는 데 사용할 수 없습니다. 예를 들어, 문제 코드를 사용하여이 정보를 전송하고 추가 심각도 수준의 모든 문제에 대해 공통 접두어를 사용합니다. 다른 심각도 수준의 경우 원래 심각도 특성을 다시 사용했습니다.이 특성은 super.setMarkerAttributes(...)으로 설정되어 있습니다.

은 UI 모듈 (MydslUiModule)에서 클래스를 등록하는 것을 잊지 마세요 :

... 

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

    ... 
} 

지금 당신이 "org.example.mydsl로 시작하는 문제 코드와 함께 평소와 문제로 발리를 사용할 수 있습니다. 관습 " 귀하의 새 카테고리에 표시됩니다.

문제 코드에서 정보를 전송했기 때문에 error(), warning() 등의 함수를 만드는 것이 내 예제에서는 이해가되지 않지만 다른 채널을 결정할 경우 실제로 구현하려고 할 수 있습니다 .