From VM Wed Aug 14 16:42:45 2002 Content-Length: 15771 X-VM-v5-Data: ([nil nil nil nil t nil nil nil nil] [nil "Wednesday" "3" "July" "2002" "20:33:42" "-0400" "Doug Orleans" "dougo@ccs.neu.edu" "<15651.38886.512723.747227@vega.ccs.neu.edu>" "335" "strategies in the DemeterJ source" "^From:" nil nil "7" "2002070320:33:42" "strategies in the DemeterJ source" nil nil nil] nil) X-UIDL: +,T!!5&("!(Zc!!J0&#! Return-Path: Delivered-To: wand@vega.ccs.neu.edu Received: from vega.ccs.neu.edu (vega.ccs.neu.edu [129.10.116.206]) by amber.ccs.neu.edu (Postfix) with ESMTP id C438A1AAD3; Wed, 3 Jul 2002 20:33:44 -0400 (EDT) Received: by vega.ccs.neu.edu (Postfix, from userid 6068) id 7B6499C84; Wed, 3 Jul 2002 20:33:42 -0400 (EDT) Message-ID: <15651.38886.512723.747227@vega.ccs.neu.edu> X-Mailer: VM 6.72 under 21.1 (patch 3) "Acadia" XEmacs Lucid X-Face: (4D-osoq?}7M3\EgvbWKo To: wand@ccs.neu.edu, lieber@ccs.neu.edu Cc: dougo@ccs.neu.edu Subject: strategies in the DemeterJ source Date: Wed, 3 Jul 2002 20:33:42 -0400 (EDT) Status: RO X-Status: X-Keywords: X-UID: 128 Well, it took me more than an hour, but my DemeterJ skills are rusty... 236 strategies 32 multiedge strategies 1.1440677966101696 edges per strategy 4 edges in largest strategy One caveat: there are a number of places in the code where a "via" is commented out and replaced by a "bypassing", due to bugs or unimplemented features in DemeterJ. I could try to count those if you like. ./main.beh: ./modules.beh: from Modules to Module from Modules to * ./project.beh: from { Project, ProjectName } to ProjectName from Project to { OptionName, OptionValue } ./utils.beh: ./aplib/cd/backlinks.beh: from ClassGraph to { Part, Superclass, Subclass, Interface } ./aplib/cd/cd.beh: from ClassDef to PartOrSyntax_List from ClassDef to Subclass_Barlist from ClassDef to Superclass_Commalist from ClassDef to Interface_Commalist from ClassDef to { ConstructionClass, AlternationClass, CommonKeyword, Part, Subclass, Superclass } ./aplib/cd/inherit.beh: from ClassGraph to Subclass ./aplib/cd/interface.beh: ./aplib/cd/param.beh: from ClassGraph to ClassSpec from ClassGraph to { ClassGraphEntry, ClassDef } from ClassSpec_Commalist to ClassName ./aplib/cd/partname.beh: ./aplib/cd/repetition.beh: from ClassGraph via RepetitionClass bypassing -> *, nonempty, * to { PlainSyntax, PrintIndent, PrintUnindent, PrintSkip, PrintSpace, ClassName } ./aplib/cd/utils.beh: from ClassDef bypassing { ClassParts, -> *, parameters, * } to ClassName from { Subclass, Superclass, Part, RepeatedPart, Interface } bypassing { ClassDef, -> *, actual_parameters, * } to ClassName from ClassDef bypassing ClassParts to ClassName_Commalist from ClassGraph to-stop ClassDef from { ClassGraph, ClassDef } to { Part, RepeatedPart } from ClassDef to { Part, Subclass, Superclass, Interface } from ClassDef to { ConstructionClass, AlternationClass, RepetitionClass, PublicClass, FinalClass, InterfaceClass, VisitorClass, NotParsedClass } from Part to { FinalPart, StaticPart, ReadOnlyPart, PrivatePart, DerivedPart } from ClassDef via Superclass to ClassName from ClassDef to * ./aplib/sg/constraint.beh: from SGEdge via Constraint to GlobSpec from SGEdge via Constraint to GlobSpec ./aplib/sg/glob.beh: from GlobSpec bypassing ClassGlob to { ClassName, PartName } from { GlobSpec, ClassGlobSpec } via ClassGlob to { ClassName, AnyClass } from ClassGlobSpec to { ClassName, AnyClass } from ClassGlobSpec to { ClassName, AnyClass } from ClassGlobSpec to ClassGlob from GlobSpec to { ClassGlob, PartGlob, SubclassGlob, SuperclassGlob } from GlobSpec to ClassGlob from GlobSpec to EdgeGlob ./aplib/sg/interface.beh: ./aplib/sg/sg.beh: from PathDirective to { From, NegativeConstraint, PositiveConstraint, To, ToStop, NameMap } ./aplib/sg/utils.beh: from NameMap to-stop { Name, OneClassGlob, ClassGlobSet } ./dj/collection.beh: ./dj/parse.beh: from CompilationUnit to { UnmodifiedClassDeclaration, PackageDeclaration, FieldDeclaration, MethodDeclaration } from CompilationUnit to { UnmodifiedClassDeclaration, PackageDeclaration, FieldDeclaration, MethodDeclaration } ./dj/traversal.beh: ./dj/util.beh: from FieldDeclaration to VariableDeclaratorId from { FieldDeclaration, MethodDeclaration } bypassing { NameList, FormalParameters } to { CPublic, Name } ./generate/TAO.beh: from { Program, ClassDef } to { ClassDef, ConstructionClass, AlternationClass, OptionalPart, Part, Subclass, ClassParents, AlternationClass } from Program through Wrapper to { Before, After, Around, ClassNameExact, AnyClass } ./generate/adapmeth.beh: from Program bypassing VisitorSpec via MethodDef to-stop { MethodSignature, TraversalRef, TraversalSpec, ClassName_Commalist, VisitorSpec } from VisitorSpec via ClassMethods bypassing VisitorSpec to ReturnValue from VisitorSpec via ClassMethods bypassing VisitorSpec to ReturnValue from VisitorSpec via ClassMethods bypassing VisitorSpec to { Start, Finish } from VisitorSpec to VisitorExtendsSpec from VisitorSpec to VisitorNameSpec from ClassDef bypassing VisitorSpec to TraversalDef from TraversalDef via TraversalParms to ClassName ./generate/collect.beh: from ProgramBehavior via ClassBehavior bypassing ClassMethods to { ClassName, AnyClass } ./generate/derived.beh: from Program to Accessor ./generate/expand.beh: from Program bypassing VisitorSpec via TraversalDef to-stop { TraversalName, TraversalParms, StrategyGraph, PathDirective, StrategyVariable, CompoundStrategy } ./generate/gencode.beh: from Program to { GlobalImports, PackageDirective, ClassDef } from ClassDef to { PublicClass, FinalClass, AlternationClass, InterfaceClass } from ClassDef to { Superclass_Commalist, Interface_Commalist } from Part to { FinalPart, StaticPart } from ClassDef bypassing VisitorSpec via { MethodDef, Wrapper, Getter, Setter, Constructor, Start, Finish, ReturnValue, Verbatim } to { JavaCode, NoMethodBody } ./generate/gencopyvis.beh: ./generate/gendisplayvis.beh: ./generate/genequalvis.beh: ./generate/gengrammar.beh: from Program to { ClassDef, DoParse, DontParse } from Program to Package from Program bypassing Package to-stop { Import, PackageName } from ClassDef to Subclass from { Subclass, OptionalPart } to LocalLookahead from ClassDef to { Part, PlainSyntax, Superclass, EOFtoken } ./generate/genprintvis.beh: from Program to { Part, PlainSyntax, PrintIndent, PrintUnindent, PrintSkip, PrintSpace } ./generate/gensubgraphvis.beh: ./generate/gentracevis.beh: ./generate/genuniversal.beh: ./generate/glob.beh: from ClassGlobSpec to { ClassName, AnyClass } from ClassGlobSpec to ClassGlob from GlobSpec to { ClassGlob, PartGlob, SubclassGlob, SuperclassGlob } from GlobSpec to ClassGlob from GlobSpec to EdgeGlob from Glob to { AnyClass, AnyPart } from Glob to { ClassNameExact, PartNameExact } from Glob to PartName from GlobSpec to { ClassName, PartName } ./generate/inherit.beh: from Program to { BeginVisitors, EndVisitors, ClassDef } from Program to Subclass from ClassDef to Superclass_Commalist ./generate/main.beh: ./generate/param.beh: from Program to ClassSpec from Program to { ClassGraphEntry, ClassDef } from ClassSpec_Commalist to ClassName ./generate/partname.beh: from Program to-stop TraversalDef from TraversalDef via TraversalParms to Visitor ./generate/repetition.beh: from Program via RepetitionClass bypassing -> *, nonempty, * to { PlainSyntax, PrintIndent, PrintUnindent, PrintSkip, PrintSpace, ClassName } from ClassDef to Interface_Commalist ./generate/ridlsupport.beh: from Program to ClassDef from ClassDef via Subclass bypassing -> *, actual_parameters, * to ClassSpec from ClassDef to { PartName, ClassSpec } from Program to ClassDef ./generate/sanity.beh: from Program via Part to PartName ./generate/strategy.beh: from PathDirective to { NegativeConstraint, PositiveConstraint, To, ToStop, NameMap } from NameMap to Name from StrategyGraph bypassing { -> *, sources, *, -> *, targets, *, -> *, dest, *, -> *, constraint, * } to ClassGlob from StrategyGraph bypassing { -> *, sources, *, -> *, targets, *, -> *, source, *, -> *, constraint, * } to ClassGlob from StrategyGraph bypassing { -> *, sources, *, -> *, targets, *, -> *, constraint, * } to ClassName from StrategyGraph bypassing { -> *, edges, *, -> *, targets, * } to { ClassName, AnyClass } from StrategyGraph bypassing { -> *, edges, *, -> *, sources, * } to { ClassName, AnyClass } from SGEdge via Constraint to GlobSpec ./generate/subgraph.beh: from StrategyGraph to NameMap from ClassDef to { ConstructionClass, AlternationClass, CommonKeyword, Part, Subclass, Superclass } ./generate/utils.beh: from Program bypassing { Hashtable } to * from ClassDef bypassing { ClassParts, ClassMethods, -> *, parameters, * } to ClassName from { Subclass, Superclass, Part, RepeatedPart } bypassing { -> *, actual_parameters, * } to ClassName from ClassDef via ParamClassName to ClassName_Commalist from { Program, ClassGraph } to ClassDef from ClassDef via { ConstructionClass, AlternationClass } to PartName from { Program, ClassDef } to { Part, RepeatedPart } from ClassDef to-stop Method_SList from ClassDef to Constructor from { Program, ClassDef } to { Part, Subclass, Superclass } from TraversalParms to VisitorName from ClassDef to { ConstructionClass, AlternationClass, RepetitionClass, PublicClass, FinalClass, InterfaceClass, VisitorClass, NotParsedClass } from Part to { FinalPart, StaticPart, ReadOnlyPart, PrivatePart, DerivedPart } from ClassDef via Superclass to ClassName from { PackageDirective, Package, GlobalImports, Import, Method_SList, StrategyExpression, StrategyGraph, MethodSignature, Part } bypassing { Vector, Hashtable } to * from ClassDef bypassing ClassMethods to * from ClassMethods bypassing Hashtable to * ./generate/wrapper.beh: from Program bypassing VisitorSpec via Wrapper to Glob from Glob to { ClassGlob, PartName, SubclassGlob, SuperclassGlob } from Glob to { ClassName, AnyClass, AnyPart } from Glob to { ClassGlob, PartName, SubclassGlob, SuperclassGlob } from HostSpec to { ClassNameExact, AnyClass, PartNameExact, AnyPart } ./ridler/JavaStuff.beh: from TransferMode to * from TransferMode to * from TransferMode to * from TransferMode to * from TransferMode to * from Arg to { ParmName, ReturnName } ./ridler/MakeInheritance.beh: from RIDL to Portal ./ridler/MakeRidl.beh: from RIDL to * from Method to MethodName from Args to * from TransferMode to { GlobalRef, Copy, NotPassed } ./ridler/RIDL.beh: from RIDL to PortalOrFileMarker from RIDL to Portal from Options to * ./ridler/Util.beh: from Portal to Extends from Portal to Extends from { MethodSignature, MethodParm } bypassing TransferMode to * from { MethodSignature, MethodParm } bypassing { TransferMode, JavaType, ArraySpec_List } to * from TransferMode to GlobalRef ./ridler/test/counter.beh: ./ridler/test2/expr.beh: from Input to { EvalCmd, Quit, Reset, LetBind } from Machine to * from Exp to * from { Exp, Env, EvalCmd } bypassing -> EnvNode, val, Val to * from Exp bypassing Env to * ./ridler/test3/aorb.beh: ./selftest/TAO.beh: from { Program, ClassDef } to { ClassDef, ConstructionClass, AlternationClass, OptionalPart, Part, Subclass, ClassParents, AlternationClass } from Program through Wrapper to { Before, After, Around, ClassNameExact, AnyClass } ./studio/CTGsubgraph.beh: ./studio/behextract.beh: from ProgramBehavior to StrategyDefinition from ProgramBehavior to { AnyPart, AnyClass, SuperclassGlob, CompoundStrategy, StrategyVariable, PathDirective } from SGEdge bypassing { -> *, dest, *, NegativeConstraint } to ClassName from SGEdge bypassing { -> *, source, *, NegativeConstraint } to ClassName from SGEdge bypassing { ClassGlobSpec, EdgeGlob, OnlyThrough } to ClassName from SGEdge bypassing { ClassGlobSpec, EdgeGlob, Bypassing } to ClassName from SGEdge to { PartGlob } from SGEdge to { SubclassGlob } from { PartGlob, SubclassGlob } bypassing DestGlob to ClassName from { PartGlob, SubclassGlob } bypassing SourceGlob to ClassName from PartGlob to PartName ./studio/cd2gcd.beh: from Program to { Part, Subclass, RepeatedPart, Superclass, Interface, PlainSyntax, DoParse, DontParse, PackageDirective, LocalImports, ClassName, ClassSpec } from RepeatedPart to ClassSpec from RepeatedPart bypassing -> *, nonempty, ClassSpec to { PlainSyntax, ClassSpec } from ClassDef to { PublicClass, FinalClass } from Part to { FinalPart, StaticPart, ReadOnlyPart, PrivatePart } from EdgeVisitor bypassing -> *, parameters, * to ClassName from PlacementVisitor to UVertex from PlacementVisitor to { UVertex, UEdge } ./studio/cdstring.beh: from UGraph to { UVertex, UEdge } from UGraph to { UConstVertex, UAltVertex, UInterface } from UVertex bypassing -> UVertex, vid, UID to * from Package to * ./studio/gcdsave.beh: from UGraph to * from UGraph to * ./studio/graphextract.beh: from Program to { Superclasses, Interfaces } from UGraph bypassing -> *, edges, * to { UConstVertex, UAltVertex, UTermConstVertex } from UGraph bypassing -> *, vertices, * to { UConstEdge, UAltEdge } ./studio/main.beh: ./studio/utils.beh: from ClassDef bypassing { ClassParts, ClassMethods, -> *, parameters, * } to ClassName from { Subclass, Superclass, Part, RepeatedPart } bypassing { -> *, actual_parameters, * } to ClassName from StrategyGraph through SGEdge to ClassName ./studio/verbatim.beh: from UVertex to Decorator from UEdge to Decorator from PartName to OtherIdent ./studio/CTGstrategy.beh: from PathDirective to { NegativeConstraint, PositiveConstraint, To, ToStop, NameMap } from NameMap to Name from StrategyGraph bypassing { -> *, sources, *, -> *, targets, *, -> *, dest, *, -> *, constraint, * } to ClassGlob from StrategyGraph bypassing { -> *, sources, *, -> *, targets, *, -> *, source, *, -> *, constraint, * } to ClassGlob from StrategyGraph bypassing { -> *, sources, *, -> *, targets, *, -> *, constraint, * } to ClassName from StrategyGraph bypassing { -> *, edges, *, -> *, targets, * } to { ClassName, AnyClass } from StrategyGraph bypassing { -> *, edges, *, -> *, sources, * } to { ClassName, AnyClass } from SGEdge via Constraint to GlobSpec ./studio/CTGglob.beh: from ClassGlobSpec to { ClassName, AnyClass } from ClassGlobSpec to ClassGlob from GlobSpec to { ClassGlob, PartGlob, SubclassGlob, SuperclassGlob } from GlobSpec to ClassGlob from GlobSpec to EdgeGlob from Glob to { AnyClass, AnyPart } from Glob to { ClassNameExact, PartNameExact } from Glob to PartName from GlobSpec to { ClassName, PartName } ./tg/tg.beh: from Vertex bypassing { -> *, incoming, *, -> *, source, * } to Vertex from Vertex bypassing { -> *, outgoing, *, -> *, dest, * } to Vertex from Edge bypassing { -> *, incoming, *, -> *, outgoing, * } to { NameI } from { ClassGraph, int_int_Pair_List } bypassing { -> *, source, *, -> *, dest, * } to * ./weave/filecheck.beh: ./weave/main.beh: ./weave/output.beh: ./weave/prettyjava.beh: ./weave/var.beh: from CodeFrag to { VarAssignment, VarVisibility, VarModifiers, VarDataType, VarMethodBody, VarPackage } from Weaver via { AddClass, AddInterface } to Pack ./weave/weaver.beh: from CodeFrag to Argument from Weaver to Weaver from Weaver to CodeFrags from Weaver via AddClass to ClassParts from Weaver via ClassMethod to JavaCode from Weaver via AddClass to ClassParentFeature from Weaver to ClassMethod from Weaver bypassing { AugmentMethod, AddAttribute, ImplementInterface, RenameMethod, PackageSpec, ImportStatement, VarAssignment } to * from Weaver to { ParsableClassPart, InterfacePart } from Weaver to { AddClass, AddInterface } from AddClass to ParentClass from ClassPart to ClassMethod from Arguments to Argument from { MemberType, MethodArgTypes, FixVisibility, ArgumentTypes } to * from { Visibility, Modifiers, MemberType, MethodName, Arguments, MethodThrows, MethodBody, ParentClass, Interfaces, FieldNameOptInit, FieldNameInit } to * from { AugmentMethod, FullMethodName } to MethodName from { AugmentMethod, FullMethodName, RenameMethod } to ClassName from ParsableClassPart to ClassMethod from ParsableClassPart to ClassMethod from ClassMethod to { Visword, AModifier } from ParsableClassPart to ClassMethod from ParsableClassPart via MemberType to FixDataType from ParsableClassPart to FixMethodBody from { ParsableClassPart, ParsableInterfacePart } to FixVisibility from { ParsableClassPart, ParsableInterfacePart } to FixModifiers from Weaver { Weaver -> AddClass AddClass -> AddClassName Weaver -> AddInterface AddInterface -> InterfaceName } source:Weaver target:{ AddClassName, InterfaceName } ./cool/cool.beh: from Cool bypassing { CondVarDeclaration, VarDeclaration, SelfexMethodSet, MutexMethodSet } to * from Cool bypassing MethodManager to * ./cool/main.beh: ./cool/methodexclusion.beh: ./cool/output.beh: from { CondVarDeclaration, VarDeclaration, VariableDeclarator, CondVarDec } to * from QualifiedMethodName to { MethodName, Type } from CoordClassNames to ClassName ./cool/printclasses.beh: --Doug