Package eu.bandm.tools.umod
Class UMod2visitors
java.lang.Object
eu.bandm.tools.umod.UMod2visitors
Collection of methods for generating visitor code.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected classprotected static enumprotected classprotected classprotected classDeprecated.protected classIs created and called for toplevel classes, and then created anew for all sub-classes!protected classReturns in "result" a Format which represents the descending code. -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final booleanprotected static final GeneratedAnnotationprotected GeneratedClassThe topmost generated visitor, one per umod model.protected final GeneratedContextstatic final intPseudo visitor register number for the case when NO LR-code is provided for a particular field, which means: ALL sub-expressions are visited.protected static final Stringprotected static final StringThe generated "scc data transmission code" will write into these fields.protected static final Stringprotected static final Stringprotected static final Stringprotected static final Stringprotected static final Stringprotected static final Stringprotected static final Stringprotected static final Stringprotected static final Stringprotected static final Stringstatic final Stringstatic final Stringprotected static final Stringprotected static final Stringprotected static final Stringprotected static final Stringprotected static final Stringprotected static final Stringprotected static final Stringprotected static final Stringprotected static final Stringprotected static final Stringprotected static final Stringprotected static final Stringprotected static final Stringprotected static final Stringprotected static final Stringprotected final UMod.Forestprotected final GeneratedClassThe main Java class representing the complete umod model.protected static final intprotected static final intprotected static final intprotected static final intprotected static final intprotected final MessageReceiver<SimpleMessage<XMLDocumentIdentifier>> protected static final Stringprotected static final Stringprotected final booleanprotected final booleanprotected final boolean -
Method Summary
Modifier and TypeMethodDescriptionprotected voidThe algorithm is basically as follows: +protected voidERROR(Location<XMLDocumentIdentifier> loc, String txt, Object... args) protected voidmake_actionprepost(UMod.ClassDef cd, GeneratedClass visitor, UMod.ClassDef superclass) static voidmake_all_abstracts(GeneratedClass visitor, int key) protected voidmake_breakLoop_method(UMod.Forest model, GeneratedClass visitor) protected voidmake_dumpcode(GeneratedClass visitor, UMod.ClassDef cd, int keynum) protected voidmake_prepost(GeneratedClass visitor, String methname, UMod.ClassDef cd, UMod.ClassDef superclass) protected GeneratedClassmake_v_dumper(UMod.Forest model, GeneratedContext context, GeneratedClass basematcher, int keynum, String name) protected GeneratedClassmake_v_multiphase(UMod.Forest model, GeneratedContext context, GeneratedClass basematcher, int keynum, String name) protected GeneratedClassmake_v_rewritercorewriter(UMod.Forest model, GeneratedContext context, GeneratedClass basematcher, int keynum, String name, UMod2visitors.rewriterType rtype, boolean supportMultiSubst) protected GeneratedClassmake_v_simple(UMod.Forest model, GeneratedContext context, GeneratedClass basematcher, int keynum, String name) protected voidmakeCallDescend(GeneratedClass visitor, UMod.ClassDef cd, String methodname, int keynum, boolean optimizing) Compiles the method which recursively calls "match()" on all selected fields, either directly or by calling "descend_[fieldname]()".
The name of the generated method is "action" in the simple visitor case, or "descend" in the multiphase case.voidmakeSCCfields(GeneratedClass basevisitor, MetaType maptype, String fieldname, String methodname) Generates in the generated base visitor class the field and the access method for one of the "scc data transfer" items.protected GeneratedClassmakeVisitorClass(GeneratedContext context, GeneratedClass basematcher, String name) protected voidWARNING(Location<XMLDocumentIdentifier> loc, String txt, Object... args) protected voidwarnNoVisit(UMod.ClassDef cd, UMod.FieldDef fd, boolean isPrim, boolean isAbstract) Emit a warning or an error for not-visitbable field, erronuously selected by aV ../..pragma.
-
Field Details
-
FIELDNAME__class2scc
The generated "scc data transmission code" will write into these fields. Is declared "abstract" inOptimizingVisitorand generated bymakeSCCfields(GeneratedClass, MetaType, String, String).- See Also:
-
FIELDNAME__field2sccs
- See Also:
-
FIELDNAME__class2reachedSccs
- See Also:
-
METHODNAME__class2scc
- See Also:
-
METHODNAME__field2sccs
- See Also:
-
METHODNAME__class2reachedSccs
- See Also:
-
FIELDNAME_VISITOR_DEBUG_STREAM
- See Also:
-
METHODNAME_VISITOR_DEBUG
- See Also:
-
METHODNAME_getLowestGeneratedClass
- See Also:
-
METHODNAME_getKey
- See Also:
-
METHODNAME_collectFlags
- See Also:
-
allFields2codeNumber_DATA
-
METHODNAME_REWRITER_GETRESULT
- See Also:
-
METHODNAME_REWRITER_ISMULTI
- See Also:
-
METHODNAME_REWRITER_REVERT
- See Also:
-
METHODNAME_REWRITER_changed
- See Also:
-
METHODNAME_REWRITER_useCache
- See Also:
-
METHODNAME_REWRITER_breakLoop
- See Also:
-
METHODNAME_REWRITER_RETURN_EMPTY
- See Also:
-
METHODNAME_REWRITER_RETURN
- See Also:
-
METHODNAME_REWRITER_RETURN_MULTIPLE
- See Also:
-
METHODNAME_REWRITER_RETURN_MULT_INTERN
- See Also:
-
METHODNAME_REWRITER_REWRITE
- See Also:
-
METHODNAME_REWRITER_REWRITETYPED
- See Also:
-
VARNAME_TYPEVAR_REWRITETYPED
- See Also:
-
METHODNAME_REWRITER_LOOKUP
- See Also:
-
METHODNAME_REWRITER_putToCache
- See Also:
-
METHODNAME_COREWRITER_rewriteDone
- See Also:
-
NAME_BASEMATCHER
- See Also:
-
FIELDNAME_lowestGeneratedVisitorClass
- See Also:
-
METHODNAME_MATCHFOREIGNOBJECT
- See Also:
-
METHODNAME_NOMATCH
- See Also:
-
MODIF_STATICCLASS
protected static final int MODIF_STATICCLASS- See Also:
-
MODIF_VISITMETH
protected static final int MODIF_VISITMETH- See Also:
-
MODIF_VISITENTRY
protected static final int MODIF_VISITENTRY- See Also:
-
MODIF_FIELD
protected static final int MODIF_FIELD- See Also:
-
MODIF_PACKAGEVISIBLE
protected static final int MODIF_PACKAGEVISIBLE- See Also:
-
ANNOTATION_SUPPRESS_UNCHECKED
-
visitordebug
protected final boolean visitordebug -
visitoroptimize
protected final boolean visitoroptimize -
visitorcompile
protected final boolean visitorcompile -
allrewriterwarnings
protected final boolean allrewriterwarnings -
msg
-
model
-
context
-
modelclass
The main Java class representing the complete umod model. -
basematcher
The topmost generated visitor, one per umod model. Extends eitherOptimizingVisitor. Is generated by code in this class. -
allVisitorNums_classDefs
-
allVisitorNums_visitorDefs
-
allVisitorNums
-
descend_all_branches_case
public static final int descend_all_branches_casePseudo visitor register number for the case when NO LR-code is provided for a particular field, which means: ALL sub-expressions are visited.- See Also:
-
-
Method Details
-
ERROR
-
WARNING
-
make_all_abstracts
-
makeSCCfields
public void makeSCCfields(GeneratedClass basevisitor, MetaType maptype, String fieldname, String methodname) Generates in the generated base visitor class the field and the access method for one of the "scc data transfer" items. All these fiels are maps indexed by integers; their values are again maps or multimaps. -
collectRegisters
protected void collectRegisters()The algorithm is basically as follows: +field2declaredClasses : Fd -> F Cd // F is *f*inite power set, as in "Z" select: Cd -> N -> seq Fd // seq of fields selected for a certain register super: Cd -> Cd supSub: Cd <-> Cd = symmetricClosurre(reflexiveClosure (transitiveClosure(super))) // CANNOT exchange sequence of symmetric and transitive !! class2declaredClasses: N -> Cd -> F Cd = {n|->c|->field2declaredClasses(|select(c,n).range|)} reach: N-> Cd -> F Cd = subSub(|class2declaredClasses(|n, subSub(|{c}|)|)|) r2 = transitiveClosure ( scc (reach)) -
warnNoVisit
Emit a warning or an error for not-visitbable field, erronuously selected by aV ../..pragma. Whether the field is indeed selected is tested here. FIXME IS WRONG!!!! myfield int->Object V 0/0 V 1/0 L must only warn for register 1, not 0 !!! -
makeCallDescend
protected void makeCallDescend(GeneratedClass visitor, UMod.ClassDef cd, String methodname, int keynum, boolean optimizing) Compiles the method which recursively calls "match()" on all selected fields, either directly or by calling "descend_[fieldname]()".
The name of the generated method is "action" in the simple visitor case, or "descend" in the multiphase case. -
makeVisitorClass
protected GeneratedClass makeVisitorClass(GeneratedContext context, GeneratedClass basematcher, String name) -
make_v_simple
protected GeneratedClass make_v_simple(UMod.Forest model, GeneratedContext context, GeneratedClass basematcher, int keynum, String name) -
make_v_multiphase
protected GeneratedClass make_v_multiphase(UMod.Forest model, GeneratedContext context, GeneratedClass basematcher, int keynum, String name) -
make_prepost
protected void make_prepost(GeneratedClass visitor, String methname, UMod.ClassDef cd, UMod.ClassDef superclass) -
make_actionprepost
protected void make_actionprepost(UMod.ClassDef cd, GeneratedClass visitor, UMod.ClassDef superclass) -
make_v_dumper
protected GeneratedClass make_v_dumper(UMod.Forest model, GeneratedContext context, GeneratedClass basematcher, int keynum, String name) -
make_dumpcode
-
make_v_rewritercorewriter
protected GeneratedClass make_v_rewritercorewriter(UMod.Forest model, GeneratedContext context, GeneratedClass basematcher, int keynum, String name, UMod2visitors.rewriterType rtype, boolean supportMultiSubst) -
make_breakLoop_method
-