diff options
Diffstat (limited to 'ajdoc')
-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 |