diff options
author | Alexander Kriegisch <Alexander@Kriegisch.name> | 2021-03-21 21:45:34 +0700 |
---|---|---|
committer | Alexander Kriegisch <Alexander@Kriegisch.name> | 2021-03-22 01:02:15 +0700 |
commit | ab85eea3a337662b2c875b96ad5eb057995dbbe2 (patch) | |
tree | 87f2f63d7cf420426b5c6cef0a5104a1a9b00716 /ajdoc/src/main/java | |
parent | 354212214df5afff0bbd1534ffbea1295201796b (diff) | |
download | aspectj-ab85eea3a337662b2c875b96ad5eb057995dbbe2.tar.gz aspectj-ab85eea3a337662b2c875b96ad5eb057995dbbe2.zip |
Add Java 16 Linux matcher variant to HtmlDecorator
The Java 16 Javadoc generator has changed the HTML structure once again
even compared to Java 15. I adjusted the matching in HtmlDecorator and
also fixed CoverageTestCase. Most methods there I just made to work
quickly, but method 'testInnerAspect()' I actually refactored. Some
other methods could (probably should) be restructured in a similar
fashion, but for now I just wanted to understand what the test does and
see how much work it would be to refactor it. But finally, I just want
to get the GitHub CI build running on Java 16.
TODO: I did not check if the decorated HTML actually looks OK and am
unsure if the tests cover that sufficiently, I never reviewed the tests.
It would also be better to do regex matches instead of looking for
variants of fixed strings or maybe even to operate on a DOM. But I am
not in a mood to refactor that tonight.
Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
Diffstat (limited to 'ajdoc/src/main/java')
-rw-r--r-- | ajdoc/src/main/java/org/aspectj/tools/ajdoc/HtmlDecorator.java | 61 |
1 files changed, 41 insertions, 20 deletions
diff --git a/ajdoc/src/main/java/org/aspectj/tools/ajdoc/HtmlDecorator.java b/ajdoc/src/main/java/org/aspectj/tools/ajdoc/HtmlDecorator.java index 17dcaab9c..56565e05a 100644 --- a/ajdoc/src/main/java/org/aspectj/tools/ajdoc/HtmlDecorator.java +++ b/ajdoc/src/main/java/org/aspectj/tools/ajdoc/HtmlDecorator.java @@ -39,9 +39,24 @@ import org.aspectj.util.TypeSafeEnum; */ class HtmlDecorator { - public static final String TYPE_NAME_LABEL = LangUtil.is15VMOrGreater() - ? "type-name-label" - : (LangUtil.is1dot8VMOrGreater() ? "typeNameLabel" : "strong"); + public static final String TYPE_NAME_LABEL; + public static final String CLOSING_SPAN; + + static { + if (LangUtil.is16VMOrGreater()) + TYPE_NAME_LABEL = "element-name type-name-label"; + else if (LangUtil.is15VMOrGreater()) + TYPE_NAME_LABEL = "type-name-label"; + else if (LangUtil.is1dot8VMOrGreater()) + TYPE_NAME_LABEL = "typeNameLabel"; + else + TYPE_NAME_LABEL = "strong"; + + if (LangUtil.is16VMOrGreater()) + CLOSING_SPAN = "</span>"; + else + CLOSING_SPAN = ""; + } private static final String POINTCUT_DETAIL = "Pointcut Detail"; private static final String ADVICE_DETAIL = "Advice Detail"; @@ -223,33 +238,35 @@ class HtmlDecorator { } boolean br = true; - int classStartIndex = fileContents.toString().indexOf("<BR>\nClass "); + contents = fileContents.toString(); + int classStartIndex = contents.indexOf("<BR>\nClass "); if (classStartIndex == -1) { - classStartIndex = fileContents.toString().indexOf("<H2>\nClass "); + classStartIndex = contents.indexOf("<H2>\nClass "); br = false; } if (classStartIndex == -1) { // Java8 looks more like this: // <h2 title="Class A" class="title">Class A</h2> - classStartIndex = fileContents.toString().indexOf("<h2 title=\"Class "); - int classEndIndex = fileContents.toString().indexOf("</h2>", classStartIndex); + classStartIndex = contents.indexOf("<h2 title=\"Class "); + int classEndIndex = contents.indexOf("</h2>", classStartIndex); if (classStartIndex == -1) { // Java 13 - replaced h2 with h1 here - classStartIndex = fileContents.toString().indexOf("<h1 title=\"Class "); - classEndIndex = fileContents.toString().indexOf("</h1>", classStartIndex); + classStartIndex = contents.indexOf("<h1 title=\"Class "); + classEndIndex = contents.indexOf("</h1>", classStartIndex); } if (classEndIndex != -1) { // Convert it to "<h2 title="Aspect A" class="title">Aspect A</h2>" - String classLine = fileContents.toString().substring(classStartIndex, classEndIndex); + String classLine = contents.substring(classStartIndex, classEndIndex); String aspectLine = classLine.replaceAll("Class ","Aspect "); fileContents.delete(classStartIndex, classEndIndex); fileContents.insert(classStartIndex, aspectLine); } } else if (classStartIndex != -1) { - int classEndIndex = fileContents.toString().indexOf("</H2>", classStartIndex); - if (classStartIndex != -1 && classEndIndex != -1) { - String classLine = fileContents.toString().substring(classStartIndex, classEndIndex); + contents = fileContents.toString(); + int classEndIndex = contents.indexOf("</H2>", classStartIndex); + if (classEndIndex != -1) { + String classLine = contents.substring(classStartIndex, classEndIndex); String aspectLine = ""; if (br) { aspectLine += "<BR>\n" + "Aspect " + classLine.substring(11, classLine.length()); @@ -260,23 +277,27 @@ class HtmlDecorator { fileContents.insert(classStartIndex, aspectLine); } } - int secondClassStartIndex = fileContents.toString().indexOf("class <B>"); + contents = fileContents.toString(); + int secondClassStartIndex = contents.indexOf("class <B>"); if (secondClassStartIndex != -1) { String name = decl.toSignatureString(); - int classEndIndex = fileContents.toString().indexOf(name + "</B><DT>"); - if (secondClassStartIndex != -1 && classEndIndex != -1) { - StringBuffer sb = new StringBuffer(fileContents.toString().substring(secondClassStartIndex, classEndIndex)); + int classEndIndex = contents.indexOf(name + "</B><DT>"); + if (classEndIndex != -1) { + StringBuffer sb = new StringBuffer(contents.substring(secondClassStartIndex, classEndIndex)); sb.replace(0, 5, "aspect"); fileContents.delete(secondClassStartIndex, classEndIndex); fileContents.insert(secondClassStartIndex, sb.toString()); } } else { + contents = fileContents.toString(); + // Java16: <span class="modifiers">static class </span><span class="type-name-label">ClassA.InnerAspect</span> // Java15: <pre>static class <span class="type-name-label">ClassA.InnerAspect</span> // Java8: <pre>static class <span class="typeNameLabel">ClassA.InnerAspect</span> // Java7 (464604): <pre>public class <span class="strong">Azpect</span> - classStartIndex = fileContents.toString().indexOf("class <span class=\"" + TYPE_NAME_LABEL + "\">"); - int classEndIndex = fileContents.toString().indexOf("</span>", classStartIndex); + String startString = "class " + CLOSING_SPAN + "<span class=\""; + classStartIndex = contents.indexOf(startString + TYPE_NAME_LABEL + "\">"); + int classEndIndex = contents.indexOf("</span>", classStartIndex + startString.length()); // This is where after Java version upgrades usually tests fail or the first time. // Logging context information helps fixing the issue quickly. @@ -291,7 +312,7 @@ class HtmlDecorator { if (classEndIndex != -1) { // Convert it to "aspect <span class="TYPE_NAME_LABEL">ClassA.InnerAspect</span>" - String aspectLine = "aspect" + fileContents.substring(classStartIndex + 5, classEndIndex); + String aspectLine = "aspect" + contents.substring(classStartIndex + 5, classEndIndex); fileContents.delete(classStartIndex, classEndIndex); fileContents.insert(classStartIndex, aspectLine); } |