|
|
|
|
Re: specify STRING in my DSL, so I can use templates inside the string [message #1729420 is a reply to message #1729412] |
Thu, 14 April 2016 05:09 |
|
Hi,
xtend actually parses Strings. ntl you can xtend the behaviour how contexts are created. here is a wild guess (not really tested)
public class MyDslTemplateProposalProvider extends DefaultTemplateProposalProvider {
private ContextTypeIdHelper helper;
@Inject
public MyDslTemplateProposalProvider(TemplateStore templateStore, ContextTypeRegistry registry,
ContextTypeIdHelper helper) {
super(templateStore, registry, helper);
this.helper = helper;
}
@Override
protected void createTemplates(TemplateContext templateContext, ContentAssistContext context,
ITemplateAcceptor acceptor) {
System.out.println("context: " + context);
super.createTemplates(templateContext, context, acceptor);
}
@Override
protected TemplateContext[] createTemplateContexts(ContentAssistContext context) {
return super.createTemplateContexts(context);
}
@Override
protected IFollowElementAcceptor createFollowElementAcceptor(Collection<TemplateContextType> result) {
return new FollowElementAcceptor(result) {
@Override
public Boolean caseTerminalRule(TerminalRule object) {
addContextType(helper.getId(object));
return super.caseTerminalRule(object);
}
};
}
}
public class MyDslXtextTemplateContextTypeRegistry extends XtextTemplateContextTypeRegistry {
@Inject
public MyDslXtextTemplateContextTypeRegistry(IGrammarAccess grammarAccess, Provider<XtextTemplateContextType> ctxTypeProvider, ContextTypeIdHelper helper) {
super(grammarAccess, ctxTypeProvider, helper);
}
@Override
protected void registerContextTypes(IGrammarAccess grammarAccess,
Provider<XtextTemplateContextType> ctxTypeProvider) {
List<TerminalRule> terminalRules = GrammarUtil.allTerminalRules(grammarAccess.getGrammar());
for (TerminalRule terminalRule : terminalRules) {
String value = getHelper().getId(terminalRule);
if (value!=null) {
XtextTemplateContextType type = ctxTypeProvider.get();
type.setName("Terminal '"+terminalRule.getName()+"'");
type.setId(value);
addContextType(type);
}
}
super.registerContextTypes(grammarAccess, ctxTypeProvider);
}
}
public class MyDslContextTypeIdHelper extends ContextTypeIdHelper{
@Inject
private MyDslGrammarAccess ga;
@Override
public String getId(AbstractRule rule) {
if (rule instanceof TerminalRule) {
String id = ga.getGrammar().getName()+"."+rule.getName();
return id;
}
return super.getId(rule);
}
}
@FinalFieldsConstructor
class MyDslUiModule extends AbstractMyDslUiModule {
override bindITemplateProposalProvider() {
MyDslTemplateProposalProvider
}
def Class<? extends ContextTypeIdHelper> bindContextTypeIdHelper() {
return MyDslContextTypeIdHelper
}
override bindContextTypeRegistry() {
MyDslXtextTemplateContextTypeRegistry
}
}
Twitter : @chrdietrich
Blog : https://www.dietrich-it.de
|
|
|
Powered by
FUDForum. Page generated in 0.02087 seconds