Skip to content

Commit 98e3de3

Browse files
committed
Fix javadoc crawler review feedback
1 parent c7a8988 commit 98e3de3

2 files changed

Lines changed: 68 additions & 20 deletions

File tree

javadoc-crawler/src/main/java/io/opentelemetry/javadocs/JavaDocsCrawler.java

Lines changed: 56 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,11 @@ public final class JavaDocsCrawler {
3333
// latest periodically to avoid crawling artifacts that stopped being published.
3434
private static final Map<String, String> GROUPS_AND_MIN_VERSION =
3535
Map.of(
36-
"io.opentelemetry", "1.49.0",
37-
"io.opentelemetry.instrumentation", "2.15.0",
38-
"io.opentelemetry.contrib", "1.46.0",
39-
"io.opentelemetry.semconv", "1.32.0",
40-
"io.opentelemetry.proto", "1.3.2");
36+
"io.opentelemetry", "1.60.1",
37+
"io.opentelemetry.instrumentation", "2.25.0",
38+
"io.opentelemetry.contrib", "1.54.0",
39+
"io.opentelemetry.semconv", "1.40.0",
40+
"io.opentelemetry.proto", "1.10.0");
4141

4242
private static final String MAVEN_CENTRAL_BASE_URL =
4343
"https://search.maven.org/solrsearch/select?q=g:";
@@ -160,9 +160,10 @@ static List<Artifact> crawlJavaDocs(
160160
HttpClient client, String minVersion, List<Artifact> artifacts)
161161
throws IOException, InterruptedException {
162162
List<Artifact> updatedArtifacts = new ArrayList<>();
163+
SemanticVersion minSemanticVersion = SemanticVersion.parse(minVersion);
163164

164165
for (Artifact artifact : artifacts) {
165-
if (compareVersions(artifact.getVersion(), minVersion) < 0) {
166+
if (SemanticVersion.parse(artifact.getVersion()).compareTo(minSemanticVersion) < 0) {
166167
logger.info(
167168
String.format(
168169
"Skipping crawling %s due to version %s being less than minVersion %s",
@@ -210,13 +211,7 @@ static List<Artifact> crawlJavaDocs(
210211
return updatedArtifacts;
211212
}
212213

213-
static int compareVersions(String version, String otherVersion) {
214-
SemanticVersion semanticVersion = SemanticVersion.parse(version);
215-
SemanticVersion otherSemanticVersion = SemanticVersion.parse(otherVersion);
216-
return semanticVersion.compareTo(otherSemanticVersion);
217-
}
218-
219-
private static final class SemanticVersion implements Comparable<SemanticVersion> {
214+
static final class SemanticVersion implements Comparable<SemanticVersion> {
220215
private static final Comparator<List<Integer>> CORE_VERSION_COMPARATOR =
221216
(left, right) -> {
222217
for (int i = 0; i < Math.max(left.size(), right.size()); i++) {
@@ -238,7 +233,7 @@ private SemanticVersion(List<Integer> coreVersionParts, String qualifier) {
238233
this.qualifier = qualifier;
239234
}
240235

241-
private static SemanticVersion parse(String version) {
236+
static SemanticVersion parse(String version) {
242237
String[] versionParts = version.split("-", 2);
243238
List<Integer> coreVersionParts = new ArrayList<>();
244239
for (String part : versionParts[0].split("\\.")) {
@@ -264,7 +259,53 @@ public int compareTo(SemanticVersion other) {
264259
if (other.qualifier.isEmpty()) {
265260
return -1;
266261
}
267-
return qualifier.compareTo(other.qualifier);
262+
return compareQualifier(qualifier, other.qualifier);
263+
}
264+
265+
private static int compareQualifier(String leftQualifier, String rightQualifier) {
266+
String[] leftParts = leftQualifier.split("\\.");
267+
String[] rightParts = rightQualifier.split("\\.");
268+
269+
for (int i = 0; i < Math.max(leftParts.length, rightParts.length); i++) {
270+
if (i >= leftParts.length) {
271+
return -1;
272+
}
273+
if (i >= rightParts.length) {
274+
return 1;
275+
}
276+
277+
String leftIdentifier = leftParts[i];
278+
String rightIdentifier = rightParts[i];
279+
if (leftIdentifier.equals(rightIdentifier)) {
280+
continue;
281+
}
282+
283+
boolean leftNumeric = isNumericIdentifier(leftIdentifier);
284+
boolean rightNumeric = isNumericIdentifier(rightIdentifier);
285+
if (leftNumeric && rightNumeric) {
286+
if (leftIdentifier.length() != rightIdentifier.length()) {
287+
return Integer.compare(leftIdentifier.length(), rightIdentifier.length());
288+
}
289+
return leftIdentifier.compareTo(rightIdentifier);
290+
}
291+
if (leftNumeric != rightNumeric) {
292+
return leftNumeric ? -1 : 1;
293+
}
294+
return leftIdentifier.compareTo(rightIdentifier);
295+
}
296+
return 0;
297+
}
298+
299+
private static boolean isNumericIdentifier(String identifier) {
300+
if (identifier.isEmpty()) {
301+
return false;
302+
}
303+
for (int i = 0; i < identifier.length(); i++) {
304+
if (!Character.isDigit(identifier.charAt(i))) {
305+
return false;
306+
}
307+
}
308+
return true;
268309
}
269310
}
270311

javadoc-crawler/src/test/java/io/opentelemetry/javadocs/JavaDocsCrawlerTest.java

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import static io.opentelemetry.javadocs.JavaDocsCrawler.JAVA_DOC_DOWNLOADED_TEXT;
99
import static org.assertj.core.api.Assertions.assertThat;
1010
import static org.mockito.ArgumentMatchers.any;
11-
import static org.mockito.ArgumentMatchers.argThat;
1211
import static org.mockito.Mockito.never;
1312
import static org.mockito.Mockito.times;
1413
import static org.mockito.Mockito.verify;
@@ -96,9 +95,12 @@ void testCrawler() throws IOException, InterruptedException {
9695

9796
@Test
9897
void compareVersionsUsesSemanticOrdering() {
99-
assertThat(JavaDocsCrawler.compareVersions("1.9.0", "1.49.0")).isLessThan(0);
100-
assertThat(JavaDocsCrawler.compareVersions("1.60.0", "1.49.0")).isGreaterThan(0);
101-
assertThat(JavaDocsCrawler.compareVersions("1.60.0-alpha", "1.60.0")).isLessThan(0);
98+
assertThat(compareVersions("1.9.0", "1.49.0")).isLessThan(0);
99+
assertThat(compareVersions("1.49.0", "1.49.0")).isZero();
100+
assertThat(compareVersions("1.60.0", "1.49.0")).isGreaterThan(0);
101+
assertThat(compareVersions("1.60.0-alpha", "1.60.0")).isLessThan(0);
102+
assertThat(compareVersions("1.0.0-rc.2", "1.0.0-rc.10")).isLessThan(0);
103+
assertThat(compareVersions("1.0.0-rc.10", "1.0.0")).isLessThan(0);
102104
}
103105

104106
@Test
@@ -109,7 +111,12 @@ void crawlSkipsArtifactsBelowMinVersionUsingSemanticComparison()
109111
List<Artifact> updated =
110112
JavaDocsCrawler.crawlJavaDocs(mockClient, "1.49.0", List.of(oldArtifact));
111113

112-
verify(mockClient, never()).send(argThat(request -> request != null), any());
114+
verify(mockClient, never()).send(any(HttpRequest.class), any());
113115
assertThat(updated).isEmpty();
114116
}
117+
118+
private static int compareVersions(String left, String right) {
119+
return JavaDocsCrawler.SemanticVersion.parse(left)
120+
.compareTo(JavaDocsCrawler.SemanticVersion.parse(right));
121+
}
115122
}

0 commit comments

Comments
 (0)