diff options
author | mkersten <mkersten> | 2004-04-07 04:08:43 +0000 |
---|---|---|
committer | mkersten <mkersten> | 2004-04-07 04:08:43 +0000 |
commit | 213f48fcbc1f10dd33e608b66acd4d75276bd4f9 (patch) | |
tree | d3287ea517cc51359df73d19ca3121f02a301d5a | |
parent | 3b7bd4b6f198e63d41c7491d796d4ae270d6fe7e (diff) | |
download | aspectj-213f48fcbc1f10dd33e608b66acd4d75276bd4f9.tar.gz aspectj-213f48fcbc1f10dd33e608b66acd4d75276bd4f9.zip |
I just committed the final round of updates to ajdoc needed for 1.2. In a nutshell it's moved forward a ways from the previous ajdoc:
- AJDT integration works
- generates documentation for all the AspectJ modules
- works on 1.3 and 1.4
- comments and Javadoc tags are properly preserved and resolved
Note that the hope is still for "declare" documentation to come in the form of a contribution.
Getting it to work for our tree involved a bunch of bug fixes to deal with things like anonymous types. To run from our tree in bootstrap mode use something like the attached batch script.
I had to roll back some of Andy's fix to broken links: getRelativeComponent didn't work properly for internal anchor links (..html#<mumble>). Andy, could you check this against the current thing against whatever was breaking for you, and ideally add that code patter to CoverageTestCase?
I added -XjavadocsInModel to make the addition of Javadoc strings to the ASM only happen when request it (prevent bloat of the model with strings. The running time of ajdoc is now dominated by the compilation time.
-rw-r--r-- | ajdoc/src/org/aspectj/tools/ajdoc/Declaration.java | 1 | ||||
-rw-r--r-- | ajdoc/src/org/aspectj/tools/ajdoc/HtmlDecorator.java | 39 | ||||
-rw-r--r-- | ajdoc/src/org/aspectj/tools/ajdoc/JavadocRunner.java (renamed from ajdoc/src/org/aspectj/tools/ajdoc/JavadocExecutor.java) | 7 | ||||
-rw-r--r-- | ajdoc/src/org/aspectj/tools/ajdoc/Main.java | 130 | ||||
-rw-r--r-- | ajdoc/src/org/aspectj/tools/ajdoc/StructureUtil.java | 19 | ||||
-rw-r--r-- | ajdoc/src/org/aspectj/tools/ajdoc/StubFileGenerator.java | 68 | ||||
-rw-r--r-- | ajdoc/src/org/aspectj/tools/ajdoc/SymbolManager.java | 22 | ||||
-rw-r--r-- | ajdoc/testdata/simple/foo/ClassA.java | 15 | ||||
-rw-r--r-- | ajdoc/testdata/simple/foo/PlainJava.java | 20 |
9 files changed, 209 insertions, 112 deletions
diff --git a/ajdoc/src/org/aspectj/tools/ajdoc/Declaration.java b/ajdoc/src/org/aspectj/tools/ajdoc/Declaration.java index 54f622654..3970a7c04 100644 --- a/ajdoc/src/org/aspectj/tools/ajdoc/Declaration.java +++ b/ajdoc/src/org/aspectj/tools/ajdoc/Declaration.java @@ -29,6 +29,7 @@ import org.aspectj.asm.IProgramElement; /** * @author Mik Kersten + * @deprecated org.aspectj.asm.IProgramElement should be used instead */ public class Declaration implements Serializable { private int beginLine; diff --git a/ajdoc/src/org/aspectj/tools/ajdoc/HtmlDecorator.java b/ajdoc/src/org/aspectj/tools/ajdoc/HtmlDecorator.java index a7f3e2b06..0c3bca6b3 100644 --- a/ajdoc/src/org/aspectj/tools/ajdoc/HtmlDecorator.java +++ b/ajdoc/src/org/aspectj/tools/ajdoc/HtmlDecorator.java @@ -40,7 +40,6 @@ class HtmlDecorator { declIDTable = table; symbolManager = sm; for (int i = 0; i < inputFiles.length; i++) { - decorateHTMLFromDecls(symbolManager.getDeclarations(inputFiles[i].getCanonicalPath()), rootDir.getCanonicalPath() + Config.DIR_SEP_CHAR, docModifier, @@ -49,7 +48,7 @@ class HtmlDecorator { } static void decorateHTMLFromDecls(Declaration[] decls, String base, String docModifier, boolean exceededNestingLevel) throws IOException { - if ( decls != null ) { + if ( decls != null ) { for (int i = 0; i < decls.length; i++) { Declaration decl = decls[i]; decorateHTMLFromDecl(decl, base, docModifier, exceededNestingLevel); @@ -59,7 +58,7 @@ class HtmlDecorator { /** * Before attempting to decorate the HTML file we have to verify that it exists, - * which depends on the documentation visibility specified to javadoc. + * which depends on the documentation visibility specified to c. * * Depending on docModifier, can document * - public: only public @@ -74,11 +73,11 @@ class HtmlDecorator { boolean nestedClass = false; if ( decl.isType() ) { boolean decorateFile = true; - if ( (docModifier.equals( "private" )) || // everything - (docModifier.equals( "package" ) && decl.getModifiers().indexOf( "private" ) == -1) || // package - (docModifier.equals( "protected" ) && (decl.getModifiers().indexOf( "protected" ) != -1 || + if ( (docModifier.equals("private")) || // everything + (docModifier.equals("package") && decl.getModifiers().indexOf( "private" ) == -1) || // package + (docModifier.equals("protected") && (decl.getModifiers().indexOf( "protected" ) != -1 || decl.getModifiers().indexOf( "public" ) != -1 )) || - (docModifier.equals( "public" ) && decl.getModifiers().indexOf( "public" ) != -1) ) { + (docModifier.equals("public") && decl.getModifiers().indexOf( "public" ) != -1) ) { visibleFileList.add(decl.getSignature()); String packageName = decl.getPackageName(); String filename = ""; @@ -164,8 +163,6 @@ class HtmlDecorator { // addAdviceDocumentation(decl, fileContents, index); // addPointcutDocumentation(decl, fileContents, index); addAspectDocumentation(decl, fileContents, index); - - } else { decorateMemberDocumentation(decl, fileContents, index); @@ -485,16 +482,16 @@ class HtmlDecorator { + currDecl.toLabelString() + ".html"; } else { - linkName = packagePath + currDecl.getParent().getName() + "." + currDecl.getName(); - linkRef = - getRelativeComponent(packagePath) - + packagePath - + currDecl.getParent().getName() - + ".html" - + "#" - + currDecl.toLabelString(); -// + linkRef = currDecl.getParent().getName() + ".html" + "#" + currDecl.toLabelString(); +// linkRef = +// getRelativeComponent(packagePath) +// + packagePath +// + currDecl.getParent().getName() +// + ".html" +// + "#" +// + currDecl.toLabelString(); +// // XXX: only one level of nested classes if (currDecl.getParent().getParent().getKind().isType()) { linkRef = currDecl.getParent().getParent().getName() + "." + linkRef; @@ -604,11 +601,13 @@ class HtmlDecorator { * TODO: implement formatting or linking for tags. */ static String getFormattedComment(IProgramElement decl) { - String formattedComment = ""; - // strip the comment markers String comment = decl.getFormalComment(); + if (comment == null) return ""; + String formattedComment = ""; + // strip the comment markers + int startIndex = comment.indexOf("/**"); int endIndex = comment.indexOf("*/"); if ( startIndex == -1 ) { diff --git a/ajdoc/src/org/aspectj/tools/ajdoc/JavadocExecutor.java b/ajdoc/src/org/aspectj/tools/ajdoc/JavadocRunner.java index 15398761f..2b07b6d08 100644 --- a/ajdoc/src/org/aspectj/tools/ajdoc/JavadocExecutor.java +++ b/ajdoc/src/org/aspectj/tools/ajdoc/JavadocRunner.java @@ -31,7 +31,8 @@ import java.util.*; /** * @author Mik Kersten */ -class JavadocExecutor { +class JavadocRunner { + static boolean has14ToolsAvailable() { Class jdMainClass = com.sun.tools.javadoc.Main.class; try { @@ -43,7 +44,6 @@ class JavadocExecutor { return true; } - static void callJavadoc( String[] javadocargs ){ final SecurityManager defaultSecurityManager = System.getSecurityManager(); @@ -78,7 +78,8 @@ class JavadocExecutor { Class[] paramTypes = new Class[] {String[].class}; executeMethod = jdMainClass.getMethod("execute", paramTypes); } catch (NoSuchMethodException e) { - throw new UnsupportedOperationException("ajdoc requires a tools library from JDK 1.4 or later."); + com.sun.tools.javadoc.Main.main(javadocargs); +// throw new UnsupportedOperationException("ajdoc requires a tools library from JDK 1.4 or later."); } try { executeMethod.invoke(null, new Object[] {javadocargs}); diff --git a/ajdoc/src/org/aspectj/tools/ajdoc/Main.java b/ajdoc/src/org/aspectj/tools/ajdoc/Main.java index ab78d66a9..8c550ea6c 100644 --- a/ajdoc/src/org/aspectj/tools/ajdoc/Main.java +++ b/ajdoc/src/org/aspectj/tools/ajdoc/Main.java @@ -39,13 +39,13 @@ public class Main implements Config { static Vector ajcOptions = new Vector(); /** All of the files to be processed by ajdoc. */ - static Vector filenames = new Vector(); + static Vector filenames; /** List of files to pass to javadoc. */ - static Vector fileList= new Vector(); + static Vector fileList; /** List of packages to pass to javadoc. */ - static Vector packageList = new Vector(); + static Vector packageList; /** Default to package visiblity. */ static String docModifier = "package"; @@ -59,7 +59,9 @@ public class Main implements Config { static File rootDir = null; static Hashtable declIDTable = new Hashtable(); static String docDir = "."; - + + private static boolean deleteTempFilesOnExit = true; + private static boolean aborted = false; public static void clearState() { @@ -80,14 +82,15 @@ public class Main implements Config { public static void main(String[] args) { aborted = false; - - if (!JavadocExecutor.has14ToolsAvailable()) { - System.err.println("ajdoc requires a JDK 1.4 or later tools jar - exiting"); - aborted = true; - return; - } - -// System.err.println("> command invoked: " + Arrays.asList(args).toString()); + + filenames = new Vector(); + fileList= new Vector(); + packageList = new Vector(); +// if (!JavadocRunner.has14ToolsAvailable()) { +// System.err.println("ajdoc requires a JDK 1.4 or later tools jar - exiting"); +// aborted = true; +// return; +// } // STEP 1: parse the command line and do other global setup sourcepath.addElement("."); // add the current directory to the classapth @@ -101,7 +104,7 @@ public class Main implements Config { if ( !(new File( Config.WORKING_DIR ).isDirectory()) ) { File dir = new File( Config.WORKING_DIR ); dir.mkdir(); - dir.deleteOnExit(); + if (deleteTempFilesOnExit) dir.deleteOnExit(); } for (int i = 0; i < filenames.size(); i++) { @@ -111,7 +114,7 @@ public class Main implements Config { // PHASE 0: call ajc ajcOptions.addElement( "-noExit" ); - ajcOptions.addElement( "-emacssym" ); // TODO: wrong option to force model gen + ajcOptions.addElement( "-XjavadocsInModel" ); // TODO: wrong option to force model gen String[] argsToCompiler = new String[ajcOptions.size() + inputFiles.length]; int i = 0; for ( ; i < ajcOptions.size(); i++ ) { @@ -123,7 +126,7 @@ public class Main implements Config { i++; } - System.out.println( "> calling ajc..." ); + System.out.println( "> Calling ajc..." ); CompilerWrapper.main(argsToCompiler); if (CompilerWrapper.hasErrors()) { System.out.println(FAIL_MESSAGE); @@ -145,11 +148,11 @@ public class Main implements Config { } // PHASE 1: generate Signature files (Java with DeclIDs and no bodies). - System.out.println( "> building signature files..." ); + System.out.println( "> Building signature files..." ); StubFileGenerator.doFiles(declIDTable, symbolManager, inputFiles, signatureFiles); // PHASE 2: let Javadoc generate HTML (with DeclIDs) - System.out.println( "> calling javadoc..." ); + System.out.println( "> Calling javadoc..." ); String[] javadocargs = null; if ( packageMode ) { int numExtraArgs = 2; @@ -188,7 +191,7 @@ public class Main implements Config { } } - JavadocExecutor.callJavadoc(javadocargs); + JavadocRunner.callJavadoc(javadocargs); //for ( int o = 0; o < inputFiles.length; o++ ) { // System.out.println( "file: " + inputFiles[o] ); //} @@ -204,7 +207,8 @@ public class Main implements Config { rootDir, symbolManager, inputFiles, - docModifier); + docModifier); + System.out.println( "> Removing generated tags (this may take a while)..." ); removeDeclIDsFromFile("index-all.html"); removeDeclIDsFromFile("serialized-form.html"); for (int p = 0; p < packageList.size(); p++) { @@ -212,6 +216,7 @@ public class Main implements Config { Config.DIR_SEP_CHAR + "package-summary.html" ); } + System.out.println( "> Finished." ); } catch (Throwable e) { handleInternalError(e); exit(-2); @@ -310,7 +315,7 @@ public class Main implements Config { File packageDir = new File(pathName); if ( !packageDir.exists() ) { packageDir.mkdirs(); - packageDir.deleteOnExit(); + if (deleteTempFilesOnExit) packageDir.deleteOnExit(); } //verifyPackageDirExists(packageName, null); packageName = packageName.replace( '.','/' ); // !!! @@ -321,7 +326,7 @@ public class Main implements Config { filename = Config.WORKING_DIR + Config.DIR_SEP_CHAR + inputFile.getName(); } File signatureFile = new File( filename ); - signatureFile.deleteOnExit(); + if (deleteTempFilesOnExit) signatureFile.deleteOnExit(); return signatureFile; } @@ -344,7 +349,7 @@ public class Main implements Config { File packageDir = new File( filePath ); if ( !packageDir.exists() ) { packageDir.mkdir(); - packageDir.deleteOnExit(); + if (deleteTempFilesOnExit) packageDir.deleteOnExit(); } if ( remainingPkg != "" ) { verifyPackageDirExists( remainingPkg, currPkgDir ); @@ -361,16 +366,45 @@ public class Main implements Config { File packageDir = new File( filePath ); if ( !packageDir.exists() ) { packageDir.mkdir(); - packageDir.deleteOnExit(); + if (deleteTempFilesOnExit) packageDir.deleteOnExit(); } } } + /** + * Can read Eclipse-generated single-line arg + */ static void parseCommandLine(String[] args) { if (args.length == 0) { displayHelpAndExit( null ); } else if (args.length == 1 && args[0].startsWith("@")) { - System.err.println("!!!!!!!!"); + String argFile = args[0].substring(1); + System.out.println("> Using arg file: " + argFile); + BufferedReader br; + try { + br = new BufferedReader(new FileReader(argFile)); + String line = ""; + line = br.readLine(); + StringTokenizer st = new StringTokenizer(line, " "); + List argList = new ArrayList(); + while(st.hasMoreElements()) { + argList.add((String)st.nextElement()); + } + args = new String[argList.size()]; + int counter = 0; + for (Iterator it = argList.iterator(); it.hasNext(); ) { + args[counter] = (String)it.next(); + counter++; + } + } catch (FileNotFoundException e) { + System.err.println("> could not read arg file: " + argFile); + e.printStackTrace(); + } catch (IOException ioe) { + System.err.println("> could not read arg file: " + argFile); + ioe.printStackTrace(); + } + + } List vargs = new LinkedList(Arrays.asList(args)); @@ -467,50 +501,44 @@ public class Main implements Config { else if (arg.startsWith("-") || addNextAsOption) { if ( arg.equals( "-private" ) ) { docModifier = "private"; - } - else if ( arg.equals( "-package" ) ) { + }else if ( arg.equals( "-package" ) ) { docModifier = "package"; - } - else if ( arg.equals( "-protected" ) ) { + } else if ( arg.equals( "-protected" ) ) { docModifier = "protected"; - } - else if ( arg.equals( "-public" ) ) { + } else if ( arg.equals( "-public" ) ) { docModifier = "public"; - } - else if ( arg.equals( "-verbose" ) ) { + } else if ( arg.equals( "-verbose" ) ) { verboseMode = true; - } - else if ( arg.equals( "-author" ) ) { + } else if ( arg.equals( "-author" ) ) { authorStandardDocletSwitch = true; - } - else if ( arg.equals( "-version" ) ) { + } else if ( arg.equals( "-version" ) ) { versionStandardDocletSwitch = true; - } - else if ( arg.equals( "-v" ) ) { + } else if ( arg.equals( "-v" ) ) { System.out.println(getVersion()); exit(0); - } - else if ( arg.equals( "-help" ) ) { + } else if ( arg.equals( "-help" ) ) { displayHelpAndExit( null ); - } - else if ( arg.equals( "-doclet" ) || arg.equals( "-docletpath" ) ) { + } else if ( arg.equals( "-doclet" ) || arg.equals( "-docletpath" ) ) { System.out.println( "The doclet and docletpath options are not currently supported \n" + "since ajdoc makes assumptions about the behavior of the standard \n" + "doclet. If you would find this option useful please email us at: \n" + " \n" + - " asupport@aspectj.org \n" + + " aspectj-dev@eclipse.org \n" + " \n" ); exit(0); - } - else if ( addNextAsOption ) { - // just pass through - } - else { + } else if (arg.equals("-nonavbar") + || arg.equals("-noindex")) { + // pass through + //System.err.println("> ignoring unsupported option: " + arg); + } else if ( addNextAsOption ) { + // pass through + } else { + System.err.println("> uncrecognized arg: " + arg); displayHelpAndExit( null ); - } + } options.addElement(arg); addNextAsOption = false; - } + } else { // check if this is a file or a package if ( arg.indexOf( ".java" ) == arg.length() - 5 || @@ -638,7 +666,7 @@ public class Main implements Config { "Please copy the following text into an email message and send it,\n" + "along with any additional information you can add to: \n" + " \n" + - " support@aspectj.org \n" + + " aspectj-dev@eclipse.org \n" + " \n"; static public void handleInternalError(Throwable uncaughtThrowable) { diff --git a/ajdoc/src/org/aspectj/tools/ajdoc/StructureUtil.java b/ajdoc/src/org/aspectj/tools/ajdoc/StructureUtil.java index 65b1e7d81..21788134f 100644 --- a/ajdoc/src/org/aspectj/tools/ajdoc/StructureUtil.java +++ b/ajdoc/src/org/aspectj/tools/ajdoc/StructureUtil.java @@ -90,4 +90,23 @@ public class StructureUtil { return sb.toString(); } + + public static boolean isAnonymous(IProgramElement node) { + boolean isIntName = true; + try { + Integer.valueOf(node.getName()); + } catch (NumberFormatException nfe) { + // !!! using exceptions for logic, fix + isIntName = false; + } +// System.err.println(">>>>>>>> " + node.getName()); + return isIntName || node.getName().startsWith("new "); +// return isIntName; +// if (!isIntName) { +// +// return node.getName().startsWith("new "); +// } else { +// return false; +// } + } } diff --git a/ajdoc/src/org/aspectj/tools/ajdoc/StubFileGenerator.java b/ajdoc/src/org/aspectj/tools/ajdoc/StubFileGenerator.java index 19302e5a7..751a3b6ad 100644 --- a/ajdoc/src/org/aspectj/tools/ajdoc/StubFileGenerator.java +++ b/ajdoc/src/org/aspectj/tools/ajdoc/StubFileGenerator.java @@ -82,54 +82,54 @@ class StubFileGenerator { String formalComment = addDeclID(classNode, classNode.getFormalComment()); writer.println(formalComment); - String signature = getnSourcesignature(classNode);// StructureUtil.genSignature(classNode); + String signature = genSourceSignature(classNode);// StructureUtil.genSignature(classNode); - writer.println(signature + " {" ); - processMembers(classNode.getChildren(), writer, classNode.getKind().equals(IProgramElement.Kind.INTERFACE)); - writer.println(); - writer.println("}"); - } - - /** - * Translates "aspect" to "class" - */ - private static String getnSourcesignature(IProgramElement classNode) { - String signature = classNode.getSourceSignature(); - int index = signature.indexOf("aspect"); - if (index != -1) { - signature = signature.substring(0, index) + - "class " + - signature.substring(index + 6, signature.length()); +// System.err.println("######" + signature + ", " + classNode.getName()); + if (!StructureUtil.isAnonymous(classNode) && !classNode.getName().equals("<undefined>")) { + writer.println(signature + " {" ); + processMembers(classNode.getChildren(), writer, classNode.getKind().equals(IProgramElement.Kind.INTERFACE)); + writer.println(); + writer.println("}"); } - return signature; - } + } private static void processMembers(List/*IProgramElement*/ members, PrintWriter writer, boolean declaringTypeIsInterface) throws IOException { for (Iterator it = members.iterator(); it.hasNext();) { IProgramElement member = (IProgramElement) it.next(); - if (member.getKind().isType() - && !member.getParent().getKind().equals(IProgramElement.Kind.METHOD)) { - processTypeDeclaration(member, writer); + if (member.getKind().isType()) { + if (!member.getParent().getKind().equals(IProgramElement.Kind.METHOD) + && !StructureUtil.isAnonymous(member)) {// don't print anonymous types +// System.err.println(">>>>>>>>>>>>>" + member.getName() + "<<<<" + member.getParent()); + processTypeDeclaration(member, writer); + } } else { String formalComment = addDeclID(member, member.getFormalComment());; writer.println(formalComment); String signature = ""; if (!member.getKind().equals(IProgramElement.Kind.POINTCUT) - && !member.getKind().equals(IProgramElement.Kind.ADVICE) ) { + && !member.getKind().equals(IProgramElement.Kind.ADVICE)) { signature = member.getSourceSignature();//StructureUtil.genSignature(member); } - if (signature != null && - !member.getKind().isInterTypeMember()) { + if (signature != null && + signature != "" && + !member.getKind().isInterTypeMember() && + !member.getKind().equals(IProgramElement.Kind.INITIALIZER) && + !StructureUtil.isAnonymous(member)) { writer.print(signature); } else { // System.err.println(">> skipping: " + member.getKind()); } - + if (member.getKind().equals(IProgramElement.Kind.METHOD) || member.getKind().equals(IProgramElement.Kind.CONSTRUCTOR)) { - writer.println(" { }"); + if (member.getParent().getKind().equals(IProgramElement.Kind.INTERFACE) || + signature.indexOf("abstract ") != -1) { + writer.println(";"); + } else { + writer.println(" { }"); + } } else if (member.getKind().equals(IProgramElement.Kind.FIELD)) { // writer.println(";"); @@ -138,6 +138,20 @@ class StubFileGenerator { } } + /** + * Translates "aspect" to "class", as long as its not ".aspect" + */ + private static String genSourceSignature(IProgramElement classNode) { + String signature = classNode.getSourceSignature(); + int index = signature.indexOf("aspect"); + if (index != -1 && signature.charAt(index-1) != '.') { + signature = signature.substring(0, index) + + "class " + + signature.substring(index + 6, signature.length()); + } + return signature; + } + static int nextDeclID = 0; static String addDeclID(IProgramElement decl, String formalComment) { String declID = "" + ++nextDeclID; diff --git a/ajdoc/src/org/aspectj/tools/ajdoc/SymbolManager.java b/ajdoc/src/org/aspectj/tools/ajdoc/SymbolManager.java index 5e58d7fda..00bddb060 100644 --- a/ajdoc/src/org/aspectj/tools/ajdoc/SymbolManager.java +++ b/ajdoc/src/org/aspectj/tools/ajdoc/SymbolManager.java @@ -50,26 +50,32 @@ public class SymbolManager { file.walk(walker); -// System.err.println("> got: " + nodes); - return (Declaration[])nodes.toArray(new Declaration[nodes.size()]); -// return lookupDeclarations(filename); } + /** + * Rejects anonymous kinds by checking if their name is an integer + */ private boolean accept(IProgramElement node) { - return - !node.getKind().equals(IProgramElement.Kind.IMPORT_REFERENCE) - && !(node.getKind().isType() && - node.getParent().getKind().equals(IProgramElement.Kind.METHOD)); + if (node.getKind().isType()) { + boolean isAnonymous = StructureUtil.isAnonymous(node); + return !node.getParent().getKind().equals(IProgramElement.Kind.METHOD) + && !isAnonymous; + } else { + return !node.getKind().equals(IProgramElement.Kind.IMPORT_REFERENCE); + } +// && !(node.getKind().isType() && +// node.getParent().getKind().equals(IProgramElement.Kind.METHOD)); } private Declaration buildDecl(IProgramElement node) { String signature = ""; String accessibility = node.getAccessibility().toString(); - if (!accessibility.equals("package")) signature = accessibility + " "; + if (!accessibility.equals("package")) signature = accessibility.toString() + " "; String modifiers = ""; + if (!node.getAccessibility().equals(IProgramElement.Accessibility.PACKAGE)) modifiers += node.getAccessibility() + " "; for (Iterator modIt = node.getModifiers().iterator(); modIt.hasNext(); ) { modifiers += modIt.next() + " "; } diff --git a/ajdoc/testdata/simple/foo/ClassA.java b/ajdoc/testdata/simple/foo/ClassA.java index 1b357a788..097f4a281 100644 --- a/ajdoc/testdata/simple/foo/ClassA.java +++ b/ajdoc/testdata/simple/foo/ClassA.java @@ -5,12 +5,21 @@ import java.io.IOException; /** * Test class. This is a comment. - */ + */ public abstract class ClassA implements InterfaceI { + /** + * Mumble field. + */ + public String mumble = "xxx"; public int pubfield; - private int privfield; - + private String privfield = "mumble"; + + public IOException exception = new IOException() { + + public String getMumble() { return "mumble"; } + }; + /** * Mumbo. Jumbo. * diff --git a/ajdoc/testdata/simple/foo/PlainJava.java b/ajdoc/testdata/simple/foo/PlainJava.java new file mode 100644 index 000000000..a7300b07e --- /dev/null +++ b/ajdoc/testdata/simple/foo/PlainJava.java @@ -0,0 +1,20 @@ + +package foo; + +import java.io.*; + +public class PlainJava { + public int i; + + public int getI() { + + new FileFilter() { + public boolean accept(File f) { + boolean accept = !(f.isDirectory() || f.getName().endsWith(".class")) ; + return accept; + } + }; + + return i; + } +}
\ No newline at end of file |