Skip to content

Commit 5bce891

Browse files
committedJun 28, 2024·
JavadocExtractor: add support for javadoc 17
1 parent a4bb61d commit 5bce891

File tree

1 file changed

+37
-9
lines changed

1 file changed

+37
-9
lines changed
 

‎native/java/org/jpype/javadoc/JavadocExtractor.java

+37-9
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,12 @@ public static Javadoc extractDocument(Class cls, Document doc)
117117
XPath xPath = XPathFactory.newInstance().newXPath();
118118
// Javadoc 8-13
119119
Node n = (Node) xPath.compile("//div[@class='description']/ul/li").evaluate(doc, XPathConstants.NODE);
120-
if (n == null) // Javadoc 14+
120+
if (n == null) { // Javadoc 14+
121121
n = (Node) xPath.compile("//section[@class='description']").evaluate(doc, XPathConstants.NODE);
122+
}
123+
if (n == null) { // Javadoc 17+
124+
n = (Node) xPath.compile("//section[@class='class-description']").evaluate(doc, XPathConstants.NODE);
125+
}
122126
Node description = toFragment(n);
123127
if (description != null)
124128
{
@@ -129,12 +133,20 @@ public static Javadoc extractDocument(Class cls, Document doc)
129133
documentation.description = renderer.render(description);
130134
}
131135

132-
Node ctorRoot = ((Node) xPath.compile("//li/a[@name='constructor.detail' or @id='constructor.detail']")
136+
Node ctorRoot = ((Node) xPath.compile("//li/a[@name='constructor.detail' or @id='constructor.detail']") // Javadoc before 17
133137
.evaluate(doc, XPathConstants.NODE));
138+
if (ctorRoot == null) { // Javadoc 17+
139+
ctorRoot = ((Node) xPath.compile("//section[@class='constructor-details']/ul")
140+
.evaluate(doc, XPathConstants.NODE));
141+
}
134142
if (ctorRoot != null)
135143
{
136-
List<Node> set = convertNodes((NodeList) xPath.compile("./ul/li")
144+
List<Node> set = convertNodes((NodeList) xPath.compile("./li/section") // Javadoc 17+
145+
.evaluate(ctorRoot, XPathConstants.NODESET));
146+
if (set.isEmpty()) { // Javadoc before 17
147+
set = convertNodes((NodeList) xPath.compile("./ul/li")
137148
.evaluate(ctorRoot.getParentNode(), XPathConstants.NODESET));
149+
}
138150
documentation.ctorsNode = set;
139151
StringBuilder sb = new StringBuilder();
140152
for (Node ctor : set)
@@ -147,12 +159,20 @@ public static Javadoc extractDocument(Class cls, Document doc)
147159
documentation.ctors = sb.toString();
148160
}
149161

150-
Node methodRoot = ((Node) xPath.compile("//li/a[@name='method.detail' or @id='method.detail']")
162+
Node methodRoot = ((Node) xPath.compile("//li/a[@name='method.detail' or @id='method.detail']") // Javadoc before 17
151163
.evaluate(doc, XPathConstants.NODE));
164+
if (methodRoot == null) { // Javadoc 17+
165+
methodRoot = ((Node) xPath.compile("//section[@class='method-details']/ul")
166+
.evaluate(doc, XPathConstants.NODE));
167+
}
152168
if (methodRoot != null)
153169
{
154-
List<Node> set = convertNodes((NodeList) xPath.compile("./ul/li")
155-
.evaluate(methodRoot.getParentNode(), XPathConstants.NODESET));
170+
List<Node> set = convertNodes((NodeList) xPath.compile("./li/section") // Javadoc 17+
171+
.evaluate(methodRoot, XPathConstants.NODESET));
172+
if (set.isEmpty()) { // Javadoc before 17
173+
set = convertNodes((NodeList) xPath.compile("./ul/li")
174+
.evaluate(methodRoot.getParentNode(), XPathConstants.NODESET));
175+
}
156176
documentation.methodNodes = set;
157177
for (Node method : set)
158178
{
@@ -178,12 +198,20 @@ public static Javadoc extractDocument(Class cls, Document doc)
178198
// NodeList set = (NodeList) xPath.compile("./ul/li").evaluate(inner.getParentNode(), XPathConstants.NODESET);
179199
// documentation.innerNode = convertNodes(set);
180200
// }
181-
Node fieldRoot = ((Node) xPath.compile("//li/a[@name='field.detail' or @id='field.detail']")
201+
Node fieldRoot = ((Node) xPath.compile("//li/a[@name='field.detail' or @id='field.detail']") // Javadoc before 17
182202
.evaluate(doc, XPathConstants.NODE));
203+
if (fieldRoot == null) { // Javadoc 17+
204+
fieldRoot = ((Node) xPath.compile("//section[@class='field-details']/ul")
205+
.evaluate(doc, XPathConstants.NODE));
206+
}
183207
if (fieldRoot != null)
184208
{
185-
List<Node> set = convertNodes((NodeList) xPath.compile("./ul/li")
186-
.evaluate(fieldRoot.getParentNode(), XPathConstants.NODESET));
209+
List<Node> set = convertNodes((NodeList) xPath.compile("./li/section") // Javadoc 17+
210+
.evaluate(fieldRoot, XPathConstants.NODESET));
211+
if (set.isEmpty()) { // Javadoc before 17
212+
set = convertNodes((NodeList) xPath.compile("./ul/li")
213+
.evaluate(fieldRoot.getParentNode(), XPathConstants.NODESET));
214+
}
187215
documentation.fieldNodes = set;
188216
for (Node field : set)
189217
{

0 commit comments

Comments
 (0)
Please sign in to comment.