Class CommonExpressionsTypeVisitor
- java.lang.Object
-
- de.monticore.types3.AbstractTypeVisitor
-
- de.monticore.expressions.commonexpressions.types3.CommonExpressionsTypeVisitor
-
- All Implemented Interfaces:
CommonExpressionsHandler,CommonExpressionsVisitor2,de.monticore.visitor.IHandler,de.monticore.visitor.IVisitor
- Direct Known Subclasses:
CommonExpressionsCTTIVisitor,CommonExpressionsTypeIdAsConstructorTypeVisitor
public class CommonExpressionsTypeVisitor extends AbstractTypeVisitor implements CommonExpressionsVisitor2, CommonExpressionsHandler
This Visitor can calculate a SymTypeExpression (type) for the expressions in CommonExpressions. It can be combined with other expressions in your language
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static classCommonExpressionsTypeVisitor.FieldAccessExpectedResultdefines which results are expected of a FieldAccessExpression.
-
Field Summary
Fields Modifier and Type Field Description protected static java.lang.StringARITHMETIC_OPERATOR_ERROR_CODEprotected static java.lang.StringBOOLEAN_CONDITIONAL_ERROR_CODEprotected static java.lang.StringEQUALITY_OPERATOR_ERROR_CODEprotected static java.lang.StringNUMERIC_COMPARISON_ERROR_CODEprotected static java.lang.StringNUMERIC_PREFIX_ERROR_CODEprotected CommonExpressionsTraversertraverser-
Fields inherited from class de.monticore.types3.AbstractTypeVisitor
ctx4Ast, LOG_NAME, tmpMap, type4Ast
-
-
Constructor Summary
Constructors Constructor Description CommonExpressionsTypeVisitor()
-
Method Summary
All Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description protected SymTypeExpressioncalculateArrayAccess(ASTArrayAccessExpression expr, SymTypeExpression toBeAccessed, SymTypeExpression indexType)protected SymTypeExpressioncalculateArrayAccessForArray(ASTArrayAccessExpression expr, SymTypeArray toBeAccessed, SymTypeExpression indexType)protected SymTypeExpressioncalculateArrayAccessForTuple(ASTArrayAccessExpression expr, SymTypeOfTuple toBeAccessed, SymTypeExpression indexType)protected java.util.Optional<SymTypeExpression>calculateExprFieldAccess(ASTFieldAccessExpression expr)Deprecated.protected java.util.Optional<SymTypeExpression>calculateExprFieldAccess(ASTFieldAccessExpression expr, boolean resultsAreOptional)calculates a.b with a being an expression, e.g., getX().varprotected java.util.Optional<SymTypeExpression>calculateExprFieldAccessOrLogError(ASTFieldAccessExpression expr, boolean resultsAreOptional)case: expression "." name, e.g., getX().var.protected java.util.Optional<SymTypeExpression>calculateExprQName(ASTFieldAccessExpression expr)Deprecated.protected java.util.Optional<SymTypeExpression>calculateExprQName(ASTFieldAccessExpression expr, boolean resultsAreOptional)calculates a.b.c as expression with a.b being a qualifierprotected java.util.Optional<SymTypeExpression>calculateExprQName(ASTNameExpression expr)calculates "a" as expressionprotected java.util.Optional<SymTypeExpression>calculateExprQNameOrLogError(ASTFieldAccessExpression expr, boolean resultsAreOptional)case: qName "." name, e.g., package.artifact.staticVar.protected voidcalculateFieldAccess(ASTFieldAccessExpression expr, CommonExpressionsTypeVisitor.FieldAccessExpectedResult expectedResult)implementation for endVisit.protected voidcalculateFieldAccessFirstName(ASTNameExpression expr)Part of custom traversal for field access expressions.protected java.util.Optional<SymTypeExpression>calculateInnerTypeIdFieldAccess(ASTFieldAccessExpression expr)calculates a.b.c as a type identifier with a.b being a type identifier, e.g., OuterClass.InnerClass.staticVariableprotected java.util.Optional<SymTypeExpression>calculateInnerTypeIdFieldAccessOrLogError(ASTFieldAccessExpression expr, boolean resultsAreOptional)protected java.util.Optional<SymTypeExpression>calculateTypeIdFieldAccess(ASTFieldAccessExpression expr, boolean resultsAreOptional)calculates a.b.c with a.b being a type identifier, e.g., XClass.staticVarprotected java.util.Optional<SymTypeExpression>calculateTypeIdFieldAccessOrLogError(ASTFieldAccessExpression expr, boolean resultsAreOptional)case: typeIdentifier "." name, e.g., XClass.staticVar.protected java.util.Optional<SymTypeExpression>calculateTypeIdQName(ASTFieldAccessExpression expr)calculates a.b.c as type identifier with a.b being a qualifier.protected java.util.Optional<SymTypeExpression>calculateTypeIdQName(ASTNameExpression expr)calculates "a" as type identifiervoidendVisit(ASTArrayAccessExpression expr)voidendVisit(ASTBooleanAndOpExpression expr)voidendVisit(ASTBooleanNotExpression expr)voidendVisit(ASTBooleanOrOpExpression expr)voidendVisit(ASTBracketExpression expr)voidendVisit(ASTCallExpression expr)voidendVisit(ASTConditionalExpression expr)voidendVisit(ASTDivideExpression expr)voidendVisit(ASTEqualsExpression expr)voidendVisit(ASTFieldAccessExpression expr)voidendVisit(ASTGreaterEqualExpression expr)voidendVisit(ASTGreaterThanExpression expr)voidendVisit(ASTLessEqualExpression expr)voidendVisit(ASTLessThanExpression expr)voidendVisit(ASTLogicalNotExpression expr)voidendVisit(ASTMinusExpression expr)voidendVisit(ASTMinusPrefixExpression expr)voidendVisit(ASTModuloExpression expr)voidendVisit(ASTMultExpression expr)voidendVisit(ASTNotEqualsExpression expr)voidendVisit(ASTPlusExpression expr)voidendVisit(ASTPlusPrefixExpression expr)protected voidfieldAccessCustomTraverse(ASTFieldAccessExpression expr)custom traverse for ASTFieldAccessExpressions.protected java.util.Optional<java.lang.String>getExprAsQName(ASTExpression expr)For FieldAccessExpression / CallExpression given expression "." name, expression may be a (qualified) name for * a type (for static members) * a value (global variable / function) this analyses the expression and returns a qualified name if possible, which _may_ be of a type / value Note: Java (Spec v.20 chapter 19: Syntax) does not allow type arguments, e.g.,class C<T>{T t;} C<Float>.t = 3.2;CommonExpressionsTraversergetTraverser()protected ICommonExpressionsTypeDispatchergetTypeDispatcher()protected SymTypeExpressiongetTypeForInfixOrLogError(java.lang.String errorCode, ASTInfixExpression expr, java.lang.String op, java.util.Optional<SymTypeExpression> result, SymTypeExpression left, SymTypeExpression right)protected SymTypeExpressiongetTypeForPrefixOrLogError(java.lang.String errorCode, ASTExpression expr, java.lang.String prefix, java.util.Optional<SymTypeExpression> result, SymTypeExpression inner)protected voidhandleFieldAccessResolvedType(ASTFieldAccessExpression expr, SymTypeExpression resolvedType)field accesses are a special case with regard to the visitor structure as such, this hook-point is required to enable generics support.protected booleanisSeriesOfNames(ASTExpression expr)does the expression have a form like a.b.c.d?protected java.lang.StringprintFunctionForLog(SymTypeOfFunction func)protected java.util.Optional<SymTypeExpression>resolveVariablesAndFunctionsWithinType(SymTypeExpression innerAsExprType, java.lang.String name, de.monticore.symboltable.modifiers.AccessModifier modifier, java.util.function.Predicate<VariableSymbol> varPredicate, java.util.function.Predicate<FunctionSymbol> funcPredicate)resolver helper function that searches for functions AND variables in a type at the same timevoidsetOperatorCalculator(TypeVisitorOperatorCalculator operatorCalculator)Deprecated, for removal: This API element is subject to removal in a future version.is now a static delegatevoidsetTraverser(CommonExpressionsTraverser traverser)voidsetTypeContextCalculator(TypeContextCalculator typeCtxCalc)Deprecated, for removal: This API element is subject to removal in a future version.is now a static delegatevoidsetWithinScopeResolver(WithinScopeBasicSymbolsResolver withinScopeResolver)Deprecated, for removal: This API element is subject to removal in a future version.is now a static delegatevoidsetWithinTypeBasicSymbolsResolver(WithinTypeBasicSymbolsResolver withinTypeResolver)Deprecated, for removal: This API element is subject to removal in a future version.is now a static delegatevoidtraverse(ASTFieldAccessExpression expr)-
Methods inherited from class de.monticore.types3.AbstractTypeVisitor
getAsBasicSymbolsScope, getInferenceContext4Ast, getType4Ast, setContext4Ast, setType4Ast
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface de.monticore.expressions.commonexpressions._visitor.CommonExpressionsHandler
handle, handle, handle, handle, handle, handle, handle, handle, handle, handle, handle, handle, handle, handle, handle, handle, handle, handle, handle, handle, handle, handle, handle, handle, handle, handle, handle, handle, traverse, traverse, traverse, traverse, traverse, traverse, traverse, traverse, traverse, traverse, traverse, traverse, traverse, traverse, traverse, traverse, traverse, traverse, traverse, traverse, traverse, traverse, traverse, traverse, traverse
-
Methods inherited from interface de.monticore.expressions.commonexpressions._visitor.CommonExpressionsVisitor2
endVisit, endVisit, endVisit, endVisit, endVisit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit
-
-
-
-
Field Detail
-
ARITHMETIC_OPERATOR_ERROR_CODE
protected static final java.lang.String ARITHMETIC_OPERATOR_ERROR_CODE
- See Also:
- Constant Field Values
-
NUMERIC_PREFIX_ERROR_CODE
protected static final java.lang.String NUMERIC_PREFIX_ERROR_CODE
- See Also:
- Constant Field Values
-
EQUALITY_OPERATOR_ERROR_CODE
protected static final java.lang.String EQUALITY_OPERATOR_ERROR_CODE
- See Also:
- Constant Field Values
-
NUMERIC_COMPARISON_ERROR_CODE
protected static final java.lang.String NUMERIC_COMPARISON_ERROR_CODE
- See Also:
- Constant Field Values
-
BOOLEAN_CONDITIONAL_ERROR_CODE
protected static final java.lang.String BOOLEAN_CONDITIONAL_ERROR_CODE
- See Also:
- Constant Field Values
-
traverser
protected CommonExpressionsTraverser traverser
-
-
Method Detail
-
getTraverser
public CommonExpressionsTraverser getTraverser()
- Specified by:
getTraverserin interfaceCommonExpressionsHandler- Specified by:
getTraverserin interfacede.monticore.visitor.IHandler
-
setTraverser
public void setTraverser(CommonExpressionsTraverser traverser)
- Specified by:
setTraverserin interfaceCommonExpressionsHandler
-
setOperatorCalculator
@Deprecated(forRemoval=true) public void setOperatorCalculator(TypeVisitorOperatorCalculator operatorCalculator)
Deprecated, for removal: This API element is subject to removal in a future version.is now a static delegate
-
setWithinTypeBasicSymbolsResolver
@Deprecated(forRemoval=true) public void setWithinTypeBasicSymbolsResolver(WithinTypeBasicSymbolsResolver withinTypeResolver)
Deprecated, for removal: This API element is subject to removal in a future version.is now a static delegate
-
setTypeContextCalculator
@Deprecated(forRemoval=true) public void setTypeContextCalculator(TypeContextCalculator typeCtxCalc)
Deprecated, for removal: This API element is subject to removal in a future version.is now a static delegate
-
setWithinScopeResolver
@Deprecated(forRemoval=true) public void setWithinScopeResolver(WithinScopeBasicSymbolsResolver withinScopeResolver)
Deprecated, for removal: This API element is subject to removal in a future version.is now a static delegate
-
endVisit
public void endVisit(ASTPlusPrefixExpression expr)
- Specified by:
endVisitin interfaceCommonExpressionsVisitor2
-
endVisit
public void endVisit(ASTMinusPrefixExpression expr)
- Specified by:
endVisitin interfaceCommonExpressionsVisitor2
-
endVisit
public void endVisit(ASTPlusExpression expr)
- Specified by:
endVisitin interfaceCommonExpressionsVisitor2
-
endVisit
public void endVisit(ASTMultExpression expr)
- Specified by:
endVisitin interfaceCommonExpressionsVisitor2
-
endVisit
public void endVisit(ASTDivideExpression expr)
- Specified by:
endVisitin interfaceCommonExpressionsVisitor2
-
endVisit
public void endVisit(ASTMinusExpression expr)
- Specified by:
endVisitin interfaceCommonExpressionsVisitor2
-
endVisit
public void endVisit(ASTModuloExpression expr)
- Specified by:
endVisitin interfaceCommonExpressionsVisitor2
-
endVisit
public void endVisit(ASTLessEqualExpression expr)
- Specified by:
endVisitin interfaceCommonExpressionsVisitor2
-
endVisit
public void endVisit(ASTGreaterEqualExpression expr)
- Specified by:
endVisitin interfaceCommonExpressionsVisitor2
-
endVisit
public void endVisit(ASTLessThanExpression expr)
- Specified by:
endVisitin interfaceCommonExpressionsVisitor2
-
endVisit
public void endVisit(ASTGreaterThanExpression expr)
- Specified by:
endVisitin interfaceCommonExpressionsVisitor2
-
endVisit
public void endVisit(ASTEqualsExpression expr)
- Specified by:
endVisitin interfaceCommonExpressionsVisitor2
-
endVisit
public void endVisit(ASTNotEqualsExpression expr)
- Specified by:
endVisitin interfaceCommonExpressionsVisitor2
-
endVisit
public void endVisit(ASTBooleanAndOpExpression expr)
- Specified by:
endVisitin interfaceCommonExpressionsVisitor2
-
endVisit
public void endVisit(ASTBooleanOrOpExpression expr)
- Specified by:
endVisitin interfaceCommonExpressionsVisitor2
-
endVisit
public void endVisit(ASTLogicalNotExpression expr)
- Specified by:
endVisitin interfaceCommonExpressionsVisitor2
-
endVisit
public void endVisit(ASTConditionalExpression expr)
- Specified by:
endVisitin interfaceCommonExpressionsVisitor2
-
endVisit
public void endVisit(ASTBooleanNotExpression expr)
- Specified by:
endVisitin interfaceCommonExpressionsVisitor2
-
endVisit
public void endVisit(ASTBracketExpression expr)
- Specified by:
endVisitin interfaceCommonExpressionsVisitor2
-
endVisit
public void endVisit(ASTArrayAccessExpression expr)
- Specified by:
endVisitin interfaceCommonExpressionsVisitor2
-
calculateArrayAccess
protected SymTypeExpression calculateArrayAccess(ASTArrayAccessExpression expr, SymTypeExpression toBeAccessed, SymTypeExpression indexType)
-
calculateArrayAccessForTuple
protected SymTypeExpression calculateArrayAccessForTuple(ASTArrayAccessExpression expr, SymTypeOfTuple toBeAccessed, SymTypeExpression indexType)
-
calculateArrayAccessForArray
protected SymTypeExpression calculateArrayAccessForArray(ASTArrayAccessExpression expr, SymTypeArray toBeAccessed, SymTypeExpression indexType)
-
endVisit
public void endVisit(ASTCallExpression expr)
- Specified by:
endVisitin interfaceCommonExpressionsVisitor2
-
traverse
public void traverse(ASTFieldAccessExpression expr)
- Specified by:
traversein interfaceCommonExpressionsHandler
-
fieldAccessCustomTraverse
protected void fieldAccessCustomTraverse(ASTFieldAccessExpression expr)
custom traverse for ASTFieldAccessExpressions. Normal traversing would try to calculate types, however, not every ASTFieldAccessExpression is a field access expression; E.g., given the expression "a.b.c.d.e", "a.b" could be a package name, "a.b.c" a name of a typeId, "a.b.c.d" the name of a variable, and "a.b.c.d.e" the access of field "e" in "a.b.c.d".As such, given a series of names a.b.c, up until the most outer field access expression in the series, we allow to not find an expression (and thus have no type calculated).
-
endVisit
public void endVisit(ASTFieldAccessExpression expr)
- Specified by:
endVisitin interfaceCommonExpressionsVisitor2
-
calculateFieldAccess
protected void calculateFieldAccess(ASTFieldAccessExpression expr, CommonExpressionsTypeVisitor.FieldAccessExpectedResult expectedResult)
implementation for endVisit. One needs to state whether an expression type has to be found, or a type identifier type suffices, s.fieldAccessCustomTraverse(ASTFieldAccessExpression). Note that this flag is passed to functions calculating the types, simply to allow them to search differently given the knowledge that the given ASTFieldAccessExpression is an actual expression.
-
handleFieldAccessResolvedType
protected void handleFieldAccessResolvedType(ASTFieldAccessExpression expr, SymTypeExpression resolvedType)
field accesses are a special case with regard to the visitor structure as such, this hook-point is required to enable generics support.
-
calculateFieldAccessFirstName
protected void calculateFieldAccessFirstName(ASTNameExpression expr)
Part of custom traversal for field access expressions. Results are always optional, as the name expression could be part of a qualified name.
-
calculateExprFieldAccessOrLogError
protected java.util.Optional<SymTypeExpression> calculateExprFieldAccessOrLogError(ASTFieldAccessExpression expr, boolean resultsAreOptional)
case: expression "." name, e.g., getX().var. will log an error if necessary (resultsAreOptional).
-
calculateExprFieldAccess
@Deprecated protected java.util.Optional<SymTypeExpression> calculateExprFieldAccess(ASTFieldAccessExpression expr)
Deprecated.
-
calculateExprFieldAccess
protected java.util.Optional<SymTypeExpression> calculateExprFieldAccess(ASTFieldAccessExpression expr, boolean resultsAreOptional)
calculates a.b with a being an expression, e.g., getX().var
-
calculateTypeIdFieldAccessOrLogError
protected java.util.Optional<SymTypeExpression> calculateTypeIdFieldAccessOrLogError(ASTFieldAccessExpression expr, boolean resultsAreOptional)
case: typeIdentifier "." name, e.g., XClass.staticVar. will log an error if necessary (resultsAreOptional).
-
calculateTypeIdFieldAccess
protected java.util.Optional<SymTypeExpression> calculateTypeIdFieldAccess(ASTFieldAccessExpression expr, boolean resultsAreOptional)
calculates a.b.c with a.b being a type identifier, e.g., XClass.staticVar
-
calculateInnerTypeIdFieldAccessOrLogError
protected java.util.Optional<SymTypeExpression> calculateInnerTypeIdFieldAccessOrLogError(ASTFieldAccessExpression expr, boolean resultsAreOptional)
-
calculateInnerTypeIdFieldAccess
protected java.util.Optional<SymTypeExpression> calculateInnerTypeIdFieldAccess(ASTFieldAccessExpression expr)
calculates a.b.c as a type identifier with a.b being a type identifier, e.g., OuterClass.InnerClass.staticVariable
-
calculateExprQNameOrLogError
protected java.util.Optional<SymTypeExpression> calculateExprQNameOrLogError(ASTFieldAccessExpression expr, boolean resultsAreOptional)
case: qName "." name, e.g., package.artifact.staticVar. will log an error if necessary (resultsAreOptional).
-
calculateExprQName
@Deprecated protected java.util.Optional<SymTypeExpression> calculateExprQName(ASTFieldAccessExpression expr)
Deprecated.
-
calculateExprQName
protected java.util.Optional<SymTypeExpression> calculateExprQName(ASTFieldAccessExpression expr, boolean resultsAreOptional)
calculates a.b.c as expression with a.b being a qualifier
-
calculateExprQName
protected java.util.Optional<SymTypeExpression> calculateExprQName(ASTNameExpression expr)
calculates "a" as expression
-
calculateTypeIdQName
protected java.util.Optional<SymTypeExpression> calculateTypeIdQName(ASTFieldAccessExpression expr)
calculates a.b.c as type identifier with a.b being a qualifier. only evaluates qualified names without type arguments s.a.getExprAsQName(ASTExpression)
-
calculateTypeIdQName
protected java.util.Optional<SymTypeExpression> calculateTypeIdQName(ASTNameExpression expr)
calculates "a" as type identifier
-
resolveVariablesAndFunctionsWithinType
protected java.util.Optional<SymTypeExpression> resolveVariablesAndFunctionsWithinType(SymTypeExpression innerAsExprType, java.lang.String name, de.monticore.symboltable.modifiers.AccessModifier modifier, java.util.function.Predicate<VariableSymbol> varPredicate, java.util.function.Predicate<FunctionSymbol> funcPredicate)
resolver helper function that searches for functions AND variables in a type at the same time
-
getExprAsQName
protected java.util.Optional<java.lang.String> getExprAsQName(ASTExpression expr)
For FieldAccessExpression / CallExpression given expression "." name, expression may be a (qualified) name for * a type (for static members) * a value (global variable / function) this analyses the expression and returns a qualified name if possible, which _may_ be of a type / value Note: Java (Spec v.20 chapter 19: Syntax) does not allow type arguments, e.g.,class C<T>{T t;} C<Float>.t = 3.2;
-
isSeriesOfNames
protected boolean isSeriesOfNames(ASTExpression expr)
does the expression have a form like a.b.c.d?
-
getTypeForInfixOrLogError
protected SymTypeExpression getTypeForInfixOrLogError(java.lang.String errorCode, ASTInfixExpression expr, java.lang.String op, java.util.Optional<SymTypeExpression> result, SymTypeExpression left, SymTypeExpression right)
-
getTypeForPrefixOrLogError
protected SymTypeExpression getTypeForPrefixOrLogError(java.lang.String errorCode, ASTExpression expr, java.lang.String prefix, java.util.Optional<SymTypeExpression> result, SymTypeExpression inner)
-
getTypeDispatcher
protected ICommonExpressionsTypeDispatcher getTypeDispatcher()
-
printFunctionForLog
protected java.lang.String printFunctionForLog(SymTypeOfFunction func)
-
-