| /* |
| * generated by Xtext 2.11.0.beta2 |
| */ |
| package org.eclipse.osbp.xtext.oxtype.jvmmodel |
| |
| import com.google.inject.Inject |
| import org.eclipse.osbp.xtext.oxtype.oxtype.OXImportDeclaration |
| import org.eclipse.xtext.xbase.jvmmodel.AbstractModelInferrer |
| import org.eclipse.xtext.xbase.jvmmodel.IJvmDeclaredTypeAcceptor |
| import org.eclipse.xtext.xbase.jvmmodel.JvmTypesBuilder |
| |
| /** |
| * <p>Infers a JVM model from the source model.</p> |
| * |
| * <p>The JVM model should contain all elements that would appear in the Java code |
| * which is generated from the source model. Other models link against the JVM model rather than the source model.</p> |
| */ |
| class OXtypeJvmModelInferrer extends AbstractModelInferrer { |
| |
| /** |
| * convenience API to build and initialize JVM types and their members. |
| */ |
| @Inject extension JvmTypesBuilder |
| |
| /** |
| * The dispatch method {@code infer} is called for each instance of the |
| * given element's type that is contained in a resource. |
| * |
| * @param element |
| * the model to create one or more |
| * {@link org.eclipse.xtext.common.types.JvmDeclaredType declared |
| * types} from. |
| * @param acceptor |
| * each created |
| * {@link org.eclipse.xtext.common.types.JvmDeclaredType type} |
| * without a container should be passed to the acceptor in order |
| * get attached to the current resource. The acceptor's |
| * {@link IJvmDeclaredTypeAcceptor#accept(org.eclipse.xtext.common.types.JvmDeclaredType) |
| * accept(..)} method takes the constructed empty type for the |
| * pre-indexing phase. This one is further initialized in the |
| * indexing phase using the lambda you pass as the last argument. |
| * @param isPreIndexingPhase |
| * whether the method is called in a pre-indexing phase, i.e. |
| * when the global index is not yet fully updated. You must not |
| * rely on linking using the index if isPreIndexingPhase is |
| * <code>true</code>. |
| */ |
| def dispatch void infer(OXImportDeclaration element, IJvmDeclaredTypeAcceptor acceptor, boolean isPreIndexingPhase) { |
| // Here you explain how your model is mapped to Java elements, by writing the actual translation code. |
| |
| // An implementation for the initial hello world example could look like this: |
| // acceptor.accept(element.toClass("my.company.greeting.MyGreetings")) [ |
| // for (greeting : element.greetings) { |
| // members += greeting.toMethod("hello" + greeting.name, typeRef(String)) [ |
| // body = ''' |
| // return "Hello «greeting.name»"; |
| // ''' |
| // ] |
| // } |
| // ] |
| } |
| } |