@@ -117,8 +117,12 @@ public static Javadoc extractDocument(Class cls, Document doc)
117
117
XPath xPath = XPathFactory .newInstance ().newXPath ();
118
118
// Javadoc 8-13
119
119
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+
121
121
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
+ }
122
126
Node description = toFragment (n );
123
127
if (description != null )
124
128
{
@@ -129,12 +133,20 @@ public static Javadoc extractDocument(Class cls, Document doc)
129
133
documentation .description = renderer .render (description );
130
134
}
131
135
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
133
137
.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
+ }
134
142
if (ctorRoot != null )
135
143
{
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" )
137
148
.evaluate (ctorRoot .getParentNode (), XPathConstants .NODESET ));
149
+ }
138
150
documentation .ctorsNode = set ;
139
151
StringBuilder sb = new StringBuilder ();
140
152
for (Node ctor : set )
@@ -147,12 +159,20 @@ public static Javadoc extractDocument(Class cls, Document doc)
147
159
documentation .ctors = sb .toString ();
148
160
}
149
161
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
151
163
.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
+ }
152
168
if (methodRoot != null )
153
169
{
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
+ }
156
176
documentation .methodNodes = set ;
157
177
for (Node method : set )
158
178
{
@@ -178,12 +198,20 @@ public static Javadoc extractDocument(Class cls, Document doc)
178
198
// NodeList set = (NodeList) xPath.compile("./ul/li").evaluate(inner.getParentNode(), XPathConstants.NODESET);
179
199
// documentation.innerNode = convertNodes(set);
180
200
// }
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
182
202
.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
+ }
183
207
if (fieldRoot != null )
184
208
{
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
+ }
187
215
documentation .fieldNodes = set ;
188
216
for (Node field : set )
189
217
{
0 commit comments