[antlr-interest] Java Cross Referencing Tool (Alpha Release)

Jim O'Connor Jim.OConnor at microfocus.com
Tue Mar 2 04:00:50 PST 2004


To download the zip file, go to
 
http://www.antlr.org/share/list <http://www.antlr.org/share/list> 
 
Introduction
This is the alpha release of the Java Cross Reference Tool (uses ANTLR
2.7.2).  It is based on Terence's tool in the file sharing section.  To
review its roots you can take a look at www.antlr.org/share/list
<http://www.antlr.org/share/list> .  There have been many improvements and
additions.  The goal is to have another release in the future that improves
the code and streamlines the "get up and running" process.  There might be a
few bug fixes, as well. :0) 
 
Overview
Input: *.java files, jar files, or a directory structure
 
Output:  An XML document with a hierarchical representation of packages,
classes and references.  The MyOutput class regulates the output location of
the XML file.  The name is controlled in the CodeProject class (currently
"null").  MyOutput has methods to control output when references are
resolved.
 
Installation and execution
 
 The process will be streamlined.  The manual installation forces the user
to become familiar necessary configuration steps that could be overlooked.  
Assumptions: Java JDK and Antlr 2.7.2 is installed.  An older java.g 1.3 is
used.  Recent patches have not been integrated.
 
1.	Download JavaCrossRef.zip 
 
2.	Unzip to c:\  (this will create the c:\antlr.xref directory
structure) 
 
3.	cd to the c:\antlr.xref\src\org\antlr\java\crossref subdirectory 
 
4.	To generate the necessary files run the following commands (My path
includes "c:\j2sdk1.4.2_01\bin"; and my full classpath is
".;c:\antlr-2.7.2\antlr.jar") 
A.  java antlr.Tool java.g
a.   Creates JavaRecognizer.java, JavaLexer.java, JavaTokenTypes.java and
JavaTokenTypes.txt
B.  java antlr.Tool javatree.g
a.   Creates JavaTreeParser.java, JavaTreeParserTokenTypes.java and
JavaTreeParserTokenTypes.txt
C.  java antlr.Tool -glib javaTree.g defs.g 
a.   Creates JavaDefsTreeParser.java, JavaTreeDefsParserTokenTypes.java and
JavaTreeDefsParserTokenTypes.txt
b.   Warnings will result for rule JavaDefsTreeParser.packageDefinition and
Rule 'identifier' returning a value
D.  java antlr.Tool -glib javaTree.g prerefs.g
a.   Creates JavaPreRefsTreeParser.java,
JavaTreePreRefsParserTokenTypes.java and JavaTreePreRefsParserTokenTypes.txt
b.   Warnings result for packageDefinition, typeSpec, typeSpecArray, type,
extendsClasue, implementsClause, parameterDef, variableDeclarator,
methodHead, identifier, newExpression and
'identifier'-'parameterDef'-'typeSpecArray'-'typeSpec'-newExpression'
returns a value
E.  java antlr.Tool -glib javaTree.g refs.g
a.   Creates JavaRefsTreeParser.java, JavaTreeRefsParserTokenTypes.java and
JavaTreeRefsParserTokenTypes.txt
b.   Lots more warning messages
 
5.	Before compiling the files you should edit a few of the files to
control the output 
A.  In CodeProject.java, a few fields are "user configurable" and can be
modified
a.   protected String name = null; null can be changed to name the current
project.  Otherwise the xml file will get the name "null.xml".
b.   static final boolean saveReferences = true;  when set to "true" all
references are saved to the CodeProject hierarchical information model by
methods in the refElement(), refMethod(), and refClass() methods. If you
only want your project structure in the XML file, set to "false".
c.   static final boolean printDebug = false;  There is a large amount of
debug "System.out.println()" calls in the Scope classes.  The printDebug
flag in CodeProject is a global flag to enable or disable the possibility
for all of these messages.  When printDebug is set to true in the
CodeProject class, you must go to the individual class files to turn on
messages. Other classes with the printDebug flag are ClassScope,
CodeBlockScope, DebugStack (commented out in defs.g, prerefs.g, and refs.g),
FileScope, and ParameterScope.
B.  In MyOutput.java, final static String OUTPUTDIR = "./"; set the output
directory (OUTPUTDIR), or leave as the current directory (".\")
 
6.	Compile the *.java files with the following commands 
7.	A. javac *.java (or whatever compiler you use) 
8.	test run 
A.  cd c:\antlr.xref\src
B.  "java org.antlr.java.crossref.Main" should produce usage message "Usage:
Main (directory or filename)"
C.   
9.	Another test with real data 
A.  "java org.antlr.java.crossref.Main
org\antlr\java\crossref\location.java"
B.  This will produce many messages to the console in addition to a 70k xml
file to the current directory named "null.xml"
C.  I'll go back and set saveReference = false and recompile and re-run.
D.  I still get all the messages but the xml file is now 9k, but it contains
no reference information.  It just contains the package/class/field/method
structure.  This is good for structure analysis but not for seeing which
classes reference others.
 
 
Credits
 
All "borrowed" classes are from the open source community.  I have no
obligation to give credit to these sources.  However, their mention will
give credit where I think it is due.  
 
K files
 
The "K" files are used to read the input stream from a "*.class" file,
extracting the relevant information.  They are used with minor modification,
mostly to the javadoc section.  These files are the work of Kimberley
Burchett. "Class loading" the files was a short bad idea.  Thanks for saving
me some time, Kimberly!  I kept the class file writer with the code for
those of you who want to do some obfuscation work.
 
http://www.kimbly.com/code/classfile/
<http://www.kimbly.com/code/classfile/> 
 
Location AST help
 
I read the antlraux site to help with the LocationAST work.
 
http://antlraux.sourceforge.net/ <http://antlraux.sourceforge.net/> 
 
Java Cross Reference Tool
 
Antlr and the structure for the tool are based on the work of Terence Parr.
You should be versed in Antlr basics to use this tool. (www.antlr.org
<http://www.antlr.org/> )
 
To Do List
1. Reduce size of XML document
2. Revisit order of imports and "Classpath order".
3. Upgrade java.g
4. Streamline installation
5. Reorganize the user options
6. Redo Location information.  Problem finding files based on XML
information.
7. Bugs
 
Jim OConnor
Jim.OConnor at micfocus.com
 
 
  _____  

Yahoo! Groups Links
*	To visit your group on the web, go to:
http://groups.yahoo.com/group/antlr-interest/
<http://groups.yahoo.com/group/antlr-interest/> 
  
*	To unsubscribe from this group, send an email to:
antlr-interest-unsubscribe at yahoogroups.com
<mailto:antlr-interest-unsubscribe at yahoogroups.com?subject=Unsubscribe> 
  
*	Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service
<http://docs.yahoo.com/info/terms/> . 

________________________________________________________________________
This e-mail has been scanned for viruses by MCI's Internet Managed Scanning
Services - powered by MessageLabs. For further information visit
http://www.mci.com
________________________________________________________________________

________________________________________________________________________
This e-mail has been scanned for viruses by MCI's Internet Managed Scanning
Services - powered by MessageLabs. For further information visit
http://www.mci.com
________________________________________________________________________
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/antlr-interest/attachments/20040302/83d9e960/attachment.html


More information about the antlr-interest mailing list