Com1205Project_w02_TraversalJ

Download Report

Transcript Com1205Project_w02_TraversalJ

TraversalJ
John J. Sung
TA Consulting
Motivation for TraversalJ
•
•
•
•
•
KL Enterprises identified AOP
Enter into the AOP market early
Add value by adding traversals to Java
Contract COM 1205 Inc.
TA Consulting Recommendations
High-Level System
Overview
traversal.trv
TraversalJ
traversal.java
traversal.class
AspectJ
System Components
• traversal.trv – TraversalJ file with class
graph and traversal declarations
• TraversalJ – DemeterJ program by
COM1205
• traversal.java – Traversal code in AspectJ
• AspectJ – Aspect Oriented Programming
Tool
TraversalJ Overview
• Implement using DemterJ
– class dictionary
– traversals
• Obtain Class Graph using AspectJ &
DJ
– CreateClassGraph.java
• Output traversal java code
– AspectJTraversal.java
TraversalJ System
traversal.trv
CreateClassGraph
Main
ClassGraphEvent(args, cg)
COM1205
Middle-ware
AspectJTraversal
traversal.java
AspectJTraversal
• Java code to translate class graph +
strategy into AspectJ code
• Processes DJ classes to do most of the
work
TraversalJ Syntax
• ClassGraph Specification
– ClassGraph cgvar;
– ClassGraph cgvar = new ClassGraph(cg,
“strategy”);
• Traversal Specification
– declare traversal tvar : “strategy”;
– declare traversal tvar(cgvar) : “strategy”;
TraversalJ Syntax
• Traversal Aspect Specification
– aspect aspectName {
– class graph declaration;
– traversal declaration;
–}
TraversalJ Syntax Example
aspect MyTraversal {
ClassGraph defaultCG;
ClassGraph cg1 = new ClassGraph(defaultCG,
“from * bypassing {java.lang.String} to *”);
declare traversal t1: “from CompoundFile to SimpleFile”;
declare traversal t2(cg1): “from CompoundFile to *”;
}
Graphs and Traversals?
• Need to obtain Default Class Graph
• Keep track of declared Class Graphs
• Process traversal with specific Class
Graph
ClassGraphListener/Factory
• ClassGraphFactory
– Need a way to obtain an instance of
Middle-ware code
– ClassGraphListener getNew();
• ClassGraphListener
– need a way to pass ClassGraph and
arguments
– abstract void ClassGraphEvent(String []
args, ClassGraph cg);
ClassGraphListener/Factory
CreateClassGraph
ClassGraphListener
ClassGraphListener
getNew()
ClassGraphFactory
MyListener
new MyListener()
ClassGraphListener/Factory
CreateClassGraph
ClassGraphEvent(args, cg)
ClassGraphListener
MyListener
Some Other Code
.prj File
• Copy CreateClassGraph.java and
AspectJTravearsal.java into a
directory
• Add the directory for the JAVADIR
option in .prj file
• COMPILER = ajc
• TEST_ARGS = -d trav some.trv
• TEST_INPUT = some.trv
Testing TraversalJ
• Create some traversal file that
implements a traversal that’s used in
TraversalJ.
• Generate the .java file into a directory
• Add the directory for JAVADIR
• Add code to call the traversal method
in .beh files.
• Compile with traversal code and test
Fun with Recursion
COM1205
Middle-ware
DemeterJ
traversal.trv
AspectJ
TraversalJ
traversal.java
Debugging Strategy
• Traversals
– You can use DJ to output traversal graphs
– Look for error messages from demeterj
• General Debugging
– have some variable debug to turn on debug
output
• AspectJTraversal
– .debug : outputs processing information
– addPrintingAdvice : Outputs code for printing
traversal method calls
TraversalJ Project
• Phase1 – Generate Class Dictionary for the
traversal language
• Phase 2 – Implement –d directory option,
basic traversal with default Class Graph
• Phase 3 – Implement Class Graph
declaration and definition
• Phase 4 – Test code by generating a
traversal used in TraversalJ
Project Submission
• Use ~/jser/submit-proj
• README
– How to compile your program
– How to generate traversal code
– How to test traversal code
• Due Date:
Project Write Up
•
•
•
•
•
•
Class Graph UML Diagram
Document Traversals
Document Testing of Traversal Code
Evaluate usefulness of TraversalJ
Drop it off in class or mail box of TA
Due Date:
Questions?
• [email protected]
• Reaches both KLE and TAC.