2017-12-21 28 views
0

외부 Eclipse RCP 프로젝트에서 MyDSLProposalProvider를 확장하려고합니다. 내 ProposalProvider를 확장하는 클래스 속성이 필요한 확장 점 스키마를 만들었습니다. 새 프로젝트에서는 클래스를 확장하여 일부 메서드가 일부 출력을 제공하므로 외부 메서드가 호출되었음을 알 수 있습니다. 그러나 이것은 현재 일어나지 않습니다. 내가 고려해야 할 것이 있습니까? 나의 새로운 구현을 나는 AbstractMyDSLProposalProvider에서 생성하는 방법을 재 작성하지만 트리거 할 때 AbstractMyDSLProposalProvider에서 미리 정의 된 메서드를 호출하지Extension Point를 통해 외부 Eclipse 프로젝트에서 ProposalProvider 확장

MyDSLProposalProvider extends AbstractMyDSLProposalProvider 
ExternalProposalProvider extends MyDSLProposalProvider 

: 같은

는 현재 hirachy 보인다.

public class ExternalMyDSLProposalPovider extends MyDSLProposalProvider 
    { 
    @Override 
    public void completeComponent_Name(EObject model, Assignment 
    assignment, ContentAssistContext context, 
     ICompletionProposalAcceptor acceptor) { 
    System.err.println("extern"); 
    if(model instanceof Component) 
    { 
     createProposal("foo", "foo", context, acceptor); 
    } 
    super.completeComponent_Name(model, assignment, context, acceptor); 
    } 
    } 

이것은 외부 Eclipse Project의 클래스입니다. 도움 주셔서 감사합니다.

+0

새 프로젝트가 실제로 새 스키마를 사용하여 확장 지점을 선언하고 있습니까? 메인 플러그인에서 확장 점 정의를 읽는 방법은 무엇입니까? –

+0

예 새 프로젝트는 myDSL 프로젝트의 제공된 확장 점에 대한 확장을 선언합니다. 그러나 질문의 ​​두 번째 부분을 얻지 못합니다. 좀 더 자세한 내용을 말하면 어쩌면 explplain 수 있습니까? – fx88

+0

스키마를 사용하여 새로운 확장 점을 정의하는 경우 'IExtensionRegistry'에서 해당 스키마를 사용하는 확장 점을 읽는 코드를 작성해야합니다. –

답변

0

Eclipse를 정의한 스키마를 사용하여 확장 점을 선언하면 해당 선언이 확장 점 레지스트리에 놓입니다. 그게 전부입니다. 그런 다음 선언을 사용하도록 코드를 작성해야합니다.

당신은 같은 것을 사용하여 확장 점 레지스트리를 읽어

IExtensionRegistry extRegistry = Platform.getExtensionRegistry(); 

IExtensionPoint extPoint = extRegistry.getExtensionPoint("your extension point id"); 

IConfigurationElement [] elements = extPoint.getConfigurationElements(); 

elements 이제 확장 점을 사용하여 다양한 플러그인의 선언의 배열입니다.

IConfigurationElement에는 선언 속성의 값을 가져 오는 다양한 방법이 있습니다. 당신은 당신이 사용하는 클래스의 인스턴스를 만들 수있는 속성 중 하나의 클래스를 정의한 경우

:

IConfigurationElement element = .... a config element 

Object obj = element.createExecutableExtension("attribute name"); 

귀하의 경우 결과는 ExternalMyDSLProposalPovider해야합니다.

그러면 제안서에 무엇을 하든지간에이 객체를 연결해야합니다.