annotations+=XAnnotation*
annotations.translateAnnotationsTo(it)
grammar org.xtext.example.mydsl2.MyDsl with org.eclipse.xtext.xbase.annotations.XbaseWithAnnotations generate myDsl "http://www.xtext.org/example/mydsl2/MyDsl" Model: i=XImportSection greetings+=Greeting*; Greeting: annos+=XAnnotation* 'Hello' name=ID '!';
class MyDslJvmModelInferrer extends AbstractModelInferrer { @Inject extension JvmTypesBuilder def dispatch void infer(Model element, IJvmDeclaredTypeAcceptor acceptor, boolean isPreIndexingPhase) { acceptor.accept(element.toClass("my.company.greeting.MyGreetings")) .initializeLater([ for (greeting : element.greetings) { val m = greeting.toMethod("hello" + greeting.name, greeting.newTypeRef(typeof(String))) [ body = [ append('''return "Hello «greeting.name»";''') ] ] members += m greeting.annos.translateAnnotationsTo(m) } ]) } }
grammar org.xtext.example.mydsl2.MyDsl with org.eclipse.xtext.xbase.annotations.XbaseWithAnnotations generate myDsl "http://www.xtext.org/example/mydsl2/MyDsl" Model: importSection=XImportSection? packages+=PackageDeclaration* ; PackageDeclaration: {PackageDeclaration} ( 'package' name=QualifiedName '{' elements+=AnnotatedElement* '}' ) ; AnnotatedElement: annotations+=XAnnotation* target=AbstractElement ; AbstractElement: ElementA | ElementB ; ElementA: 'elementA' name=ValidID ; ElementB: 'elementB' name=ValidID ;
class MyDslJvmModelInferrer extends AbstractModelInferrer { @Inject extension JvmTypesBuilder @Inject extension IQualifiedNameProvider def dispatch void infer(AbstractElement element, IJvmDeclaredTypeAcceptor acceptor, boolean isPreIndexingPhase) { acceptor.accept(element.toClass(element.fullyQualifiedName)).initializeLater( [ (element.eContainer as AnnotatedElement).annotations.translateAnnotationsTo(it) ]) } }
import javax.persistence.Entity import javax.jws.WebService package my.domain { @WebService elementA TestA @Entity elementB TestB }