public class BoxingAnalyzer extends AbstractExtendingCGModelVisitor<java.lang.Object,CodeGenAnalyzer>
CGBoxExp or CGUnboxExp whereever a conversion from boxed to unboxed or vice-versa is required.
CGCastExp whereever the apparent type is not available (e.g. Parameters passed as Object).
CGGuardExp whereever a non-null value is required.
No attempt at optimisation is made, since this can be performed by Common SubExpression Elimination.
Modifier and Type | Field and Description |
---|---|
protected CodeGenerator |
codeGenerator |
context
Constructor and Description |
---|
BoxingAnalyzer(CodeGenAnalyzer analyzer) |
Modifier and Type | Method and Description |
---|---|
protected boolean |
hasOclVoidOperation(OperationId operationId) |
protected boolean |
isSafe(CGCallExp cgCallExp)
Return true if cgCallExp uses a safe navigation operator.
|
protected CGValuedElement |
rewriteAsAssertNonNulled(CGValuedElement cgChild)
Insert a CGAssertNonNullExp around cgChild.
|
protected CGValuedElement |
rewriteAsBoxed(CGValuedElement cgChild)
Insert a CGBoxExp around cgChild.
|
protected CGValuedElement |
rewriteAsCast(CGVariableExp cgChild)
Insert a CGCastExp around cgChild.
|
protected CGValuedElement |
rewriteAsEcore(CGValuedElement cgChild,
org.eclipse.emf.ecore.EClassifier eClassifier)
Insert a CGEcoreExp around cgChild.
|
protected CGValuedElement |
rewriteAsGuarded(CGValuedElement cgChild,
boolean isSafe,
java.lang.String message)
Insert a CGGuardExp around cgChild.
|
protected CGValuedElement |
rewriteAsUnboxed(CGValuedElement cgChild)
Insert a CGUnboxExp around cgChild.
|
java.lang.Object |
visitCGBuiltInIterationCallExp(CGBuiltInIterationCallExp cgElement) |
java.lang.Object |
visitCGCachedOperationCallExp(CGCachedOperationCallExp cgElement) |
java.lang.Object |
visitCGEcoreOperation(CGEcoreOperation cgElement) |
java.lang.Object |
visitCGEcoreOperationCallExp(CGEcoreOperationCallExp cgElement) |
java.lang.Object |
visitCGEcoreOppositePropertyCallExp(CGEcoreOppositePropertyCallExp cgElement) |
java.lang.Object |
visitCGEcorePropertyCallExp(CGEcorePropertyCallExp cgElement) |
java.lang.Object |
visitCGElement(CGElement cgElement) |
java.lang.Object |
visitCGExecutorOppositePropertyCallExp(CGExecutorOppositePropertyCallExp cgElement) |
java.lang.Object |
visitCGExecutorPropertyCallExp(CGExecutorPropertyCallExp cgElement) |
java.lang.Object |
visitCGIfExp(CGIfExp cgElement) |
java.lang.Object |
visitCGIsEqual2Exp(CGIsEqual2Exp cgElement) |
java.lang.Object |
visitCGIsEqualExp(CGIsEqualExp cgElement) |
java.lang.Object |
visitCGLibraryIterateCallExp(CGLibraryIterateCallExp cgElement) |
java.lang.Object |
visitCGLibraryIterationCallExp(CGLibraryIterationCallExp cgElement) |
java.lang.Object |
visitCGLibraryOperation(CGLibraryOperation cgLibraryOperation) |
java.lang.Object |
visitCGLibraryOperationCallExp(CGLibraryOperationCallExp cgElement) |
java.lang.Object |
visitCGNativeOperationCallExp(CGNativeOperationCallExp cgElement) |
java.lang.Object |
visitCGNavigationCallExp(CGNavigationCallExp cgElement) |
java.lang.Object |
visitCGOperation(CGOperation cgElement) |
java.lang.Object |
visitCGProperty(CGProperty cgElement) |
java.lang.Object |
visitCGShadowPart(CGShadowPart cgShadowPart) |
java.lang.Object |
visitCGVariableExp(CGVariableExp cgElement) |
java.lang.Object |
visiting(CGElement visitable)
Return the result of visiting a visitable for which no more specific pivot type method
is available.
|
visitCGAccumulator, visitCGAssertNonNullExp, visitCGBoolean, visitCGBoxExp, visitCGCachedOperation, visitCGCallable, visitCGCallExp, visitCGCastExp, visitCGCatchExp, visitCGClass, visitCGCollectionExp, visitCGCollectionPart, visitCGConstant, visitCGConstantExp, visitCGConstraint, visitCGEcoreClassShadowExp, visitCGEcoreDataTypeShadowExp, visitCGEcoreExp, visitCGElementId, visitCGExecutorCompositionProperty, visitCGExecutorNavigationProperty, visitCGExecutorOperation, visitCGExecutorOperationCallExp, visitCGExecutorOppositeProperty, visitCGExecutorProperty, visitCGExecutorShadowPart, visitCGExecutorType, visitCGFinalVariable, visitCGGuardExp, visitCGInteger, visitCGInvalid, visitCGIsInvalidExp, visitCGIsKindOfExp, visitCGIsUndefinedExp, visitCGIterationCallExp, visitCGIterator, visitCGLetExp, visitCGLibraryPropertyCallExp, visitCGLocalVariable, visitCGMapExp, visitCGMapPart, visitCGModel, visitCGNamedElement, visitCGNativeOperation, visitCGNativeProperty, visitCGNativePropertyCallExp, visitCGNull, visitCGNumber, visitCGOperationCallExp, visitCGOppositePropertyCallExp, visitCGPackage, visitCGParameter, visitCGPropertyCallExp, visitCGReal, visitCGSettableVariable, visitCGShadowExp, visitCGString, visitCGText, visitCGThrowExp, visitCGTupleExp, visitCGTuplePart, visitCGTuplePartCallExp, visitCGTypedElement, visitCGTypeExp, visitCGTypeId, visitCGUnboxExp, visitCGUnlimited, visitCGValuedElement, visitCGVariable
getAdapter, safeVisit, visit
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
getAdapter
@NonNull protected final CodeGenerator codeGenerator
public BoxingAnalyzer(@NonNull CodeGenAnalyzer analyzer)
protected boolean hasOclVoidOperation(@NonNull OperationId operationId)
@Nullable protected CGValuedElement rewriteAsAssertNonNulled(@Nullable CGValuedElement cgChild)
protected boolean isSafe(@NonNull CGCallExp cgCallExp)
protected CGValuedElement rewriteAsBoxed(@Nullable CGValuedElement cgChild)
protected CGValuedElement rewriteAsEcore(@Nullable CGValuedElement cgChild, org.eclipse.emf.ecore.EClassifier eClassifier)
@Nullable protected CGValuedElement rewriteAsGuarded(@Nullable CGValuedElement cgChild, boolean isSafe, @NonNull java.lang.String message)
protected CGValuedElement rewriteAsCast(@Nullable CGVariableExp cgChild)
protected CGValuedElement rewriteAsUnboxed(@Nullable CGValuedElement cgChild)
@Nullable public java.lang.Object visiting(@NonNull CGElement visitable)
CGModelVisitor
@Nullable public java.lang.Object visitCGBuiltInIterationCallExp(@NonNull CGBuiltInIterationCallExp cgElement)
visitCGBuiltInIterationCallExp
in interface CGModelVisitor<java.lang.Object>
visitCGBuiltInIterationCallExp
in class AbstractExtendingCGModelVisitor<java.lang.Object,CodeGenAnalyzer>
@Nullable public java.lang.Object visitCGCachedOperationCallExp(@NonNull CGCachedOperationCallExp cgElement)
visitCGCachedOperationCallExp
in interface CGModelVisitor<java.lang.Object>
visitCGCachedOperationCallExp
in class AbstractExtendingCGModelVisitor<java.lang.Object,CodeGenAnalyzer>
@Nullable public java.lang.Object visitCGEcoreOperation(@NonNull CGEcoreOperation cgElement)
visitCGEcoreOperation
in interface CGModelVisitor<java.lang.Object>
visitCGEcoreOperation
in class AbstractExtendingCGModelVisitor<java.lang.Object,CodeGenAnalyzer>
@Nullable public java.lang.Object visitCGEcoreOperationCallExp(@NonNull CGEcoreOperationCallExp cgElement)
visitCGEcoreOperationCallExp
in interface CGModelVisitor<java.lang.Object>
visitCGEcoreOperationCallExp
in class AbstractExtendingCGModelVisitor<java.lang.Object,CodeGenAnalyzer>
@Nullable public java.lang.Object visitCGEcoreOppositePropertyCallExp(@NonNull CGEcoreOppositePropertyCallExp cgElement)
visitCGEcoreOppositePropertyCallExp
in interface CGModelVisitor<java.lang.Object>
visitCGEcoreOppositePropertyCallExp
in class AbstractExtendingCGModelVisitor<java.lang.Object,CodeGenAnalyzer>
@Nullable public java.lang.Object visitCGEcorePropertyCallExp(@NonNull CGEcorePropertyCallExp cgElement)
visitCGEcorePropertyCallExp
in interface CGModelVisitor<java.lang.Object>
visitCGEcorePropertyCallExp
in class AbstractExtendingCGModelVisitor<java.lang.Object,CodeGenAnalyzer>
@Nullable public java.lang.Object visitCGExecutorOppositePropertyCallExp(@NonNull CGExecutorOppositePropertyCallExp cgElement)
visitCGExecutorOppositePropertyCallExp
in interface CGModelVisitor<java.lang.Object>
visitCGExecutorOppositePropertyCallExp
in class AbstractExtendingCGModelVisitor<java.lang.Object,CodeGenAnalyzer>
@Nullable public java.lang.Object visitCGExecutorPropertyCallExp(@NonNull CGExecutorPropertyCallExp cgElement)
visitCGExecutorPropertyCallExp
in interface CGModelVisitor<java.lang.Object>
visitCGExecutorPropertyCallExp
in class AbstractExtendingCGModelVisitor<java.lang.Object,CodeGenAnalyzer>
@Nullable public java.lang.Object visitCGElement(@NonNull CGElement cgElement)
visitCGElement
in interface CGModelVisitor<java.lang.Object>
visitCGElement
in class AbstractExtendingCGModelVisitor<java.lang.Object,CodeGenAnalyzer>
@Nullable public java.lang.Object visitCGIfExp(@NonNull CGIfExp cgElement)
visitCGIfExp
in interface CGModelVisitor<java.lang.Object>
visitCGIfExp
in class AbstractExtendingCGModelVisitor<java.lang.Object,CodeGenAnalyzer>
@Nullable public java.lang.Object visitCGIsEqualExp(@NonNull CGIsEqualExp cgElement)
visitCGIsEqualExp
in interface CGModelVisitor<java.lang.Object>
visitCGIsEqualExp
in class AbstractExtendingCGModelVisitor<java.lang.Object,CodeGenAnalyzer>
@Nullable public java.lang.Object visitCGIsEqual2Exp(@NonNull CGIsEqual2Exp cgElement)
visitCGIsEqual2Exp
in interface CGModelVisitor<java.lang.Object>
visitCGIsEqual2Exp
in class AbstractExtendingCGModelVisitor<java.lang.Object,CodeGenAnalyzer>
@Nullable public java.lang.Object visitCGLibraryIterateCallExp(@NonNull CGLibraryIterateCallExp cgElement)
visitCGLibraryIterateCallExp
in interface CGModelVisitor<java.lang.Object>
visitCGLibraryIterateCallExp
in class AbstractExtendingCGModelVisitor<java.lang.Object,CodeGenAnalyzer>
@Nullable public java.lang.Object visitCGLibraryIterationCallExp(@NonNull CGLibraryIterationCallExp cgElement)
visitCGLibraryIterationCallExp
in interface CGModelVisitor<java.lang.Object>
visitCGLibraryIterationCallExp
in class AbstractExtendingCGModelVisitor<java.lang.Object,CodeGenAnalyzer>
@Nullable public java.lang.Object visitCGLibraryOperation(@NonNull CGLibraryOperation cgLibraryOperation)
visitCGLibraryOperation
in interface CGModelVisitor<java.lang.Object>
visitCGLibraryOperation
in class AbstractExtendingCGModelVisitor<java.lang.Object,CodeGenAnalyzer>
@Nullable public java.lang.Object visitCGLibraryOperationCallExp(@NonNull CGLibraryOperationCallExp cgElement)
visitCGLibraryOperationCallExp
in interface CGModelVisitor<java.lang.Object>
visitCGLibraryOperationCallExp
in class AbstractExtendingCGModelVisitor<java.lang.Object,CodeGenAnalyzer>
@Nullable public java.lang.Object visitCGNativeOperationCallExp(@NonNull CGNativeOperationCallExp cgElement)
visitCGNativeOperationCallExp
in interface CGModelVisitor<java.lang.Object>
visitCGNativeOperationCallExp
in class AbstractExtendingCGModelVisitor<java.lang.Object,CodeGenAnalyzer>
@Nullable public java.lang.Object visitCGNavigationCallExp(@NonNull CGNavigationCallExp cgElement)
visitCGNavigationCallExp
in interface CGModelVisitor<java.lang.Object>
visitCGNavigationCallExp
in class AbstractExtendingCGModelVisitor<java.lang.Object,CodeGenAnalyzer>
@Nullable public java.lang.Object visitCGOperation(@NonNull CGOperation cgElement)
visitCGOperation
in interface CGModelVisitor<java.lang.Object>
visitCGOperation
in class AbstractExtendingCGModelVisitor<java.lang.Object,CodeGenAnalyzer>
@Nullable public java.lang.Object visitCGProperty(@NonNull CGProperty cgElement)
visitCGProperty
in interface CGModelVisitor<java.lang.Object>
visitCGProperty
in class AbstractExtendingCGModelVisitor<java.lang.Object,CodeGenAnalyzer>
@Nullable public java.lang.Object visitCGShadowPart(@NonNull CGShadowPart cgShadowPart)
visitCGShadowPart
in interface CGModelVisitor<java.lang.Object>
visitCGShadowPart
in class AbstractExtendingCGModelVisitor<java.lang.Object,CodeGenAnalyzer>
@Nullable public java.lang.Object visitCGVariableExp(@NonNull CGVariableExp cgElement)
visitCGVariableExp
in interface CGModelVisitor<java.lang.Object>
visitCGVariableExp
in class AbstractExtendingCGModelVisitor<java.lang.Object,CodeGenAnalyzer>