diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 2fec8bf..1f01cc9 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -30,20 +30,11 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v2 - with: - # We must fetch at least the immediate parents so that if this is - # a pull request then we can checkout the head. - fetch-depth: 2 - - # If this run was triggered by a pull request event, then checkout - # the head of the pull request instead of the merge commit. - - run: git checkout HEAD - if: ${{ github.event_name == 'pull_request' }} + uses: actions/checkout@v3 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v1 + uses: github/codeql-action/init@v2 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -52,15 +43,16 @@ jobs: # queries: ./path/to/local/query, your-org/your-repo/queries@main - name: Setup Java JDK - uses: actions/setup-java@v2.3.1 + uses: actions/setup-java@v3 with: - java-version: '17.0.1+12' + java-version: '17' distribution: 'temurin' + cache: maven # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@v1 + uses: github/codeql-action/autobuild@v2 # â„šī¸ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -74,4 +66,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 + uses: github/codeql-action/analyze@v2 diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 5374229..868a967 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -8,11 +8,19 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 - - name: Set up JDK 17 - uses: actions/setup-java@v2.3.1 - with: - java-version: '17.0.1+12' - distribution: 'temurin' - - name: Build with Maven - run: mvn -B package --file pom.xml + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Check w/o SNAPSHOT when "bump version" + if: ${{ contains(github.event.head_commit.message, 'bump version') }} + run: grep "" pom.xml | head -1 | grep -v SNAPSHOT + + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'temurin' + cache: maven + + - name: Build with Maven + run: mvn -B package --file pom.xml diff --git a/.gitignore b/.gitignore index 9e28fb4..08bf4b2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ lib/ tmp/ codavaj-*.jar +java8.properties diff --git a/README.md b/README.md index 2f41de5..5b1ff24 100644 --- a/README.md +++ b/README.md @@ -35,12 +35,12 @@ codavaj.cmd codavaj http://jumpi.sourceforge.net/javadoc/j2se tmp/jumpi/src ## Cooperate with Java Parser -| **parser** | **set javadoc to decompiled source** | **rename argument names as javadoc documented** | **code** | -|:-----------|:------------------------------------:|:-----------------------------------------------:|----------| -| [JavaParser](https://github.com/javaparser/javaparser) | ✅ | đŸšĢ | [📄](https://github.com/umjammer/codavaj/blob/master/src/test/java/Test02.java) | -| [rewrite](https://github.com/Netflix-Skunkworks/rewrite) | ✅ | 🚧 | [📄](https://github.com/umjammer/codavaj/blob/master/src/test/java/Test03.java) | -| [JDT](https://www.eclipse.org/jdt/) | ✅ | đŸšĢ | [📄](https://github.com/umjammer/codavaj/blob/master/src/test/java/Test04.java) | -| [spoon](https://github.com/INRIA/spoon) | ✅ | đŸšĢ | [📄](https://github.com/umjammer/codavaj/blob/master/src/test/java/Test05.java) | +| **parser** | **set javadoc to (decompiled) source** | **rename argument names as javadoc documented** | **code** | **output** | +|:-----------|:--------------------------------------:|:-----------------------------------------------:|------------------------------------------------------------------------------------------------------------|:--------------------------------:| +| [JavaParser](https://github.com/javaparser/javaparser) | ✅ | đŸšĢ | [📄](https://github.com/umjammer/codavaj/blob/master/src/test/java/commentator/JavaParserCommentator.java) | 👑 | +| [rewrite](https://github.com/Netflix-Skunkworks/rewrite) | jdk version problem? | 🚧 | [📄](https://github.com/umjammer/codavaj/blob/master/src/test/java/commentator/RewriteCommentator.java) | | +| [JDT](https://www.eclipse.org/jdt/) | ✅ | đŸšĢ | [📄](https://github.com/umjammer/codavaj/blob/master/src/test/java/commentator/JgtCommentator.java) | little bit worse than JavaParser | +| [spoon](https://github.com/INRIA/spoon) | ✅ | đŸšĢ | [📄](https://github.com/umjammer/codavaj/blob/master/src/test/java/commentator/SpoonCommentator.java) | formats are gone | ## known issues @@ -48,7 +48,7 @@ codavaj.cmd codavaj http://jumpi.sourceforge.net/javadoc/j2se tmp/jumpi/src in the javadoc. This leads to compile problems if there are subclasses which use the class's default constructor through the implicit super(). -* hekohtml ~1.19.22 +* nekohtml ~1.19.22 * https://mvnrepository.com/artifact/net.sourceforge.nekohtml/nekohtml/1.9.22 * https://mvnrepository.com/artifact/xerces/xercesImpl/2.11.0 * but 1.19.22 doesn't work with this project currently diff --git a/jitpack.yml b/jitpack.yml new file mode 100644 index 0000000..4a7f508 --- /dev/null +++ b/jitpack.yml @@ -0,0 +1,5 @@ +jdk: + - openjdk17 +before_install: + - sdk install java 17.0.1-open + - sdk use java 17.0.1-open diff --git a/pom.xml b/pom.xml index b23a8f8..9fc7bc7 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ org.codavaj codavaj - 1.4.5-SNAPSHOT + 1.4.6 TODO @@ -23,11 +23,10 @@ TODO - /Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/Contents/Home + /Library/Java/JavaVirtualMachines/jdk1.8.0_341.jdk/Contents/Home - codavaj @@ -159,6 +158,71 @@ TODO + + + comment + + + + org.apache.maven.plugins + maven-antrun-plugin + 3.1.0 + + + spoon + + run + + + + + + + + + + + + + + + + + + + + + + + + + javaParser + + run + + + + + + + + + + + + + + + + + + + + + + + + @@ -232,7 +296,7 @@ TODO org.junit junit-bom - 5.8.2 + 5.9.1 pom import @@ -298,7 +362,7 @@ TODO com.github.umjammer vavi-commons - 1.1.6 + 1.1.8 @@ -320,7 +384,7 @@ TODO com.github.javaparser javaparser-symbol-solver-core - 3.24.4 + 3.24.7 test @@ -334,6 +398,10 @@ TODO com.fasterxml.jackson.core jackson-annotations + + org.slf4j + slf4j-api + @@ -353,7 +421,7 @@ TODO fr.inria.gforge.spoon spoon-core - 10.1.1 + 10.2.0 test diff --git a/retrieve.sh b/retrieve.sh new file mode 100755 index 0000000..24a5a95 --- /dev/null +++ b/retrieve.sh @@ -0,0 +1,9 @@ +#!/bin/bash +JAVA_HOME=$(/usr/libexec/java_home -v 1.8) +mv pom.xml pom.xml.orig +sed -e 's@java8.home.*java8.home@java8.home>'$JAVA_HOME' pom.xml || mv pom.xml.orig pom.xml +diff pom.xml.orig pom.xml +if [ $? -eq 0 ]; then # no diff + rm pom.xml.orig +fi +echo "java8.home=$JAVA_HOME" > java8.properties diff --git a/src/main/java/org/codavaj/Main.java b/src/main/java/org/codavaj/Main.java index 358dbea..7ba2935 100644 --- a/src/main/java/org/codavaj/Main.java +++ b/src/main/java/org/codavaj/Main.java @@ -17,6 +17,7 @@ package org.codavaj; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.logging.Logger; @@ -25,6 +26,7 @@ import org.codavaj.process.wget.Wget; import org.codavaj.type.TypeFactory; + /** * The program entry point. *

@@ -46,13 +48,12 @@ public class Main { * to external javadoc links. External links to Sun's JDK javadoc apis are * automatically resolved ( i.e. http://java.sun.com/j2se/X/docs/api/ ) * - * @param javadocdir the javadoc tree root + * @param javadocdir the javadoc tree root * @param externalLinks a list of 'http://..' strings representing external javadoc refs. - * * @return a TypeFactory handle on the resulting api * @throws ProcessException any problem. */ - public static TypeFactory analyze( String javadocdir, List externalLinks ) throws ProcessException { + public static TypeFactory analyze(String javadocdir, List externalLinks) throws ProcessException { DocParser dp = new DocParser(); dp.setJavadocDirName(javadocdir); @@ -67,12 +68,12 @@ public static TypeFactory analyze( String javadocdir, List externalLinks *

* command is "wget" or "codavaj". *

+ * * @param args 0: command, 1: source url, 2: output dir, [3: encoding], [4: language] */ public static void main(String[] args) throws Exception { if (args.length < 3) { - System.err.println("usage alternatives: \n\t" + usage_wget + "\n\t" - + usage_parse); + System.err.println("usage alternatives: \n\t" + usage_wget + "\n\t" + usage_parse); return; } @@ -85,21 +86,18 @@ public static void main(String[] args) throws Exception { // "exec-maven-plugin" doesn't have "fork" option. // usually, use a jvmarg like "-Dcodavaj.file.encoding=MS932" System.setProperty("codavaj.file.encoding", args[3]); -logger.info("encoding: " + System.getProperty("codavaj.file.encoding")); + logger.info("encoding: " + System.getProperty("codavaj.file.encoding")); } if (args.length > 4) { // reluctantly, cause "exec-maven-plugin" cannot pass system properties as jvm arguments. // "exec-maven-plugin" doesn't have "fork" option. // usually, use a jvmarg like "-Dcodavaj.language=JAPANESE" System.setProperty("codavaj.language", args[4]); -logger.info("language: " + System.getProperty("codavaj.language")); + logger.info("language: " + System.getProperty("codavaj.language")); } // all subsequent arguments become external javadoc URL references - List externalLinks = new ArrayList<>(); - for( int i = 3; i < args.length; i++) { - externalLinks.add(args[i]); - } + List externalLinks = new ArrayList<>(Arrays.asList(args).subList(3, args.length)); if ("wget".equals(cmd)) { Wget wget = new Wget(); @@ -121,10 +119,7 @@ public static void main(String[] args) throws Exception { sw.addProgressListener(System.err::println); sw.process(); } else { - System.err.println("usage alternatives: \n\t" + usage_wget + "\n\t" - + usage_parse); - - return; + System.err.println("usage alternatives: \n\t" + usage_wget + "\n\t" + usage_parse); } } } diff --git a/src/main/java/org/codavaj/MissingParameterException.java b/src/main/java/org/codavaj/MissingParameterException.java index efb7dc1..c63f681 100644 --- a/src/main/java/org/codavaj/MissingParameterException.java +++ b/src/main/java/org/codavaj/MissingParameterException.java @@ -16,10 +16,14 @@ package org.codavaj; +import java.io.Serial; + + /** * DOCUMENT ME! */ public class MissingParameterException extends ProcessException { + @Serial private static final long serialVersionUID = -7654967901729855056L; /** diff --git a/src/main/java/org/codavaj/ProcessException.java b/src/main/java/org/codavaj/ProcessException.java index 10d3738..33c34c7 100644 --- a/src/main/java/org/codavaj/ProcessException.java +++ b/src/main/java/org/codavaj/ProcessException.java @@ -16,10 +16,14 @@ package org.codavaj; +import java.io.Serial; + + /** * DOCUMENT ME! */ public class ProcessException extends Exception { + @Serial private static final long serialVersionUID = 2949538686794102085L; /** diff --git a/src/main/java/org/codavaj/process/ProgressEvent.java b/src/main/java/org/codavaj/process/ProgressEvent.java index 24862da..9f00609 100644 --- a/src/main/java/org/codavaj/process/ProgressEvent.java +++ b/src/main/java/org/codavaj/process/ProgressEvent.java @@ -20,6 +20,7 @@ * DOCUMENT ME! */ public class ProgressEvent { + private int done; private int todo; private String message; diff --git a/src/main/java/org/codavaj/process/ProgressListener.java b/src/main/java/org/codavaj/process/ProgressListener.java index a960908..7faed05 100644 --- a/src/main/java/org/codavaj/process/ProgressListener.java +++ b/src/main/java/org/codavaj/process/ProgressListener.java @@ -22,10 +22,11 @@ */ @FunctionalInterface public interface ProgressListener { + /** * DOCUMENT ME! * * @param event DOCUMENT ME! */ - public void notify(ProgressEvent event); + void notify(ProgressEvent event); } diff --git a/src/main/java/org/codavaj/process/Progressive.java b/src/main/java/org/codavaj/process/Progressive.java index 985a5aa..6901662 100644 --- a/src/main/java/org/codavaj/process/Progressive.java +++ b/src/main/java/org/codavaj/process/Progressive.java @@ -17,7 +17,6 @@ package org.codavaj.process; import java.util.HashMap; -import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -28,8 +27,9 @@ * DOCUMENT ME! */ public interface Progressive { + // TODO should be protected - static Map, List> listeners = new HashMap<>(); + Map, List> listeners = new HashMap<>(); /** * DOCUMENT ME! @@ -37,11 +37,7 @@ public interface Progressive { * @param lstnr DOCUMENT ME! */ default void addProgressListener(ProgressListener lstnr) { - List l = listeners.get(this); - if (l == null) { - l = new LinkedList<>(); - listeners.put(this, l); - } + List l = listeners.computeIfAbsent(this, k -> new LinkedList<>()); l.add(lstnr); } @@ -61,10 +57,8 @@ default void removeProgressListener(ProgressListener lstnr) { default void notifyListeners(ProgressEvent event) { List ll = listeners.get(this); if (ll != null) { - Iterator it = ll.iterator(); - while (it.hasNext()) { - ProgressListener l = it.next(); + for (ProgressListener l : ll) { l.notify(event); } } diff --git a/src/main/java/org/codavaj/process/docparser/DocParser.java b/src/main/java/org/codavaj/process/docparser/DocParser.java index a5c6ab6..b012ce4 100644 --- a/src/main/java/org/codavaj/process/docparser/DocParser.java +++ b/src/main/java/org/codavaj/process/docparser/DocParser.java @@ -29,9 +29,10 @@ import org.codavaj.type.Type; import org.codavaj.type.TypeFactory; + /** * Read an entire javadoc file tree and construct a reflection-like - * representation of all it's constituent parts ( Classes, Interfaces ... ) in + * representation of all its constituent parts ( Classes, Interfaces ... ) in * a TypeFactory. */ public class DocParser implements Progressive { @@ -44,7 +45,7 @@ public class DocParser implements Progressive { private String javadocDirName; /** - * javadocClassName used by Tests to parse single classes instead of all docs + * javadocClassName used by Tests to parse single classes instead of all docs */ private Pattern javadocClassName; private List externalLinks; @@ -61,7 +62,7 @@ public TypeFactory process() throws ProcessException { ParserUtils parserUtil; -Map errors = new HashMap<>(); + Map errors = new HashMap<>(); try { // load and then process the list of all classes javadoc @@ -97,14 +98,14 @@ public TypeFactory process() throws ProcessException { } } -errors.entrySet().forEach(e -> { - System.err.println("******************: " + e.getKey().getShortName()); - e.getValue().printStackTrace(); - System.err.println(e.getValue().getMessage()); +errors.forEach((key, value) -> { + System.err.println("******************: " + key.getShortName()); + value.printStackTrace(); + System.err.println(value.getMessage()); }); try { - // try and determine all constants + // try and determine all constants' //info( parserUtil.prettyPrint(allconstants)); parserUtil.processConstant(typeFactory.getTypeMap(), javadocClassName != null); } catch (Exception e) { diff --git a/src/main/java/org/codavaj/process/docparser/FullyQualifiedNameMap.java b/src/main/java/org/codavaj/process/docparser/FullyQualifiedNameMap.java index b5a4a9b..66af38d 100644 --- a/src/main/java/org/codavaj/process/docparser/FullyQualifiedNameMap.java +++ b/src/main/java/org/codavaj/process/docparser/FullyQualifiedNameMap.java @@ -55,7 +55,7 @@ public String toFullyQualifiedName(Type type, String typeName) { if (containsKey(typeName)) { return get(typeName); } else { - if (typeName.indexOf(".") != -1) { + if (typeName.contains(".")) { add(typeName); return typeName; } else { @@ -63,7 +63,7 @@ public String toFullyQualifiedName(Type type, String typeName) { //System.err.println("0: " + typeName); return typeName; } else { - String className = (type.getPackageName() != "" ? type.getPackageName() + "." : "") + typeName; + String className = (!type.getPackageName().isEmpty() ? type.getPackageName() + "." : "") + typeName; if (containsKey(className)) { //System.err.println("3: " + typeName + ", " + className); put(typeName, className); diff --git a/src/main/java/org/codavaj/process/docparser/ParserUtils.java b/src/main/java/org/codavaj/process/docparser/ParserUtils.java index 5e0a6c1..0fc8b3b 100644 --- a/src/main/java/org/codavaj/process/docparser/ParserUtils.java +++ b/src/main/java/org/codavaj/process/docparser/ParserUtils.java @@ -21,6 +21,7 @@ import java.io.IOException; import java.io.InputStream; import java.net.URI; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; @@ -55,7 +56,6 @@ import org.dom4j.tree.DefaultText; import org.xml.sax.InputSource; import org.xml.sax.SAXException; -import vavix.io.Streams; import static com.rainerhahnekamp.sneakythrow.Sneaky.sneaked; @@ -706,7 +706,7 @@ protected void determineDetails(List allNodes, Function if (c.parseOn) { if (c.node.getNodeType() == Node.TEXT_NODE) { c.text += c.node.getStringValue(); - } else if ((c.node.getNodeType() == Node.ELEMENT_NODE) && "A".equals(c.node.getName()) && c.node.getText().length() > 1 && c.node.valueOf("@href").indexOf(c.node.getText()) != -1) { + } else if ((c.node.getNodeType() == Node.ELEMENT_NODE) && "A".equals(c.node.getName()) && c.node.getText().length() > 1 && c.node.valueOf("@href").contains(c.node.getText())) { c.text += javadocLinkToTypename(c.node.valueOf("@href")); } else if ((c.node.getNodeType() == Node.ELEMENT_NODE) && "A".equals(c.node.getName())) { c.text += convertNodesToString((Element) c.node); @@ -782,7 +782,7 @@ protected void determineFieldDetails(Type type, String text, String name, Elemen // enum constant ec.setComment(determineComment(type, commentNode)); } else { - Method m = type.lookupMethodByName(name, new ArrayList()); // annotation elements have no params + Method m = type.lookupMethodByName(name, new ArrayList<>()); // annotation elements have no params if ( m != null ) { // method @@ -1097,8 +1097,8 @@ private void determineMethodParameters(Type t, Method method, List paramli // logger.fine( paramNode.getNodeTypeName()+" "+paramNode.getStringValue() ); // need to combine method description into a single text which can then - // be parsed easily. TypeVariables tend to have length 1 ( E, V, K etc ) which can easily match one character of the link to the generic parent - if (paramNode.getNodeType() == Node.ELEMENT_NODE && "A".equals(paramNode.getName()) && paramNode.getText().length() > 1 && paramNode.valueOf("@href").indexOf(paramNode.getText()) != -1 ) { + // be parsed easily. TypeVariables tend to have length 1 ( E, V, K etc. ) which can easily match one character of the link to the generic parent + if (paramNode.getNodeType() == Node.ELEMENT_NODE && "A".equals(paramNode.getName()) && paramNode.getText().length() > 1 && paramNode.valueOf("@href").contains(paramNode.getText())) { // reference to type methodParams.append(javadocLinkToTypename(paramNode.valueOf("@href"))); } else if (paramNode.getNodeType() == Node.ELEMENT_NODE) { @@ -1166,7 +1166,7 @@ private Parameter determineParameter(Type t, String parameterText, boolean parse continue; } else if (word.contains("<")) { // parameterized type with type parameter arguments - p.setTypeArgumentList(word.substring(word.indexOf("<"), word.length())); + p.setTypeArgumentList(word.substring(word.indexOf("<"))); p.setType(fqnm.toFullyQualifiedName(t, word.substring(0, word.indexOf("<")))); } else { p.setType(fqnm.toFullyQualifiedName(t, word)); @@ -1254,7 +1254,7 @@ private String convertNodesToString(Element contentElement) { protected String convertNodesToString(Node paramNode) { // need to combine method description into a single text which can then // be parsed easily. If we link to another type rather than a generic type variable, the name of the link's text matches the classname - if (paramNode.getNodeType() == Node.ELEMENT_NODE && "A".equals(paramNode.getName()) && paramNode.getText().length() > 1 && paramNode.valueOf("@href").indexOf(paramNode.getText()) != -1) { + if (paramNode.getNodeType() == Node.ELEMENT_NODE && "A".equals(paramNode.getName()) && paramNode.getText().length() > 1 && paramNode.valueOf("@href").contains(paramNode.getText())) { // reference to type return javadocLinkToTypename(paramNode.valueOf("@href")); } else if (paramNode.getNodeType() == Node.ELEMENT_NODE) { @@ -1415,7 +1415,7 @@ protected String[] getElementsXpaths() { /** annotation elements. */ protected void determineElements(Type type, Document typeXml, String nameXpath) { - final String[] xpaths = getElementsXpaths(); + String[] xpaths = getElementsXpaths(); List methodList = typeXml.selectNodes(xpaths[0]); for (int i = 0; (methodList != null) && (i < methodList.size()); i++) { @@ -1873,7 +1873,7 @@ private static String fileSeparator(String dir) { } /** gets a class name index file name */ - private static String getFirstIndexFilePath(final String dir) { + private static String getFirstIndexFilePath(String dir) { ServiceLoader loader = ServiceLoader.load(Parser.class); for (Parser parser : loader) { String file = dir + fileSeparator(dir) + parser.getFirstIndexFileName(); @@ -1885,7 +1885,7 @@ private static String getFirstIndexFilePath(final String dir) { } /** factory */ - private static Parser getParser(final String version) { + private static Parser getParser(String version) { ServiceLoader loader = ServiceLoader.load(Parser.class); for (Parser parser : loader) { if (parser.isSuitableVersion(version)) { @@ -1996,6 +1996,10 @@ public static ParserUtils factory(String dir) throws IOException { } Document allClasses = parserUtil.loadHtmlAsDom(getInputSource(allClassesFilename)); +//String x = Paths.get(allClassesFilename).getFileName().toString(); +//BufferedWriter w = Files.newBufferedWriter(Paths.get("tmp/1.9.16", "/input-" + x)); +//w.write(prettyPrint(allClasses)); +//w.flush(); parserUtil.classes = parserUtil.getAllFqTypenames(allClasses); parserUtil.javadocDirName = dir; @@ -2205,7 +2209,7 @@ public FullyQualifiedNameMap getFullyQualifiedNameMap() { * @param doc source xml * @return formatted xml string */ - protected String prettyPrint(Document doc) { + protected static String prettyPrint(Document doc) { try { ByteArrayOutputStream html = new ByteArrayOutputStream(); OutputFormat outformat = OutputFormat.createPrettyPrint(); @@ -2215,7 +2219,7 @@ protected String prettyPrint(Document doc) { writer.write(doc); writer.flush(); - return html.toString("UTF-8"); + return html.toString(StandardCharsets.UTF_8); } catch (Exception e) { logger.log(Level.WARNING, "Unable to pretty print.", e); } diff --git a/src/main/java/org/codavaj/process/docparser/ParserUtils8.java b/src/main/java/org/codavaj/process/docparser/ParserUtils8.java index 53eaaec..3a7e2c6 100644 --- a/src/main/java/org/codavaj/process/docparser/ParserUtils8.java +++ b/src/main/java/org/codavaj/process/docparser/ParserUtils8.java @@ -12,7 +12,6 @@ import java.util.function.Function; import java.util.logging.Level; import java.util.logging.Logger; -import java.util.stream.Collectors; import org.codavaj.type.Type; import org.cyberneko.html.filters.ElementRemover; @@ -268,7 +267,7 @@ protected void extendedType(Type t, Document typeXml) { "DIV".equals(n.getName()) || n.getNodeType() == Node.TEXT_NODE && !n.getText().trim().replace("\r", "").isEmpty() || n.getNodeType() == Node.ENTITY_REFERENCE_NODE) - .collect(Collectors.toList()); + .toList(); StringBuilder combinedText = new StringBuilder(); for (Node n : nodes) { diff --git a/src/main/java/org/codavaj/process/docparser/UnresolvedExternalLinkException.java b/src/main/java/org/codavaj/process/docparser/UnresolvedExternalLinkException.java index 82d7d0f..50c763b 100644 --- a/src/main/java/org/codavaj/process/docparser/UnresolvedExternalLinkException.java +++ b/src/main/java/org/codavaj/process/docparser/UnresolvedExternalLinkException.java @@ -16,11 +16,15 @@ package org.codavaj.process.docparser; +import java.io.Serial; + + /** * Unresolved external references to javadocs prohibit correct * type name determination. */ public class UnresolvedExternalLinkException extends ParseException { + @Serial private static final long serialVersionUID = 6822744609916808575L; /** diff --git a/src/main/java/org/codavaj/process/loader/JarLoader.java b/src/main/java/org/codavaj/process/loader/JarLoader.java index 23c4a6a..a137ab4 100644 --- a/src/main/java/org/codavaj/process/loader/JarLoader.java +++ b/src/main/java/org/codavaj/process/loader/JarLoader.java @@ -42,7 +42,7 @@ public JarLoader() { } /** - * Process a jar file by listing it's contents and loading each + * Process a jar file by listing its contents and loading each * Class and Interface into a TypeFactory. * * @throws ProcessException failure to process. diff --git a/src/main/java/org/codavaj/process/search/SearchAlgorithm.java b/src/main/java/org/codavaj/process/search/SearchAlgorithm.java index 2abfe23..b28aeeb 100644 --- a/src/main/java/org/codavaj/process/search/SearchAlgorithm.java +++ b/src/main/java/org/codavaj/process/search/SearchAlgorithm.java @@ -43,9 +43,7 @@ private boolean matchAll( Package javadocPackage, Package jarPackage ) { List docsubPackages = javadocPackage.getPackages(); boolean matchesAllSubPackages = true; - for( int i = 0; i < docsubPackages.size(); i++) { - Package docsubPackage = docsubPackages.get(i); - + for (Package docsubPackage : docsubPackages) { if (!matchAny(docsubPackage, jarsubPackages)) { logger.info("Package " + docsubPackage.getName() + " doesn't match any sub packages of " + jarPackage.getName()); matchesAllSubPackages = false; @@ -57,9 +55,7 @@ private boolean matchAll( Package javadocPackage, Package jarPackage ) { } private boolean matchAny( Package javadocPackage, List jarPackages ) { - for( int i=0; i < jarPackages.size(); i++ ) { - Package jarPackage = jarPackages.get(i); - + for (Package jarPackage : jarPackages) { if (ctx.getMap(jarPackage) != null) { logger.info("Already mapped " + jarPackage.getName()); continue; diff --git a/src/main/java/org/codavaj/process/srcwriter/SrcWriter.java b/src/main/java/org/codavaj/process/srcwriter/SrcWriter.java index 59bfaa7..d672d60 100644 --- a/src/main/java/org/codavaj/process/srcwriter/SrcWriter.java +++ b/src/main/java/org/codavaj/process/srcwriter/SrcWriter.java @@ -71,7 +71,7 @@ public Void process() throws ProcessException { try { if (type.getEnclosingType() != null) { - continue; // dont write inner types into own files + continue; // don't write inner types into own files } String packageName = type.getPackage().getName(); diff --git a/src/main/java/org/codavaj/process/srcwriter/WriterUtils.java b/src/main/java/org/codavaj/process/srcwriter/WriterUtils.java index 93ab289..6208161 100644 --- a/src/main/java/org/codavaj/process/srcwriter/WriterUtils.java +++ b/src/main/java/org/codavaj/process/srcwriter/WriterUtils.java @@ -147,10 +147,10 @@ protected void printComment(List commentText, int indentation) throws IO w.write("/**"); printLineFeed(); - for (int i = 0; i < commentText.size(); i++) { + for (String s : commentText) { printIndentation(indentation); w.write(" * "); - w.write(commentText.get(i)); + w.write(s); printLineFeed(); } @@ -234,7 +234,7 @@ protected void print(Object value) } else if (value instanceof Long) { w.write("" + value + "l"); } else if (value instanceof Character) { - char c = ((Character)value).charValue(); + char c = (Character) value; w.write("(char)" + (int)c ); } else { w.write("" + value); diff --git a/src/main/java/org/codavaj/process/wget/LinkUtils.java b/src/main/java/org/codavaj/process/wget/LinkUtils.java index f30e8bc..faf00de 100644 --- a/src/main/java/org/codavaj/process/wget/LinkUtils.java +++ b/src/main/java/org/codavaj/process/wget/LinkUtils.java @@ -67,18 +67,18 @@ public String relativeUrl(String rootUrl, String url, String link) { return null; } - if (link.indexOf("#") != -1) { + if (link.contains("#")) { // java/awt/geom/RectangularShape.html#getCenterX() -> java/awt/geom/RectangularShape.html link = link.substring(0, link.indexOf("#")); } String path = ""; - //String basename = ""; +// String basename = ""; if (url.lastIndexOf(URL_SEPARATOR) != -1) { path = url.substring(0, url.lastIndexOf(URL_SEPARATOR) + 1); - //basename = url.substring(url.lastIndexOf(URL_SEPARATOR)+1); +// basename = url.substring(url.lastIndexOf(URL_SEPARATOR)+1); } // Basis for calculating a "normalized" URL for the link @@ -97,23 +97,21 @@ public String relativeUrl(String rootUrl, String url, String link) { return null; } - while (link.endsWith(URL_SEPARATOR)) { // strip trailing / + while (link.endsWith(URL_SEPARATOR)) { // strip trailing "/" link = link.substring(0, link.length() - 1); } - while (link.startsWith("." + URL_SEPARATOR)) { // strip leading ./ + while (link.startsWith("." + URL_SEPARATOR)) { // strip leading "./" link = link.substring(2); } // TODO - strip directories back off url for ../ - /* - info( "rooturl :" + rootUrl ); - info( "url :" + url ); - info( "path :" + path ); - info( "basename :" + basename); - info( " link :" + link); - */ +// info( "rooturl :" + rootUrl ); +// info( "url :" + url ); +// info( "path :" + path ); +// info( "basename :" + basename); +// info( " link :" + link); if (link.startsWith(path)) { // a String rel = link.substring(path.length()); @@ -121,15 +119,14 @@ public String relativeUrl(String rootUrl, String url, String link) { link = rel; } - if (link.startsWith("http") || link.startsWith("ftp") - || link.startsWith("email")) { + if (link.startsWith("http") || link.startsWith("ftp") || link.startsWith("email")) { // link is not relative logger.fine("link " + link + " is not relative - skipping."); return null; } - if (link.indexOf("../") != -1) { + if (link.contains("../")) { logger.fine("cannot handle relative links with ../ - " + link); return null; @@ -155,7 +152,7 @@ public String relativeDirectoryOfLink(String url) { return ""; } - if (url.indexOf(URL_SEPARATOR) != -1) { + if (url.contains(URL_SEPARATOR)) { return url.substring(0, url.lastIndexOf(URL_SEPARATOR) + 1); } @@ -174,9 +171,9 @@ public String basenameOfLink(String url) { return null; } - if (url.indexOf(URL_SEPARATOR) != -1) { - return url.substring(url.lastIndexOf(URL_SEPARATOR) + 1, - url.length()); + if (url.contains(URL_SEPARATOR)) { + return url.substring(url.lastIndexOf(URL_SEPARATOR) + 1 + ); } return url; diff --git a/src/main/java/org/codavaj/process/wget/Wget.java b/src/main/java/org/codavaj/process/wget/Wget.java index e3ca618..2ac9736 100644 --- a/src/main/java/org/codavaj/process/wget/Wget.java +++ b/src/main/java/org/codavaj/process/wget/Wget.java @@ -70,8 +70,7 @@ public Void process() throws ProcessException { javadocDir.mkdirs(); } if (!javadocDir.isDirectory()) { - throw new ProcessException("" + javadocDir - + " must be a directory."); + throw new ProcessException(javadocDir + " must be a directory."); } if (!rootUrl.startsWith("http://") && !rootUrl.startsWith("https://")) { @@ -111,8 +110,7 @@ private void getPage(WebConversation wc, Stack got, Stack fetch) got.push(relativePath); String url = rootUrl + relativePath; - notifyListeners(new ProgressEvent(got.size(), - got.size() + fetch.size(), url)); + notifyListeners(new ProgressEvent(got.size(), got.size() + fetch.size(), url)); try { WebResponse response = fetchPage(wc, url); @@ -137,8 +135,7 @@ private void getPage(WebConversation wc, Stack got, Stack fetch) HTMLElement[] frame = response.getElementsWithName(framename); - for (int j = 0; (frame.length != 0) && (j < frame.length); - j++) { + for (int j = 0; (frame.length != 0) && (j < frame.length); j++) { HTMLElement f = frame[j]; String src = f.getAttribute(HTTP_SRC_ATTRIBUTE); addRelativeUrl(url, src, got, fetch); @@ -218,7 +215,7 @@ private void saveContent(String relativePath, WebResponse response) throws Exception { logger.fine("saving " + relativePath); - // make sure the directory we want to write to exists + // make sure the directory we want to write to exist String directoryName = linkUtil.relativeDirectoryOfLink(relativePath); String fullDirName = javadocDirName + File.separator + directoryName; diff --git a/src/main/java/org/codavaj/type/EnumConst.java b/src/main/java/org/codavaj/type/EnumConst.java index eafc6fd..2eaae05 100644 --- a/src/main/java/org/codavaj/type/EnumConst.java +++ b/src/main/java/org/codavaj/type/EnumConst.java @@ -30,20 +30,12 @@ public class EnumConst implements Commentable { EnumConst() { } - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ + @Override public List getComment() { return comment; } - /** - * DOCUMENT ME! - * - * @param comment DOCUMENT ME! - */ + @Override public void setComment(List comment) { this.comment = comment; } @@ -66,7 +58,7 @@ public void setName(String name) { this.name = name; } - /* */ + @Override public String toString() { return name; } diff --git a/src/main/java/org/codavaj/type/Method.java b/src/main/java/org/codavaj/type/Method.java index de336dd..ab79024 100644 --- a/src/main/java/org/codavaj/type/Method.java +++ b/src/main/java/org/codavaj/type/Method.java @@ -173,9 +173,7 @@ public void setTypeParameters(String typeParameters) { public String getSignatureString() { StringBuilder sb = new StringBuilder(name); sb.append("("); - parameterList.forEach(p -> { - sb.append(p.getSignatureString()); - }); + parameterList.forEach(p -> sb.append(p.getSignatureString())); sb.append(")"); if (returnParameter != null) { // constructor diff --git a/src/main/java/org/codavaj/type/Package.java b/src/main/java/org/codavaj/type/Package.java index c796b8e..2c83c61 100644 --- a/src/main/java/org/codavaj/type/Package.java +++ b/src/main/java/org/codavaj/type/Package.java @@ -64,19 +64,15 @@ public List getPackages() { } void addType(Type type) { - if (types.get(type.getTypeName()) == null) { - types.put(type.getTypeName(), type); - } + types.putIfAbsent(type.getTypeName(), type); } void addPackage(Package pckg) { - if (packages.get(pckg.getName()) == null) { - packages.put(pckg.getName(), pckg); - } + packages.putIfAbsent(pckg.getName(), pckg); } String getParentPackageName() { - if (name.indexOf(".") != -1) { + if (name.contains(".")) { // there is a parent package if there is a package separator in the name return name.substring(0, name.lastIndexOf(".")); } diff --git a/src/main/java/org/codavaj/type/Type.java b/src/main/java/org/codavaj/type/Type.java index 1ae8477..f4eeda1 100644 --- a/src/main/java/org/codavaj/type/Type.java +++ b/src/main/java/org/codavaj/type/Type.java @@ -81,7 +81,7 @@ public String getShortName() { if (typeName != null) { if (typeName.lastIndexOf(".") != -1) { return typeName.substring(typeName.lastIndexOf(".") - + 1, typeName.length()); + + 1); } else { return typeName; } @@ -97,7 +97,7 @@ public String getShortName() { * @return the package name of the type, "" if in default package */ public String getPackageName() { - if ((typeName != null) && (typeName.indexOf(".") != -1)) { + if ((typeName != null) && (typeName.contains("."))) { return typeName.substring(0, typeName.lastIndexOf(".")); } @@ -135,7 +135,7 @@ public void setSuperType(String extendedType) { * @return the enclosing typename - a.b.D$E returns a.b.D */ public String getEnclosingType() { - if (typeName.indexOf("$") != -1) { + if (typeName.contains("$")) { // it is an inner class return typeName.substring(0, typeName.lastIndexOf("$")); } @@ -192,7 +192,7 @@ public Method createMethod() { Method method = new Method(); if (isInterface() || isAnnotation()) { - // interface methods are automatically abstract - and javadoc doesnt + // interface methods are automatically abstract - and javadoc doesn't // have this info method.setAbstract(true); } @@ -432,7 +432,7 @@ public String getTypeParameters() { /** */ public boolean isTypeParameter(String typeParameter) { - return typeParameters == null ? false : Arrays.asList(typeParameters.split("[\\s,<>]")).stream().anyMatch(tp -> typeParameter.equals(tp)); + return typeParameters == null ? false : Arrays.stream(typeParameters.split("[\\s,<>]")).anyMatch(typeParameter::equals); } /** @@ -509,11 +509,7 @@ public static String getSignatureString(String type, int arrayDegree) { /** */ private static String getPrefix(int degree, String prefix) { if (degree > 0) { - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < degree; i++) { - sb.append("["); - } - return prefix + sb.toString(); + return prefix + "[".repeat(degree); } else { return prefix; } diff --git a/src/main/java/org/codavaj/type/TypeFactory.java b/src/main/java/org/codavaj/type/TypeFactory.java index 31a3798..97f7fd0 100644 --- a/src/main/java/org/codavaj/type/TypeFactory.java +++ b/src/main/java/org/codavaj/type/TypeFactory.java @@ -81,7 +81,7 @@ private Package linkPackage(Type type) { } /** - * Create a Type given it's name in the TypeFactory. The Type name + * Create a Type given its name in the TypeFactory. The Type name * should use '.' for the package separator and '$' for inner class * separation. The Type is automatically linked to it's containing * Package. @@ -157,7 +157,7 @@ public Package getDefaultPackage() { */ public void link() { // need to go through each type, determine if it is an inner type and - // if it is, add it to it's outer type + // if it is, add it to its outer type List allTypes = getTypes(); for (int i = 0; (allTypes != null) && (i < allTypes.size()); i++) { @@ -203,7 +203,7 @@ public static TypeFactory getInstance(JarFile jar) { String filename = entry.getName(); String classname = filename.replace('/','.'); - if (classname.indexOf(".class") == -1) { + if (!classname.contains(".class")) { continue; // not a .class file } diff --git a/src/main/java/org/codavaj/type/reflection/ReflectionUtils.java b/src/main/java/org/codavaj/type/reflection/ReflectionUtils.java index 1c90497..c1465fd 100644 --- a/src/main/java/org/codavaj/type/reflection/ReflectionUtils.java +++ b/src/main/java/org/codavaj/type/reflection/ReflectionUtils.java @@ -27,6 +27,7 @@ * DOCUMENT ME! */ public class ReflectionUtils { + /** * DOCUMENT ME! * @@ -54,8 +55,7 @@ public static Type getType(Class clazz) { Class[] implementsList = clazz.getInterfaces(); - for (int i = 0; - (implementsList != null) && (i < implementsList.length); i++) { + for (int i = 0; (implementsList != null) && (i < implementsList.length); i++) { t.addImplementsType(getTypeName(implementsList[i].getName())); } @@ -119,8 +119,6 @@ private static void getField(Type t, java.lang.reflect.Field reflectField) { f.setValue(reflectField.get(null)); } catch (IllegalAccessException iax) { } - - ; } } @@ -141,8 +139,7 @@ private static void getMethod(Type t, java.lang.reflect.Method reflectMethod) { setModifiers(m, reflectMethod.getModifiers()); setMethodParameters(reflectMethod.getParameterTypes(), m); setThrowsList(reflectMethod.getExceptionTypes(), m); - m.setReturnParameter(getParameter(reflectMethod.getReturnType(), - "return")); + m.setReturnParameter(getParameter(reflectMethod.getReturnType(), "return")); } /** @@ -163,7 +160,7 @@ private static Parameter getParameter(Class parameter, String name) { p.setType(getTypeName(parameter.getName())); - // reflection doesnt have the parameter name + // reflection doesn't have the parameter name p.setName(name); return p; @@ -203,12 +200,10 @@ private static void setMethodParameters(Class[] parameters, Method m) { */ private static void setModifiers(Modifiable m, int reflectionModifiers) { m.setPrivate(java.lang.reflect.Modifier.isPrivate(reflectionModifiers)); - m.setProtected(java.lang.reflect.Modifier.isProtected( - reflectionModifiers)); + m.setProtected(java.lang.reflect.Modifier.isProtected(reflectionModifiers)); m.setPublic(java.lang.reflect.Modifier.isPublic(reflectionModifiers)); m.setAbstract(java.lang.reflect.Modifier.isAbstract(reflectionModifiers)); - m.setInterface(java.lang.reflect.Modifier.isInterface( - reflectionModifiers)); + m.setInterface(java.lang.reflect.Modifier.isInterface(reflectionModifiers)); m.setFinal(java.lang.reflect.Modifier.isFinal(reflectionModifiers)); m.setStatic(java.lang.reflect.Modifier.isStatic(reflectionModifiers)); m.setStrictFp(java.lang.reflect.Modifier.isStrict(reflectionModifiers)); @@ -223,7 +218,7 @@ private static void setModifiers(Modifiable m, int reflectionModifiers) { * @return true if the classname represents an array. */ private static boolean isArray(String classname) { - return classname.indexOf("[") != -1; + return classname.contains("["); } /** @@ -258,35 +253,25 @@ private static String getTypeName(String classname) { return classname; } - String strippedClassname = classname.substring(classname.lastIndexOf( - "[") + 1); + String strippedClassname = classname.substring(classname.lastIndexOf("[") + 1); switch (strippedClassname.charAt(0)) { case 'L': - return strippedClassname.substring(1, strippedClassname.length() - - 1); // cut ; off end - + return strippedClassname.substring(1, strippedClassname.length() - 1); // cut ; off end case 'Z': return "boolean"; - case 'B': return "byte"; - case 'C': return "char"; - case 'D': return "double"; - case 'F': return "float"; - case 'I': return "int"; - case 'J': return "long"; - case 'S': return "short"; } diff --git a/src/main/java/org/codavaj/type/reflection/SingleJarClassLoader.java b/src/main/java/org/codavaj/type/reflection/SingleJarClassLoader.java index 812ebd3..5848357 100644 --- a/src/main/java/org/codavaj/type/reflection/SingleJarClassLoader.java +++ b/src/main/java/org/codavaj/type/reflection/SingleJarClassLoader.java @@ -8,7 +8,8 @@ import java.util.zip.ZipEntry; public class SingleJarClassLoader extends ClassLoader { - JarFile jarFile = null; + + JarFile jarFile; public SingleJarClassLoader(JarFile jarFile) { this.jarFile = jarFile; @@ -19,6 +20,7 @@ public SingleJarClassLoader(ClassLoader arg0, JarFile jarFile) { this.jarFile = jarFile; } + @Override protected Class findClass(String name) throws ClassNotFoundException { System.out.println("findclass: " + name); diff --git a/src/test/java/Test02.java b/src/test/java/commentator/JavaParserCommentator.java similarity index 60% rename from src/test/java/Test02.java rename to src/test/java/commentator/JavaParserCommentator.java index 48bb12b..1e5436a 100644 --- a/src/test/java/Test02.java +++ b/src/test/java/commentator/JavaParserCommentator.java @@ -4,10 +4,13 @@ * Programmed by Naohide Sano */ +package commentator; + import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import org.codavaj.process.docparser.DocParser; @@ -25,10 +28,11 @@ import com.github.javaparser.ast.visitor.VoidVisitorAdapter; import com.github.javaparser.utils.Pair; import com.google.common.collect.Streams; +import vavi.util.Debug; /** - * Test02. using java parser (replace comment, refactoring parameter name: failed) + * commentator using java parser (replace comment, refactoring parameter name: failed) * *
  • java parser doesn't handle fully qualified name *
  • refactoring is not easy @@ -36,12 +40,13 @@ * @author Naohide Sano (umjammer) * @version 0.00 2019/05/10 umjammer initial version
    */ -public class Test02 { +public class JavaParserCommentator { /** */ public TypeFactory analyze(String javadocdir, List externalLinks) throws Exception { +Debug.println("analyze start: " + packageFilter); DocParser dp = new DocParser(); -// dp.setJavadocClassName("quicktime\\.[A-Z]\\w+$"); + dp.setJavadocClassName(packageFilter + "(\\.[\\w]+)*\\.[A-Z]\\w+$"); dp.setJavadocDirName(javadocdir); dp.setExternalLinks(externalLinks); dp.addProgressListener(System.err::println); @@ -49,22 +54,31 @@ public TypeFactory analyze(String javadocdir, List externalLinks) throws return dp.process(); } + /** regex */ + String packageFilter; + /** - * - * @param args + * + * @param args 0: javadocDir, 1: externalLink, 2: sourceDir, 3: outputDir */ public static void main(String[] args) throws Exception { +Debug.println("JavaParserCommentator: " + args[0]); + JavaParserCommentator app = new JavaParserCommentator(); + app.packageFilter = args[4]; + app.exec(args[0], args[1], args[2], args[3]); + } - String javadocDir = args[0]; - String externalLink = args[1]; - String sourceDir = args[2]; - String outputDir = args[3]; - - List el = new ArrayList<>(); - el.add(externalLink); + /** */ + void exec(String javadocDir, String externalLink, String sourceDir, String outputDir) throws Exception { + List el; + if (externalLink != null && !externalLink.isEmpty()) { + el = new ArrayList<>(); + el.add(externalLink); + } else { + el = Collections.emptyList(); + } - Test02 app = new Test02(); - TypeFactory tf = app.analyze(javadocDir, el); + TypeFactory tf = analyze(javadocDir, el); for (Type type : tf.getTypes()) { @@ -87,16 +101,14 @@ public void visit(ClassOrInterfaceDeclaration n, Void arg) { // System.out.println(v); // }); - type.getType(n.getNameAsString()).ifPresent(t -> { - t.getCommentAsString().ifPresent(s -> { + type.getType(n.getNameAsString()).ifPresent(t -> t.getCommentAsString().ifPresent(s -> { // System.out.println("--"); // System.out.println("NEW:"); // System.out.println(s); - n.setComment(new JavadocComment(t.getInnerCommentAsString().get())); + n.setComment(new JavadocComment(t.getInnerCommentAsString().get())); System.err.println("RC: " + "CLASS: " + n.getNameAsString()); - }); - }); + })); super.visit(n, arg); } @@ -110,19 +122,15 @@ public void visit(FieldDeclaration n, Void arg) { // System.out.println(w); // }); - if (ClassOrInterfaceDeclaration.class.isInstance(n.getParentNode().get())) { - type.getType(ClassOrInterfaceDeclaration.class.cast(n.getParentNode().get()).getNameAsString()).ifPresent(t -> { - t.getField(v.getNameAsString()).ifPresent(f -> { - f.getCommentAsString().ifPresent(s -> { + if (n.getParentNode().get() instanceof ClassOrInterfaceDeclaration) { + type.getType(((ClassOrInterfaceDeclaration) n.getParentNode().get()).getNameAsString()).flatMap(t -> t.getField(v.getNameAsString())).ifPresent(f -> f.getCommentAsString().ifPresent(s -> { // System.out.println("--"); // System.out.println("NEW:"); // System.out.println(s); - n.setComment(new JavadocComment(f.getInnerCommentAsString().get())); -System.err.println("RC: " + "FIELD: " + v.getNameAsString()); - }); - }); - }); + n.setComment(new JavadocComment(f.getInnerCommentAsString().get())); + System.err.println("RC: " + "FIELD: " + v.getNameAsString()); + })); } else { System.err.println("IG: " + "FIELD: " + v.getNameAsString()); } @@ -140,26 +148,23 @@ public void visit(MethodDeclaration n, Void arg) { // System.out.println(v); // }); - if (ClassOrInterfaceDeclaration.class.isInstance(n.getParentNode().get())) { - type.getType(ClassOrInterfaceDeclaration.class.cast(n.getParentNode().get()).getNameAsString()).ifPresent(t -> { - - t.getMethod(getSignatureString(n)).ifPresent(m -> { - m.getCommentAsString().ifPresent(s -> { + if (n.getParentNode().get() instanceof ClassOrInterfaceDeclaration) { + type.getType(((ClassOrInterfaceDeclaration) n.getParentNode().get()).getNameAsString()).flatMap(t -> t.getMethod(getSignatureString(n))).ifPresent(m -> { + m.getCommentAsString().ifPresent(s -> { // System.out.println("--"); // System.out.println("NEW:"); // System.out.println(s); - n.setComment(new JavadocComment(m.getInnerCommentAsString().get())); -System.err.println("RC: " + "METHOD: " + getSignatureString(n)); - }); + n.setComment(new JavadocComment(m.getInnerCommentAsString().get())); + System.err.println("RC: " + "METHOD: " + getSignatureString(n)); + }); - // fix parameter names (only names at declaration) - Streams.zip(m.getParameterList().stream(), n.getParameters().stream(), - (a, b) -> new Pair<>(a, b) - ).filter(p -> !p.a.getName().equals(p.b.getNameAsString())).forEach(p -> { -System.err.println("RN: " + "PARAM: " + p.b.getNameAsString() + " -> " + p.a.getName()); + // fix parameter names (only names at declaration) + Streams.zip(m.getParameterList().stream(), n.getParameters().stream(), + Pair::new + ).filter(p -> !p.a.getName().equals(p.b.getNameAsString())).forEach(p -> { + System.err.println("RN: " + "PARAM: " + p.b.getNameAsString() + " -> " + p.a.getName()); // p.b.setName(p.a.getName()); // TODO currently OFF - }); }); }); } else { @@ -172,23 +177,20 @@ public void visit(MethodDeclaration n, Void arg) { @Override public void visit(ConstructorDeclaration n, Void arg) { - if (ClassOrInterfaceDeclaration.class.isInstance(n.getParentNode().get())) { - type.getType(ClassOrInterfaceDeclaration.class.cast(n.getParentNode().get()).getNameAsString()).ifPresent(t -> { - - t.getMethod(getSignatureString(n)).ifPresent(m -> { - m.getCommentAsString().ifPresent(s -> { + if (n.getParentNode().get() instanceof ClassOrInterfaceDeclaration) { + type.getType(((ClassOrInterfaceDeclaration) n.getParentNode().get()).getNameAsString()).flatMap(t -> t.getMethod(getSignatureString(n))).ifPresent(m -> { + m.getCommentAsString().ifPresent(s -> { - n.setComment(new JavadocComment(m.getInnerCommentAsString().get())); -System.err.println("RC: " + "CONSTRUCTOR: " + getSignatureString(n)); - }); + n.setComment(new JavadocComment(m.getInnerCommentAsString().get())); + System.err.println("RC: " + "CONSTRUCTOR: " + getSignatureString(n)); + }); - // fix parameter names (only names at declaration) - Streams.zip(m.getParameterList().stream(), n.getParameters().stream(), - (a, b) -> new Pair<>(a, b) - ).filter(p -> !p.a.getName().equals(p.b.getNameAsString())).forEach(p -> { -System.err.println("RN: " + "PARAM: " + p.b.getNameAsString() + " -> " + p.a.getName()); + // fix parameter names (only names at declaration) + Streams.zip(m.getParameterList().stream(), n.getParameters().stream(), + Pair::new + ).filter(p -> !p.a.getName().equals(p.b.getNameAsString())).forEach(p -> { + System.err.println("RN: " + "PARAM: " + p.b.getNameAsString() + " -> " + p.a.getName()); // p.b.setName(p.a.getName()); // TODO - }); }); }); } else { @@ -202,9 +204,7 @@ public void visit(ConstructorDeclaration n, Void arg) { String getSignatureString(MethodDeclaration n) { StringBuilder sb = new StringBuilder(n.getNameAsString()); sb.append("("); - n.getParameters().forEach(p -> { - sb.append(Type.getSignatureString(tf.getFullyQualifiedName(p.getType().toString()))); - }); + n.getParameters().forEach(p -> sb.append(Type.getSignatureString(tf.getFullyQualifiedName(p.getType().toString())))); sb.append(")"); //System.err.println("RT: " + n.getType()); sb.append(Type.getSignatureString(tf.getFullyQualifiedName(n.getType().toString()))); @@ -216,9 +216,7 @@ String getSignatureString(MethodDeclaration n) { String getSignatureString(ConstructorDeclaration n) { StringBuilder sb = new StringBuilder(n.getNameAsString()); sb.append("("); - n.getParameters().forEach(p -> { - sb.append(Type.getSignatureString(tf.getFullyQualifiedName(p.getType().toString()))); - }); + n.getParameters().forEach(p -> sb.append(Type.getSignatureString(tf.getFullyQualifiedName(p.getType().toString())))); sb.append(")"); //System.err.println("SG: " + sb.toString()); return sb.toString(); diff --git a/src/test/java/Test01.java b/src/test/java/commentator/JavaParserCommentatorPrototype.java similarity index 61% rename from src/test/java/Test01.java rename to src/test/java/commentator/JavaParserCommentatorPrototype.java index 27ac82b..3849025 100644 --- a/src/test/java/Test01.java +++ b/src/test/java/commentator/JavaParserCommentatorPrototype.java @@ -4,6 +4,8 @@ * Programmed by Naohide Sano */ +package commentator; + import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -27,12 +29,12 @@ /** - * Test01. using java parser (replace comment) + * commentator prototype using java parser (replace comment) * * @author Naohide Sano (umjammer) * @version 0.00 2019/05/10 umjammer initial version
    */ -public class Test01 { +public class JavaParserCommentatorPrototype { /** * Derive a reflection-like API from a javadoc source tree. Resolve any type names @@ -57,7 +59,7 @@ public TypeFactory analyze(String javadocdir, List externalLinks) throws /** * - * @param args + * @param args 0: javadocDir, 1: externalLink, 2: sourceDir, 3: outputDir */ public static void main(String[] args) throws Exception { @@ -69,7 +71,7 @@ public static void main(String[] args) throws Exception { List el = new ArrayList<>(); el.add(externalLink); - Test01 app = new Test01(); + JavaParserCommentatorPrototype app = new JavaParserCommentatorPrototype(); TypeFactory tf = app.analyze(javadocDir, el); for (Type type : tf.getTypes()) { @@ -93,16 +95,14 @@ public void visit(ClassOrInterfaceDeclaration n, Void arg) { // System.out.println(v); // }); - type.getType(n.getNameAsString()).ifPresent(t -> { - t.getCommentAsString().ifPresent(s -> { + type.getType(n.getNameAsString()).ifPresent(t -> t.getCommentAsString().ifPresent(s -> { // System.out.println("--"); // System.out.println("NEW:"); // System.out.println(s); - n.setComment(new JavadocComment(t.getInnerCommentAsString().get())); + n.setComment(new JavadocComment(t.getInnerCommentAsString().get())); System.err.println("RC: " + "CLASS: " + n.getNameAsString()); - }); - }); + })); super.visit(n, arg); } @@ -116,33 +116,25 @@ public void visit(FieldDeclaration n, Void arg) { // System.out.println(w); // }); - if (ClassOrInterfaceDeclaration.class.isInstance(n.getParentNode().get())) { - type.getType(ClassOrInterfaceDeclaration.class.cast(n.getParentNode().get()).getNameAsString()).ifPresent(t -> { - t.getField(v.getNameAsString()).ifPresent(f -> { - f.getCommentAsString().ifPresent(s -> { + if (n.getParentNode().get() instanceof ClassOrInterfaceDeclaration) { + type.getType(((ClassOrInterfaceDeclaration) n.getParentNode().get()).getNameAsString()).flatMap(t -> t.getField(v.getNameAsString())).ifPresent(f -> f.getCommentAsString().ifPresent(s -> { // System.out.println("--"); // System.out.println("NEW:"); // System.out.println(s); - n.setComment(new JavadocComment(f.getInnerCommentAsString().get())); -System.err.println("RC: " + "FIELD: " + v.getName()); - }); - }); - }); - } else if (EnumDeclaration.class.isInstance(n.getParentNode().get())) { + n.setComment(new JavadocComment(f.getInnerCommentAsString().get())); + System.err.println("RC: " + "FIELD: " + v.getName()); + })); + } else if (n.getParentNode().get() instanceof EnumDeclaration) { - type.getType(EnumDeclaration.class.cast(n.getParentNode().get()).getNameAsString()).ifPresent(t -> { - t.getField(v.getNameAsString()).ifPresent(f -> { - f.getCommentAsString().ifPresent(s -> { + type.getType(((EnumDeclaration) n.getParentNode().get()).getNameAsString()).flatMap(t -> t.getField(v.getNameAsString())).ifPresent(f -> f.getCommentAsString().ifPresent(s -> { // System.out.println("--"); // System.out.println("NEW:"); // System.out.println(s); - n.setComment(new JavadocComment(f.getInnerCommentAsString().get())); -System.err.println("RC: " + "ENUM: " + v.getName()); - }); - }); - }); + n.setComment(new JavadocComment(f.getInnerCommentAsString().get())); + System.err.println("RC: " + "ENUM: " + v.getName()); + })); } } @@ -158,34 +150,24 @@ public void visit(MethodDeclaration n, Void arg) { // System.out.println(v); // }); - if (ClassOrInterfaceDeclaration.class.isInstance(n.getParentNode().get())) { - type.getType(ClassOrInterfaceDeclaration.class.cast(n.getParentNode().get()).getNameAsString()).ifPresent(t -> { - - t.getMethod(getSignatureString(n)).ifPresent(m -> { - m.getCommentAsString().ifPresent(s -> { + if (n.getParentNode().get() instanceof ClassOrInterfaceDeclaration) { + type.getType(((ClassOrInterfaceDeclaration) n.getParentNode().get()).getNameAsString()).flatMap(t -> t.getMethod(getSignatureString(n))).ifPresent(m -> m.getCommentAsString().ifPresent(s -> { // System.out.println("--"); // System.out.println("NEW:"); // System.out.println(s); - n.setComment(new JavadocComment(m.getInnerCommentAsString().get())); -System.err.println("RC: " + "METHOD: " + getSignatureString(n)); - }); - }); - }); - } else if (EnumDeclaration.class.isInstance(n.getParentNode().get())) { - type.getType(EnumDeclaration.class.cast(n.getParentNode().get()).getNameAsString()).ifPresent(t -> { - - t.getMethod(getSignatureString(n)).ifPresent(m -> { - m.getCommentAsString().ifPresent(s -> { + n.setComment(new JavadocComment(m.getInnerCommentAsString().get())); + System.err.println("RC: " + "METHOD: " + getSignatureString(n)); + })); + } else if (n.getParentNode().get() instanceof EnumDeclaration) { + type.getType(((EnumDeclaration) n.getParentNode().get()).getNameAsString()).flatMap(t -> t.getMethod(getSignatureString(n))).ifPresent(m -> m.getCommentAsString().ifPresent(s -> { // System.out.println("--"); // System.out.println("NEW:"); // System.out.println(s); - n.setComment(new JavadocComment(m.getInnerCommentAsString().get())); -System.err.println("RC: " + "METHOD: " + getSignatureString(n)); - }); - }); - }); + n.setComment(new JavadocComment(m.getInnerCommentAsString().get())); + System.err.println("RC: " + "METHOD: " + getSignatureString(n)); + })); } super.visit(n, arg); @@ -200,34 +182,24 @@ public void visit(ConstructorDeclaration n, Void arg) { // System.out.println(v); // }); - if (ClassOrInterfaceDeclaration.class.isInstance(n.getParentNode().get())) { - type.getType(ClassOrInterfaceDeclaration.class.cast(n.getParentNode().get()).getNameAsString()).ifPresent(t -> { - - t.getMethod(getSignatureString(n)).ifPresent(m -> { - m.getCommentAsString().ifPresent(s -> { + if (n.getParentNode().get() instanceof ClassOrInterfaceDeclaration) { + type.getType(((ClassOrInterfaceDeclaration) n.getParentNode().get()).getNameAsString()).flatMap(t -> t.getMethod(getSignatureString(n))).ifPresent(m -> m.getCommentAsString().ifPresent(s -> { // System.out.println("--"); // System.out.println("NEW:"); // System.out.println(s); - n.setComment(new JavadocComment(m.getInnerCommentAsString().get())); -System.err.println("RC: " + "CONSTRUCTOR: " + getSignatureString(n)); - }); - }); - }); - } else if (EnumDeclaration.class.isInstance(n.getParentNode().get())) { - type.getType(EnumDeclaration.class.cast(n.getParentNode().get()).getNameAsString()).ifPresent(t -> { - - t.getMethod(getSignatureString(n)).ifPresent(m -> { - m.getCommentAsString().ifPresent(s -> { + n.setComment(new JavadocComment(m.getInnerCommentAsString().get())); + System.err.println("RC: " + "CONSTRUCTOR: " + getSignatureString(n)); + })); + } else if (n.getParentNode().get() instanceof EnumDeclaration) { + type.getType(((EnumDeclaration) n.getParentNode().get()).getNameAsString()).flatMap(t -> t.getMethod(getSignatureString(n))).ifPresent(m -> m.getCommentAsString().ifPresent(s -> { // System.out.println("--"); // System.out.println("NEW:"); // System.out.println(s); - n.setComment(new JavadocComment(m.getInnerCommentAsString().get())); -System.err.println("RC: " + "CONSTRUCTOR: " + getSignatureString(n)); - }); - }); - }); + n.setComment(new JavadocComment(m.getInnerCommentAsString().get())); + System.err.println("RC: " + "CONSTRUCTOR: " + getSignatureString(n)); + })); } super.visit(n, arg); @@ -237,9 +209,7 @@ public void visit(ConstructorDeclaration n, Void arg) { String getSignatureString(MethodDeclaration n) { StringBuilder sb = new StringBuilder(n.getNameAsString()); sb.append("("); - n.getParameters().forEach(p -> { - sb.append(Type.getSignatureString(tf.getFullyQualifiedName(p.getType().toString()))); - }); + n.getParameters().forEach(p -> sb.append(Type.getSignatureString(tf.getFullyQualifiedName(p.getType().toString())))); sb.append(")"); sb.append(Type.getSignatureString(tf.getFullyQualifiedName(n.getType().toString()))); return sb.toString(); @@ -249,9 +219,7 @@ String getSignatureString(MethodDeclaration n) { String getSignatureString(ConstructorDeclaration n) { StringBuilder sb = new StringBuilder(n.getNameAsString()); sb.append("("); - n.getParameters().forEach(p -> { - sb.append(Type.getSignatureString(tf.getFullyQualifiedName(p.getType().toString()))); - }); + n.getParameters().forEach(p -> sb.append(Type.getSignatureString(tf.getFullyQualifiedName(p.getType().toString())))); sb.append(")"); return sb.toString(); } diff --git a/src/test/java/Test04.java b/src/test/java/commentator/JdtCommentator.java similarity index 70% rename from src/test/java/Test04.java rename to src/test/java/commentator/JdtCommentator.java index c9dda9f..288f5e6 100644 --- a/src/test/java/Test04.java +++ b/src/test/java/commentator/JdtCommentator.java @@ -4,11 +4,14 @@ * Programmed by Naohide Sano */ +package commentator; + import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.List; import org.antlr.v4.runtime.misc.Pair; @@ -32,20 +35,22 @@ import org.eclipse.text.edits.TextEdit; import com.google.common.collect.Streams; +import vavi.util.Debug; /** - * Test04. using eclipse jdt (replace comment, refactoring parameter name: failed) + * commentator using eclipse jdt (replace comment, refactoring parameter name: failed) * * @author Naohide Sano (umjammer) * @version 0.00 2019/05/10 umjammer initial version
    */ -public class Test04 { +public class JdtCommentator { /** */ public TypeFactory analyze(String javadocdir, List externalLinks) throws Exception { +Debug.println("analyze start: " + packageFilter); DocParser dp = new DocParser(); - dp.setJavadocClassName("quicktime\\.[A-Z]\\w+$"); + dp.setJavadocClassName(packageFilter + "(\\.[\\w]+)*\\.[A-Z]\\w+$"); dp.setJavadocDirName(javadocdir); dp.setExternalLinks(externalLinks); dp.addProgressListener(System.err::println); @@ -53,22 +58,31 @@ public TypeFactory analyze(String javadocdir, List externalLinks) throws return dp.process(); } + /** regex */ + String packageFilter; + /** - * - * @param args + * + * @param args 0: javadocDir, 1: externalLink, 2: sourceDir, 3: outputDir */ public static void main(String[] args) throws Exception { +Debug.println("JdtCommentator: " + args[0]); + JdtCommentator app = new JdtCommentator(); + app.packageFilter = args[4]; + app.exec(args[0], args[1], args[2], args[3]); + } - String javadocDir = args[0]; - String externalLink = args[1]; - String sourceDir = args[2]; - String outputDir = args[3]; - - List el = new ArrayList<>(); - el.add(externalLink); + /** */ + void exec(String javadocDir, String externalLink, String sourceDir, String outputDir) throws Exception { + List el; + if (externalLink != null && !externalLink.isEmpty()) { + el = new ArrayList<>(); + el.add(externalLink); + } else { + el = Collections.emptyList(); + } - Test04 app = new Test04(); - TypeFactory tf = app.analyze(javadocDir, el); + TypeFactory tf = analyze(javadocDir, el); for (Type type : tf.getTypes()) { @@ -79,7 +93,7 @@ public static void main(String[] args) throws Exception { continue; } - ASTParser parser = ASTParser.newParser(AST.JLS11); + ASTParser parser = ASTParser.newParser(AST.JLS17); String sourceString = new String(Files.readAllBytes(sourcePath)); parser.setSource(sourceString.toCharArray()); CompilationUnit unit = (CompilationUnit) parser.createAST(new NullProgressMonitor()); @@ -97,16 +111,14 @@ public boolean visit(TypeDeclaration n) { // System.out.println(v); // }); - type.getType(n.getName().getIdentifier()).ifPresent(t -> { - t.getCommentAsString().ifPresent(s -> { + type.getType(n.getName().getIdentifier()).ifPresent(t -> t.getCommentAsString().ifPresent(s -> { // System.out.println("--"); // System.out.println("NEW:"); // System.out.println(s); - n.setJavadoc(getJavadoc(t.getInnerCommentAsString().get())); + n.setJavadoc(getJavadoc(t.getInnerCommentAsString().get())); System.err.println("RC: " + "CLASS: " + n.getName()); - }); - }); + })); return true; } @@ -117,18 +129,14 @@ public boolean visit(FieldDeclaration n) { VariableDeclarationFragment v = (VariableDeclarationFragment) o; if (n.getParent() instanceof TypeDeclaration) { - type.getType(((TypeDeclaration) n.getParent()).getName().getIdentifier()).ifPresent(t -> { - t.getField(v.getName().toString()).ifPresent(f -> { - f.getCommentAsString().ifPresent(s -> { + type.getType(((TypeDeclaration) n.getParent()).getName().getIdentifier()).flatMap(t -> t.getField(v.getName().toString())).ifPresent(f -> f.getCommentAsString().ifPresent(s -> { // System.out.println("--"); // System.out.println("NEW:"); // System.out.println(s); - n.setJavadoc(getJavadoc(f.getInnerCommentAsString().get())); -System.err.println("RC: " + "FIELD: " + v.getName()); - }); - }); - }); + n.setJavadoc(getJavadoc(f.getInnerCommentAsString().get())); + System.err.println("RC: " + "FIELD: " + v.getName()); + })); } else { System.err.println("IG: " + "FIELD: " + v.getName()); } @@ -138,6 +146,7 @@ public boolean visit(FieldDeclaration n) { } // TODO native not comes + @SuppressWarnings("unchecked") @Override public boolean visit(MethodDeclaration n) { // System.out.println("----"); @@ -148,26 +157,21 @@ public boolean visit(MethodDeclaration n) { // }); if (n.getParent() instanceof TypeDeclaration) { - type.getType(((TypeDeclaration) n.getParent()).getName().getIdentifier()).ifPresent(t -> { - - t.getMethod(getSignatureString(n)).ifPresent(m -> { - m.getCommentAsString().ifPresent(s -> { + type.getType(((TypeDeclaration) n.getParent()).getName().getIdentifier()).flatMap(t -> t.getMethod(getSignatureString(n))).ifPresent(m -> { + m.getCommentAsString().ifPresent(s -> { // System.out.println("--"); // System.out.println("NEW:"); // System.out.println(s); - n.setJavadoc(getJavadoc(m.getInnerCommentAsString().get())); -System.err.println("RC: " + "METHOD: " + getSignatureString(n)); - }); - - Streams.zip(m.getParameterList().stream(), ((List) n.parameters()).stream(), - (a, b) -> new Pair<>(a, b) - ).filter(p -> { - return !p.a.getName().equals(p.b.getName().toString()); - }).forEach(p -> { -System.err.println("RN: " + "PARAM: " + p.b.getName() + " -> " + p.a.getName()); - p.b.setName(ast.newSimpleName(p.a.getName())); // TODO this is not refactoring - }); + n.setJavadoc(getJavadoc(m.getInnerCommentAsString().get())); + System.err.println("RC: " + "METHOD: " + getSignatureString(n)); + }); + + Streams.zip(m.getParameterList().stream(), ((List) n.parameters()).stream(), + Pair::new + ).filter(p -> !p.a.getName().equals(p.b.getName().toString())).forEach(p -> { + System.err.println("RN: " + "PARAM: " + p.b.getName() + " -> " + p.a.getName()); + p.b.setName(ast.newSimpleName(p.a.getName())); // TODO this is not refactoring }); }); } else { @@ -178,6 +182,7 @@ public boolean visit(MethodDeclaration n) { } /** TODO \n is not handled well */ + @SuppressWarnings("unchecked") Javadoc getJavadoc(String t) { Javadoc c = ast.newJavadoc(); List tags = c.tags(); @@ -195,12 +200,11 @@ Javadoc getJavadoc(String t) { } /** */ + @SuppressWarnings("unchecked") String getSignatureString(MethodDeclaration n) { StringBuilder sb = new StringBuilder(n.getName().getIdentifier()); sb.append("("); - n.parameters().forEach(p -> { - sb.append(Type.getSignatureString(tf.getFullyQualifiedName(SingleVariableDeclaration.class.cast(p).getType().toString()))); - }); + n.parameters().forEach(p -> sb.append(Type.getSignatureString(tf.getFullyQualifiedName(SingleVariableDeclaration.class.cast(p).getType().toString())))); sb.append(")"); if (n.getReturnType2() != null) { // constructor sb.append(Type.getSignatureString(tf.getFullyQualifiedName(n.getReturnType2().toString()))); diff --git a/src/test/java/Test03.java b/src/test/java/commentator/RewriteCommentator.java similarity index 57% rename from src/test/java/Test03.java rename to src/test/java/commentator/RewriteCommentator.java index 5ee7fd9..0a4b471 100644 --- a/src/test/java/Test03.java +++ b/src/test/java/commentator/RewriteCommentator.java @@ -4,10 +4,13 @@ * Programmed by Naohide Sano */ +package commentator; + import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import org.antlr.v4.runtime.misc.Pair; @@ -23,22 +26,25 @@ import com.netflix.rewrite.ast.visitor.AstVisitor; import com.netflix.rewrite.parse.OracleJdkParser; import com.netflix.rewrite.parse.Parser; +import vavi.util.Debug; /** - * Test03. using netflix rewrite (replace comment, refactoring parameter name: wip) + * commentator using netflix rewrite (replace comment, refactoring parameter name: wip) * *
  • netflix rewrite cannot handle comments??? + *
  • jdk version conflict?
  • * * @author Naohide Sano (umjammer) * @version 0.00 2019/05/10 umjammer initial version
    */ -public class Test03 { +public class RewriteCommentator { /** */ public TypeFactory analyze(String javadocdir, List externalLinks) throws Exception { +Debug.println("analyze start: " + packageFilter); DocParser dp = new DocParser(); - dp.setJavadocClassName("quicktime\\.[A-Z]\\w+$"); + dp.setJavadocClassName(packageFilter + "(\\.[\\w]+)*\\.[A-Z]\\w+$"); dp.setJavadocDirName(javadocdir); dp.setExternalLinks(externalLinks); dp.addProgressListener(System.err::println); @@ -46,22 +52,31 @@ public TypeFactory analyze(String javadocdir, List externalLinks) throws return dp.process(); } + /** regex */ + String packageFilter; + /** - * - * @param args + * + * @param args 0: javadocDir, 1: externalLink, 2: sourceDir, 3: outputDir, 4: packageFilter */ public static void main(String[] args) throws Exception { +Debug.println("RewriteCommentator: " + args[0]); + RewriteCommentator app = new RewriteCommentator(); + app.packageFilter = args[4]; + app.exec(args[0], args[1], args[2], args[3]); + } - String javadocDir = args[0]; - String externalLink = args[1]; - String sourceDir = args[2]; - String outputDir = args[3]; - - List el = new ArrayList<>(); - el.add(externalLink); + /** */ + void exec(String javadocDir, String externalLink, String sourceDir, String outputDir) throws Exception { + List el; + if (externalLink != null && !externalLink.isEmpty()) { + el = new ArrayList<>(); + el.add(externalLink); + } else { + el = Collections.emptyList(); + } - Test03 app = new Test03(); - TypeFactory tf = app.analyze(javadocDir, el); + TypeFactory tf = analyze(javadocDir, el); Parser parser = new OracleJdkParser(); @@ -75,47 +90,44 @@ public static void main(String[] args) throws Exception { CompilationUnit unit = parser.parse(new String(Files.readAllBytes(sourcePath))); - new AstVisitor(Void.class.cast(null)) { + new AstVisitor((Void) null) { @Override public Void visitMethod(MethodDecl n) { - type.getMethod(getSignatureString(n)).ifPresent(m -> { - - Streams.zip(m.getParameterList().stream(), n.getParams().getParams().stream(), - (a, b) -> new Pair<>(a, b) - ).filter(p -> { - if (Empty.class.isInstance(p.b)) { - return false; - } else if (VariableDecls.class.isInstance(p.b)) { - // parameter must have one variable - String name = VariableDecls.class.cast(p.b).getVars().get(0).getSimpleName().toString(); - return !p.a.getName().equals(name); - } else { + type.getMethod(getSignatureString(n)).ifPresent(m -> Streams.zip(m.getParameterList().stream(), n.getParams().getParams().stream(), + Pair::new + ).filter(p -> { + if (p.b instanceof Empty) { + return false; + } else if (p.b instanceof VariableDecls) { + // parameter must have one variable + String name = ((VariableDecls) p.b).getVars().get(0).getSimpleName(); + return !p.a.getName().equals(name); + } else { System.err.println("?1: " + p.b); - return false; - } - }).forEach(p -> { - String name = VariableDecls.class.cast(p.b).getVars().get(0).getSimpleName().toString(); + return false; + } + }).forEach(p -> { + String name = ((VariableDecls) p.b).getVars().get(0).getSimpleName(); System.err.println("RN: " + "PARAM: " + name + " -> " + p.a.getName() + " \t\t/ " + getSignatureString(n)); - // TODO this only rename a parameter name... - String diff = unit.refactor().changeFieldName(VariableDecls.class.cast(p.b), p.a.getName()).diff(); + // TODO this only rename a parameter name... + String diff = unit.refactor().changeFieldName((VariableDecls) p.b, p.a.getName()).diff(); System.out.println(diff); - }); - }); + })); return null; } /** */ String getSignatureString(MethodDecl n) { - StringBuilder sb = new StringBuilder(n.getName().getSimpleName().toString()); + StringBuilder sb = new StringBuilder(n.getName().getSimpleName()); sb.append("("); n.getParams().getParams().forEach(p -> { //System.err.println("MP: "+ p); - if (Empty.class.isInstance(p)) { - } else if (VariableDecls.class.isInstance(p)) { - com.netflix.rewrite.ast.Type t = VariableDecls.class.cast(p).getTypeExpr().getType(); + if (p instanceof Empty) { + } else if (p instanceof VariableDecls) { + com.netflix.rewrite.ast.Type t = ((VariableDecls) p).getTypeExpr().getType(); sb.append(getSignatureString(t)); } }); @@ -132,10 +144,9 @@ String getSignatureString(MethodDecl n) { /** */ String getSignatureString(com.netflix.rewrite.ast.Type t) { String name = null; - if (com.netflix.rewrite.ast.Type.Primitive.class.isInstance(t)) { - name = com.netflix.rewrite.ast.Type.Primitive.class.cast(t).getKeyword(); - } else if (com.netflix.rewrite.ast.Type.Class.class.isInstance(t)) { - com.netflix.rewrite.ast.Type.Class c = com.netflix.rewrite.ast.Type.Class.class.cast(t); + if (t instanceof com.netflix.rewrite.ast.Type.Primitive) { + name = ((com.netflix.rewrite.ast.Type.Primitive) t).getKeyword(); + } else if (t instanceof com.netflix.rewrite.ast.Type.Class c) { name = c.getFullyQualifiedName(); } else { System.err.println("?2: " + t); diff --git a/src/test/java/Test05.java b/src/test/java/commentator/SpoonCommentator.java similarity index 66% rename from src/test/java/Test05.java rename to src/test/java/commentator/SpoonCommentator.java index db74b65..9e6502b 100644 --- a/src/test/java/Test05.java +++ b/src/test/java/commentator/SpoonCommentator.java @@ -4,10 +4,13 @@ * Programmed by Naohide Sano */ +package commentator; + import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import com.google.common.collect.Streams; @@ -21,20 +24,24 @@ import spoon.reflect.declaration.CtConstructor; import spoon.reflect.declaration.CtMethod; import spoon.support.reflect.declaration.CtClassImpl; +import vavi.util.Debug; /** - * Test04. using spoon (replace comment, refactoring parameter name: failed) + * commentator using spoon (replace comment, refactoring parameter name: failed) + * + *
  • formats are gone
  • * * @author Naohide Sano (umjammer) * @version 0.00 2019/05/10 umjammer initial version
    */ -public class Test05 { +public class SpoonCommentator { /** */ public TypeFactory analyze(String javadocdir, List externalLinks) throws Exception { +Debug.println("analyze start: " + packageFilter); DocParser dp = new DocParser(); - dp.setJavadocClassName("quicktime\\.[A-Z]\\w+$"); + dp.setJavadocClassName(packageFilter + "(\\.[\\w]+)*\\.[A-Z]\\w+$"); dp.setJavadocDirName(javadocdir); dp.setExternalLinks(externalLinks); dp.addProgressListener(System.err::println); @@ -42,22 +49,31 @@ public TypeFactory analyze(String javadocdir, List externalLinks) throws return dp.process(); } + /** regex */ + String packageFilter; + /** - * - * @param args + * + * @param args 0: javadocDir, 1: externalLink, 2: sourceDir, 3: outputDir */ public static void main(String[] args) throws Exception { +Debug.println("SpoonCommentator: " + args[0]); + SpoonCommentator app = new SpoonCommentator(); + app.packageFilter = args[4]; + app.exec(args[0], args[1], args[2], args[3]); + } - String javadocDir = args[0]; - String externalLink = args[1]; - String sourceDir = args[2]; - String outputDir = args[3]; - - List el = new ArrayList<>(); - el.add(externalLink); + /** */ + void exec(String javadocDir, String externalLink, String sourceDir, String outputDir) throws Exception { + List el; + if (externalLink != null && !externalLink.isEmpty()) { + el = new ArrayList<>(); + el.add(externalLink); + } else { + el = Collections.emptyList(); + } - Test05 app = new Test05(); - TypeFactory tf = app.analyze(javadocDir, el); + TypeFactory tf = analyze(javadocDir, el); for (Type type : tf.getTypes()) { @@ -79,15 +95,11 @@ public void process(CtMethod element) { if (element.getParent() instanceof CtClassImpl) { type.getType(((CtClassImpl) element.getParent()).getSimpleName()).ifPresent(t -> { System.err.println("CM: METHOD: " + getSignatureString(element)); - t.getMethod(getSignatureString(element)).ifPresent(m -> { - Streams.zip(m.getParameterList().stream(), element.getParameters().stream(), Pair::new) - .filter(p -> { - return !p.getFirst().getName().equals(p.getSecond().getSimpleName()); - }).forEach(p -> { + t.getMethod(getSignatureString(element)).ifPresent(m -> Streams.zip(m.getParameterList().stream(), element.getParameters().stream(), Pair::new) + .filter(p -> !p.getFirst().getName().equals(p.getSecond().getSimpleName())).forEach(p -> { System.err.println("RN: " + "PARAM: " + p.getSecond().getSimpleName() + " -> " + p.getFirst().getName() + " \t\t/ " + getSignatureString(element)); - p.getSecond().setSimpleName(p.getFirst().getName()); // TODO this is not refactoring - }); - }); + p.getSecond().setSimpleName(p.getFirst().getName()); // TODO this is not refactoring + })); }); } } @@ -96,9 +108,7 @@ public void process(CtMethod element) { String getSignatureString(CtMethod n) { StringBuilder sb = new StringBuilder(n.getSimpleName()); sb.append("("); - n.getParameters().forEach(p -> { - sb.append(Type.getSignatureString(tf.getFullyQualifiedName(p.getType().toString()))); - }); + n.getParameters().forEach(p -> sb.append(Type.getSignatureString(tf.getFullyQualifiedName(p.getType().toString())))); sb.append(")"); sb.append(Type.getSignatureString(tf.getFullyQualifiedName(n.getType().toString()))); //System.err.println("SG: "+ sb.toString()); @@ -111,13 +121,11 @@ public void process(CtConstructor element) { if (element.getParent() instanceof CtClassImpl) { type.getType(((CtClassImpl) element.getParent()).getSimpleName()).ifPresent(t -> { System.err.println("CM: CONSTRUCTOR: " + getSignatureString(element)); - t.getMethod(getSignatureString(element)).ifPresent(m -> { - Streams.zip(m.getParameterList().stream(), element.getParameters().stream(), Pair::new) - .filter(p -> !p.getFirst().getName().equals(p.getSecond().getSimpleName())).forEach(p -> { + t.getMethod(getSignatureString(element)).ifPresent(m -> Streams.zip(m.getParameterList().stream(), element.getParameters().stream(), Pair::new) + .filter(p -> !p.getFirst().getName().equals(p.getSecond().getSimpleName())).forEach(p -> { System.err.println("RN: " + "PARAM: " + p.getSecond().getSimpleName() + " -> " + p.getFirst().getName() + " \t\t/ " + getSignatureString(element)); - p.getSecond().setSimpleName(p.getFirst().getName()); // TODO this is not refactoring - }); - }); + p.getSecond().setSimpleName(p.getFirst().getName()); // TODO this is not refactoring + })); }); } } @@ -126,9 +134,7 @@ public void process(CtConstructor element) { String getSignatureString(CtConstructor n) { StringBuilder sb = new StringBuilder(((CtClassImpl) n.getParent()).getSimpleName()); sb.append("("); - n.getParameters().forEach(p -> { - sb.append(Type.getSignatureString(tf.getFullyQualifiedName(p.getType().toString()))); - }); + n.getParameters().forEach(p -> sb.append(Type.getSignatureString(tf.getFullyQualifiedName(p.getType().toString())))); sb.append(")"); //System.err.println("sg: "+ sb.toString()); return sb.toString(); diff --git a/src/test/resources/logging.properties b/src/test/resources/logging.properties index ebf4d1a..f35ea42 100644 --- a/src/test/resources/logging.properties +++ b/src/test/resources/logging.properties @@ -3,4 +3,4 @@ handlers=java.util.logging.ConsoleHandler java.util.logging.ConsoleHandler.level=ALL java.util.logging.ConsoleHandler.formatter=vavi.util.logging.VaviFormatter -org.codavaj.level=FINE \ No newline at end of file +#org.codavaj.level=FINE \ No newline at end of file