aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormkersten <mkersten>2004-04-07 15:32:00 +0000
committermkersten <mkersten>2004-04-07 15:32:00 +0000
commitc79fff2d91096ce21215f4617675f1a693f682f8 (patch)
treedb236d7758fbd9e6f189f183a0e116de0c4722ba
parentda1a040db61d31617ba14f39d6a3f24774ba694d (diff)
downloadaspectj-c79fff2d91096ce21215f4617675f1a693f682f8.tar.gz
aspectj-c79fff2d91096ce21215f4617675f1a693f682f8.zip
- Added support for 1.4 sources (use "-source 1.4" option)
- Made output class files go to documentation directory (-d) rather than source directory. - Added "-XajdocDebug" option that will keep the source files generated from the ASM around in order to help people send better bug reports. - Any declare forms that ajdoc doesn't know how to generate docs for get printed to the console and indicated as a limitation. I also extended test coverage to declare forms and added proper clearing of state for multiple invocations from test cases.
-rw-r--r--ajdoc/src/org/aspectj/tools/ajdoc/Main.java107
-rw-r--r--ajdoc/src/org/aspectj/tools/ajdoc/StubFileGenerator.java5
-rw-r--r--ajdoc/testdata/simple/foo/ModelCoverage.java150
-rw-r--r--ajdoc/testdata/simple/foo/PlainJava.java1
-rw-r--r--ajdoc/testsrc/org/aspectj/tools/ajdoc/CoverageTestCase.java10
5 files changed, 224 insertions, 49 deletions
diff --git a/ajdoc/src/org/aspectj/tools/ajdoc/Main.java b/ajdoc/src/org/aspectj/tools/ajdoc/Main.java
index 8c550ea6c..a6574ce04 100644
--- a/ajdoc/src/org/aspectj/tools/ajdoc/Main.java
+++ b/ajdoc/src/org/aspectj/tools/ajdoc/Main.java
@@ -33,10 +33,10 @@ public class Main implements Config {
static SymbolManager symbolManager = null;
/** Command line options. */
- static Vector options = new Vector();
+ static Vector options;
/** Options to pass to ajc. */
- static Vector ajcOptions = new Vector();
+ static Vector ajcOptions;
/** All of the files to be processed by ajdoc. */
static Vector filenames;
@@ -82,10 +82,13 @@ public class Main implements Config {
public static void main(String[] args) {
aborted = false;
+ deleteTempFilesOnExit = true;
filenames = new Vector();
fileList= new Vector();
packageList = new Vector();
+ options = new Vector();
+ ajcOptions = new Vector();
// if (!JavadocRunner.has14ToolsAvailable()) {
// System.err.println("ajdoc requires a JDK 1.4 or later tools jar - exiting");
// aborted = true;
@@ -113,9 +116,11 @@ public class Main implements Config {
}
// PHASE 0: call ajc
- ajcOptions.addElement( "-noExit" );
- ajcOptions.addElement( "-XjavadocsInModel" ); // TODO: wrong option to force model gen
- String[] argsToCompiler = new String[ajcOptions.size() + inputFiles.length];
+ ajcOptions.addElement("-noExit");
+ ajcOptions.addElement("-XjavadocsInModel"); // TODO: wrong option to force model gen
+ ajcOptions.addElement("-d");
+ ajcOptions.addElement(rootDir.getAbsolutePath());
+ String[] argsToCompiler = new String[ajcOptions.size() + inputFiles.length];
int i = 0;
for ( ; i < ajcOptions.size(); i++ ) {
argsToCompiler[i] = (String)ajcOptions.elementAt(i);
@@ -126,6 +131,7 @@ public class Main implements Config {
i++;
}
+// System.out.println(Arrays.asList(argsToCompiler));
System.out.println( "> Calling ajc..." );
CompilerWrapper.main(argsToCompiler);
if (CompilerWrapper.hasErrors()) {
@@ -308,7 +314,6 @@ public class Main implements Config {
static File createSignatureFile(File inputFile) throws IOException {
String packageName = StructureUtil.getPackageDeclarationFromFile(inputFile);
-// System.err.println(">>> package: " + packageName);
String filename = "";
if ( packageName != null ) {
String pathName = Config.WORKING_DIR + '/' + packageName.replace('.', '/');
@@ -331,45 +336,45 @@ public class Main implements Config {
}
- static void verifyPackageDirExists( String packageName, String offset ) {
- System.err.println(">>> name: " + packageName + ", offset: " + offset);
- if ( packageName.indexOf( "." ) != -1 ) {
- File tempFile = new File("c:/aspectj-test/d1/d2/d3");
- tempFile.mkdirs();
- String currPkgDir = packageName.substring( 0, packageName.indexOf( "." ) );
- String remainingPkg = packageName.substring( packageName.indexOf( "." )+1 );
- String filePath = null;
- if ( offset != null ) {
- filePath = Config.WORKING_DIR + Config.DIR_SEP_CHAR +
- offset + Config.DIR_SEP_CHAR + currPkgDir ;
- }
- else {
- filePath = Config.WORKING_DIR + Config.DIR_SEP_CHAR + currPkgDir;
- }
- File packageDir = new File( filePath );
- if ( !packageDir.exists() ) {
- packageDir.mkdir();
- if (deleteTempFilesOnExit) packageDir.deleteOnExit();
- }
- if ( remainingPkg != "" ) {
- verifyPackageDirExists( remainingPkg, currPkgDir );
- }
- }
- else {
- String filePath = null;
- if ( offset != null ) {
- filePath = Config.WORKING_DIR + Config.DIR_SEP_CHAR + offset + Config.DIR_SEP_CHAR + packageName;
- }
- else {
- filePath = Config.WORKING_DIR + Config.DIR_SEP_CHAR + packageName;
- }
- File packageDir = new File( filePath );
- if ( !packageDir.exists() ) {
- packageDir.mkdir();
- if (deleteTempFilesOnExit) packageDir.deleteOnExit();
- }
- }
- }
+// static void verifyPackageDirExists( String packageName, String offset ) {
+// System.err.println(">>> name: " + packageName + ", offset: " + offset);
+// if ( packageName.indexOf( "." ) != -1 ) {
+// File tempFile = new File("c:/aspectj-test/d1/d2/d3");
+// tempFile.mkdirs();
+// String currPkgDir = packageName.substring( 0, packageName.indexOf( "." ) );
+// String remainingPkg = packageName.substring( packageName.indexOf( "." )+1 );
+// String filePath = null;
+// if ( offset != null ) {
+// filePath = Config.WORKING_DIR + Config.DIR_SEP_CHAR +
+// offset + Config.DIR_SEP_CHAR + currPkgDir ;
+// }
+// else {
+// filePath = Config.WORKING_DIR + Config.DIR_SEP_CHAR + currPkgDir;
+// }
+// File packageDir = new File( filePath );
+// if ( !packageDir.exists() ) {
+// packageDir.mkdir();
+// if (deleteTempFilesOnExit) packageDir.deleteOnExit();
+// }
+// if ( remainingPkg != "" ) {
+// verifyPackageDirExists( remainingPkg, currPkgDir );
+// }
+// }
+// else {
+// String filePath = null;
+// if ( offset != null ) {
+// filePath = Config.WORKING_DIR + Config.DIR_SEP_CHAR + offset + Config.DIR_SEP_CHAR + packageName;
+// }
+// else {
+// filePath = Config.WORKING_DIR + Config.DIR_SEP_CHAR + packageName;
+// }
+// File packageDir = new File( filePath );
+// if ( !packageDir.exists() ) {
+// packageDir.mkdir();
+// if (deleteTempFilesOnExit) packageDir.deleteOnExit();
+// }
+// }
+// }
/**
* Can read Eclipse-generated single-line arg
@@ -485,6 +490,13 @@ public class Main implements Config {
addNextToAJCOptions = true;
options.addElement( arg );
ajcOptions.addElement( arg );
+ }
+ else if ( arg.equals( "-source" ) ) {
+ addNextAsOption = true;
+ addNextToAJCOptions = true;
+ addNextAsClasspath = true;
+ options.addElement( arg );
+ ajcOptions.addElement( arg );
}
else if ( arg.equals( "-classpath" ) ) {
addNextAsOption = true;
@@ -498,6 +510,9 @@ public class Main implements Config {
//options.addElement( arg );
//ajcOptions.addElement( arg );
}
+ else if (arg.equals("-XajdocDebug")) {
+ deleteTempFilesOnExit = false;
+ }
else if (arg.startsWith("-") || addNextAsOption) {
if ( arg.equals( "-private" ) ) {
docModifier = "private";
@@ -533,7 +548,7 @@ public class Main implements Config {
} else if ( addNextAsOption ) {
// pass through
} else {
- System.err.println("> uncrecognized arg: " + arg);
+ System.err.println("> unrecognized argument: " + arg);
displayHelpAndExit( null );
}
options.addElement(arg);
diff --git a/ajdoc/src/org/aspectj/tools/ajdoc/StubFileGenerator.java b/ajdoc/src/org/aspectj/tools/ajdoc/StubFileGenerator.java
index 751a3b6ad..e9a72a385 100644
--- a/ajdoc/src/org/aspectj/tools/ajdoc/StubFileGenerator.java
+++ b/ajdoc/src/org/aspectj/tools/ajdoc/StubFileGenerator.java
@@ -112,7 +112,10 @@ class StubFileGenerator {
&& !member.getKind().equals(IProgramElement.Kind.ADVICE)) {
signature = member.getSourceSignature();//StructureUtil.genSignature(member);
}
- if (signature != null &&
+
+ if (member.getKind().isDeclare()) {
+ System.err.println("> Skipping declare (ajdoc limitation): " + member.toLabelString());
+ } else if (signature != null &&
signature != "" &&
!member.getKind().isInterTypeMember() &&
!member.getKind().equals(IProgramElement.Kind.INITIALIZER) &&
diff --git a/ajdoc/testdata/simple/foo/ModelCoverage.java b/ajdoc/testdata/simple/foo/ModelCoverage.java
new file mode 100644
index 000000000..5c14055c6
--- /dev/null
+++ b/ajdoc/testdata/simple/foo/ModelCoverage.java
@@ -0,0 +1,150 @@
+
+package foo;
+
+import java.io.*;
+import java.util.List;
+
+interface I { }
+
+class Point {
+ int x;
+ static int sx;
+
+ {
+ System.out.println("");
+ }
+
+ { x = 0; }
+ static { sx = 1; }
+
+ public Point() { }
+
+ public int getX() {
+ return x;
+ }
+
+ public void setX(int x) {
+ this.x = x;
+ }
+
+ public int changeX(int x) {
+ this.x = x;
+ return x;
+ }
+
+ void doIt() {
+ try {
+ File f = new File(".");
+ f.getCanonicalPath();
+ } catch (IOException ioe) {
+ System.err.println("!");
+ }
+// setX(10);
+ new Point();
+ }
+}
+
+class SubPoint extends Point { }
+
+class Line { }
+
+aspect AdvisesRelationshipCoverage {
+ pointcut methodExecutionP(): execution(void Point.setX(int));
+ before(): methodExecutionP() { }
+
+ pointcut constructorExecutionP(): execution(Point.new());
+ before(): constructorExecutionP() { }
+
+ pointcut callMethodP(): call(* Point.setX(int));
+ before(): callMethodP() { }
+
+ pointcut callConstructorP(): call(Point.new());
+ before(): callConstructorP() { }
+
+ pointcut getP(): get(int *.*);
+ before(): getP() { }
+
+ pointcut setP(): set(int *.*) && !set(int *.xxx);
+ before(): setP() { }
+
+ pointcut initializationP(): initialization(Point.new(..));
+ before(): initializationP() { }
+
+ pointcut staticinitializationP(): staticinitialization(Point);
+ before(): staticinitializationP() { }
+
+ pointcut handlerP(): handler(IOException);
+ before(): handlerP() { }
+
+// before(): within(*) && execution(* Point.setX(..)) { }
+// before(): within(*) && execution(Point.new()) { }
+}
+
+aspect AdviceNamingCoverage {
+ pointcut named(): call(* *.mumble());
+ pointcut namedWithOneArg(int i): call(int Point.changeX(int)) && args(i);
+ pointcut namedWithArgs(int i, int j): set(int Point.x) && args(i, j);
+
+ after(): named() { }
+ after(int i, int j) returning: namedWithArgs(i, j) { }
+ after() throwing: named() { }
+ after(): named() { }
+
+ before(): named() { }
+
+ int around(int i): namedWithOneArg(i) { return i;}
+ int around(int i) throws SizeException: namedWithOneArg(i) { return proceed(i); }
+
+ before(): named() { }
+ before(int i): call(* *.mumble()) && named() && namedWithOneArg(i) { }
+ before(int i): named() && call(* *.mumble()) && namedWithOneArg(i) { }
+
+ before(): call(* *.mumble()) { }
+}
+
+abstract aspect AbstractAspect {
+ abstract pointcut abPtct();
+}
+
+aspect InterTypeDecCoverage {
+ public int Point.xxx = 0;
+ public int Point.check(int i, Line l) { return 1 + i; }
+}
+
+aspect DeclareCoverage {
+
+ pointcut illegalNewFigElt(): call(Point.new(..)) && !withincode(* *.doIt(..));
+
+ declare error: illegalNewFigElt(): "Illegal constructor call.";
+ declare warning: call(* Point.setX(..)): "Illegal call.";
+
+ declare parents: Point extends java.io.Serializable;
+ declare parents: Point+ implements java.util.Observable;
+ declare parents: Point && Line implements java.util.Observable;
+ declare soft: SizeException : call(* Point.getX());
+ declare precedence: AdviceCoverage, InterTypeDecCoverage, *;
+// public Line.new(String s) { }
+}
+
+class SizeException extends Exception { }
+
+aspect AdviceCoverage {
+
+}
+
+abstract class ModifiersCoverage {
+ private int a;
+ protected int b;
+ public int c;
+ int d;
+
+ static int staticA;
+ final int finalA = 0;
+
+ abstract void abstractM();
+}
+
+
+
+
+
diff --git a/ajdoc/testdata/simple/foo/PlainJava.java b/ajdoc/testdata/simple/foo/PlainJava.java
index a7300b07e..ed1408b01 100644
--- a/ajdoc/testdata/simple/foo/PlainJava.java
+++ b/ajdoc/testdata/simple/foo/PlainJava.java
@@ -7,6 +7,7 @@ public class PlainJava {
public int i;
public int getI() {
+ assert true;
new FileFilter() {
public boolean accept(File f) {
diff --git a/ajdoc/testsrc/org/aspectj/tools/ajdoc/CoverageTestCase.java b/ajdoc/testsrc/org/aspectj/tools/ajdoc/CoverageTestCase.java
index 790d8302c..7e629f96a 100644
--- a/ajdoc/testsrc/org/aspectj/tools/ajdoc/CoverageTestCase.java
+++ b/ajdoc/testsrc/org/aspectj/tools/ajdoc/CoverageTestCase.java
@@ -29,14 +29,20 @@ public class CoverageTestCase extends TestCase {
File aspect1 = new File("testdata/simple/foo/AspectA.java");
File file2 = new File("testdata/simple/foo/InterfaceI.java");
File file3 = new File("testdata/simple/foo/PlainJava.java");
+ File file4 = new File("testdata/simple/foo/ModelCoverage.java");
File outdir = new File("testdata/simple/doc");
- String[] args = { "-d",
+ String[] args = {
+// "-XajdocDebug",
+ "-source",
+ "1.4",
+ "-d",
outdir.getAbsolutePath(),
aspect1.getAbsolutePath(),
file1.getAbsolutePath(),
file2.getAbsolutePath(),
- file3.getAbsolutePath()};
+ file3.getAbsolutePath(),
+ file4.getAbsolutePath()};
org.aspectj.tools.ajdoc.Main.main(args);
}