org.eclipse.xtext.xtend2.jvmmodel
Class Xtend2JvmModelInferrer

java.lang.Object
  extended by org.eclipse.xtext.xtend2.jvmmodel.Xtend2JvmModelInferrer
All Implemented Interfaces:
IJvmModelInferrer

public class Xtend2JvmModelInferrer
extends java.lang.Object
implements IJvmModelInferrer

Author:
Jan Koehnlein - Initial contribution and API, Sven Efftinge

Nested Class Summary
 
Nested classes/interfaces inherited from interface org.eclipse.xtext.xbase.jvmmodel.IJvmModelInferrer
IJvmModelInferrer.NullImpl
 
Field Summary
static java.lang.String CREATE_CHACHE_VARIABLE_PREFIX
           
static java.lang.String CREATE_INITIALIZER_PREFIX
           
protected  TypesFactory typesFactory
           
 
Constructor Summary
Xtend2JvmModelInferrer()
           
 
Method Summary
protected  void addDefaultConstructor(XtendClass source, JvmGenericType target)
           
protected  void appendSyntheticDispatchMethods(XtendClass source, JvmGenericType target)
           
protected  java.lang.String computeFieldName(XtendField field, JvmGenericType declaringType)
           
protected  void computeInferredReturnTypes(JvmGenericType inferredJvmType)
           
protected  void copyAndFixTypeParameters(java.util.List<JvmTypeParameter> typeParameters, JvmTypeParameterDeclarator target)
           
protected  JvmOperation deriveGenericDispatchOperationSignature(java.util.List<JvmOperation> sortedOperations, JvmGenericType target)
           
protected  JvmTypeReference getTypeProxy(org.eclipse.emf.ecore.EObject pointer)
           
 void infer(org.eclipse.emf.ecore.EObject xtendFile, IAcceptor<JvmDeclaredType> acceptor, boolean prelinkingPhase)
           This method is called at two different times in a resource's life-cycle, reflected by whether {prelinkingPhase} is set to true or false.
protected  JvmGenericType transform(XtendClass source, boolean prelinkingPhase)
           
protected  void transform(XtendConstructor source, JvmGenericType container)
           
protected  void transform(XtendField source, JvmGenericType container)
           
protected  void transform(XtendFunction source, JvmGenericType container)
           
protected  void transform(XtendMember sourceMember, JvmGenericType container)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

CREATE_INITIALIZER_PREFIX

public static final java.lang.String CREATE_INITIALIZER_PREFIX
See Also:
Constant Field Values

CREATE_CHACHE_VARIABLE_PREFIX

public static final java.lang.String CREATE_CHACHE_VARIABLE_PREFIX
See Also:
Constant Field Values

typesFactory

@Inject
protected TypesFactory typesFactory
Constructor Detail

Xtend2JvmModelInferrer

public Xtend2JvmModelInferrer()
Method Detail

infer

public void infer(org.eclipse.emf.ecore.EObject xtendFile,
                  IAcceptor<JvmDeclaredType> acceptor,
                  boolean prelinkingPhase)
Description copied from interface: IJvmModelInferrer

This method is called at two different times in a resource's life-cycle, reflected by whether {prelinkingPhase} is set to true or false. When set to true everything is still in a pre-linking phase, that means linking hasn't been done yet. In this phase you just need to create the Jvm-elements which should be indexed (i.e. found globally). For regular Xbase expressions only the JvmTypes with the correct qualified name are needed at this point.

You must only infer Jvm elements which directly result from elements contained in the current resource!

When this method is called with prelinkingPhase set to false, you need to do the full inference including setting all links. But still you have to it in a particular order. First you need to create the complete tree structure and make sure you have passed the created JvmTypes to the acceptor. Only pass top level JvmTypes to the acceptor. Only if the tree structure is created and its root types have been passed to the acceptor, you are free to resolve any cross references.

Specified by:
infer in interface IJvmModelInferrer
Parameters:
xtendFile - - the root element from the parse result
acceptor - - an acceptor awaiting derived root JvmDeclaredTypes
prelinkingPhase - - whether the call is done in a pre-linking phase. During this phase clients may not do linking which relies on indexed information, because the index might not be fully computed yet.

transform

protected JvmGenericType transform(XtendClass source,
                                   boolean prelinkingPhase)

copyAndFixTypeParameters

protected void copyAndFixTypeParameters(java.util.List<JvmTypeParameter> typeParameters,
                                        JvmTypeParameterDeclarator target)

appendSyntheticDispatchMethods

protected void appendSyntheticDispatchMethods(XtendClass source,
                                              JvmGenericType target)

deriveGenericDispatchOperationSignature

protected JvmOperation deriveGenericDispatchOperationSignature(java.util.List<JvmOperation> sortedOperations,
                                                               JvmGenericType target)
Returns:
a JvmOperation with common denominator argument types of all given operations

addDefaultConstructor

protected void addDefaultConstructor(XtendClass source,
                                     JvmGenericType target)

transform

protected void transform(XtendMember sourceMember,
                         JvmGenericType container)

transform

protected void transform(XtendFunction source,
                         JvmGenericType container)

transform

protected void transform(XtendConstructor source,
                         JvmGenericType container)

transform

protected void transform(XtendField source,
                         JvmGenericType container)

computeFieldName

protected java.lang.String computeFieldName(XtendField field,
                                            JvmGenericType declaringType)

computeInferredReturnTypes

protected void computeInferredReturnTypes(JvmGenericType inferredJvmType)

getTypeProxy

protected JvmTypeReference getTypeProxy(org.eclipse.emf.ecore.EObject pointer)