Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
*/
package io.moderne.devcenter;

import io.moderne.devcenter.internal.DataTableRowWatcher;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
Expand Down Expand Up @@ -87,13 +86,7 @@ public Tree preVisit(Tree tree, ExecutionContext ctx) {
}
// ignore the MavenDownloadingException(s) that might occur in the scanning phase as the RecipeRunCycle.scanSources also does this when such an error occurs during scanning phase in a ScanningRecipe.
}

DataTableRowWatcher<VulnerabilityReport.Row> dataTableWatcher = new DataTableRowWatcher<>(scan.getVulnerabilityReport(), ctx);
dataTableWatcher.start();
scan.generate(acc, ctx);

List<VulnerabilityReport.Row> vulnerableDependencies = dataTableWatcher.stop();
insertRows(vulnerableDependencies, ctx);
insertRows(scan.vulnerabilities(acc), ctx);
return tree;
}

Expand Down
33 changes: 13 additions & 20 deletions src/main/java/io/moderne/devcenter/GroovyVersionUpgrade.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
*/
package io.moderne.devcenter;

import io.moderne.devcenter.internal.DataTableRowWatcher;
import io.moderne.devcenter.internal.ResolvedDependencyVersions;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
Expand All @@ -24,9 +24,7 @@
import org.jspecify.annotations.Nullable;
import org.openrewrite.*;
import org.openrewrite.gradle.IsBuildGradle;
import org.openrewrite.java.dependencies.DependencyInsight;
import org.openrewrite.maven.search.FindMavenProject;
import org.openrewrite.maven.table.DependenciesInUse;

import java.util.List;
import java.util.stream.Stream;
Expand Down Expand Up @@ -63,24 +61,21 @@ public TreeVisitor<?, ExecutionContext> getVisitor() {
@Override
public Tree preVisit(Tree tree, ExecutionContext ctx) {
stopAfterPreVisit();

Tree t = findGroovyDependency(ctx, tree, "groovy", "groovy");
t = findGroovyDependency(ctx, t, "org.codehaus.groovy", "groovy");
return findGroovyDependency(ctx, t, "org.apache.groovy", "groovy");
if (!(tree instanceof SourceFile)) {
return tree;
}
SourceFile source = (SourceFile) tree;
findGroovyDependency(ctx, source, "groovy", "groovy");
findGroovyDependency(ctx, source, "org.codehaus.groovy", "groovy");
findGroovyDependency(ctx, source, "org.apache.groovy", "groovy");
return tree;
}
});
}

private Tree findGroovyDependency(ExecutionContext ctx, Tree tree, String groupId, String artifactId) {
DependencyInsight dependencyInsight = new DependencyInsight(groupId, artifactId, null, null);
DataTableRowWatcher<DependenciesInUse.Row> dataTableWatcher = new DataTableRowWatcher<>(dependencyInsight.getDependenciesInUse(), ctx);
dataTableWatcher.start();

Tree t = dependencyInsight.getVisitor().visitNonNull(tree, ctx);

List<DependenciesInUse.Row> dependenciesInUse = dataTableWatcher.stop();
for (DependenciesInUse.Row row : dependenciesInUse) {
int actualMajor = parseMajorVersion(row.getVersion());
private void findGroovyDependency(ExecutionContext ctx, SourceFile source, String groupId, String artifactId) {
for (String version : ResolvedDependencyVersions.findVersions(source, groupId, artifactId)) {
int actualMajor = parseMajorVersion(version);
Measure measure = Measure.Completed;
if (actualMajor < majorVersion) {
if (actualMajor >= 5) {
Expand All @@ -96,10 +91,8 @@ private Tree findGroovyDependency(ExecutionContext ctx, Tree tree, String groupI
}
}

upgradesAndMigrations.insertRow(ctx, GroovyVersionUpgrade.this,
measure, row.getVersion());
upgradesAndMigrations.insertRow(ctx, GroovyVersionUpgrade.this, measure, version);
}
return t;
}

static int parseMajorVersion(String version) {
Expand Down
25 changes: 8 additions & 17 deletions src/main/java/io/moderne/devcenter/KotlinVersionUpgrade.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
*/
package io.moderne.devcenter;

import io.moderne.devcenter.internal.DataTableRowWatcher;
import io.moderne.devcenter.internal.ResolvedDependencyVersions;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
Expand All @@ -24,9 +24,7 @@
import org.jspecify.annotations.Nullable;
import org.openrewrite.*;
import org.openrewrite.gradle.IsBuildGradle;
import org.openrewrite.java.dependencies.DependencyInsight;
import org.openrewrite.maven.search.FindMavenProject;
import org.openrewrite.maven.table.DependenciesInUse;

import java.util.List;
import java.util.stream.Stream;
Expand Down Expand Up @@ -63,17 +61,12 @@ public TreeVisitor<?, ExecutionContext> getVisitor() {
@Override
public Tree preVisit(Tree tree, ExecutionContext ctx) {
stopAfterPreVisit();

DependencyInsight dependencyInsight = new DependencyInsight("org.jetbrains.kotlin", "kotlin-stdlib", null, null);
DataTableRowWatcher<DependenciesInUse.Row> dataTableWatcher = new DataTableRowWatcher<>(dependencyInsight.getDependenciesInUse(), ctx);
dataTableWatcher.start();

Tree t = dependencyInsight.getVisitor().visitNonNull(tree, ctx);

List<DependenciesInUse.Row> dependenciesInUse = dataTableWatcher.stop();
if (!(tree instanceof SourceFile)) {
return tree;
}
int[] target = parseVersion(version);
for (DependenciesInUse.Row row : dependenciesInUse) {
int[] actual = parseVersion(row.getVersion());
for (String found : ResolvedDependencyVersions.findVersions((SourceFile) tree, "org.jetbrains.kotlin", "kotlin-stdlib")) {
int[] actual = parseVersion(found);
Measure measure = Measure.Completed;
if (compareMajorMinor(actual, target) < 0) {
if (actual[0] >= 2 && actual[1] >= 1) {
Expand All @@ -89,11 +82,9 @@ public Tree preVisit(Tree tree, ExecutionContext ctx) {
}
}

upgradesAndMigrations.insertRow(ctx, KotlinVersionUpgrade.this,
measure, row.getVersion());
upgradesAndMigrations.insertRow(ctx, KotlinVersionUpgrade.this, measure, found);
}

return t;
return tree;
}
});
}
Expand Down
24 changes: 7 additions & 17 deletions src/main/java/io/moderne/devcenter/LibraryUpgrade.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,13 @@
*/
package io.moderne.devcenter;

import io.moderne.devcenter.internal.DataTableRowWatcher;
import io.moderne.devcenter.table.UpgradesAndMigrations;
import io.moderne.devcenter.internal.ResolvedDependencyVersions;
import lombok.EqualsAndHashCode;
import lombok.Value;
import org.jspecify.annotations.Nullable;
import org.openrewrite.*;
import org.openrewrite.gradle.IsBuildGradle;
import org.openrewrite.java.dependencies.DependencyInsight;
import org.openrewrite.maven.search.FindMavenProject;
import org.openrewrite.maven.table.DependenciesInUse;

import java.util.Arrays;
import java.util.List;
Expand Down Expand Up @@ -75,21 +72,14 @@ public TreeVisitor<?, ExecutionContext> getVisitor() {
@Override
public Tree preVisit(Tree tree, ExecutionContext ctx) {
stopAfterPreVisit();

DependencyInsight dependencyInsight = new DependencyInsight(groupIdPattern, artifactIdPattern, null, null);
DataTableRowWatcher<DependenciesInUse.Row> dataTableWatcher = new DataTableRowWatcher<>(dependencyInsight.getDependenciesInUse(), ctx);
dataTableWatcher.start();

if (!(tree instanceof SourceFile)) {
return tree;
}
SemverRowBuilder rowBuilder = new SemverRowBuilder(cardName, version);
Tree t = dependencyInsight.getVisitor().visitNonNull(tree, ctx);

List<DependenciesInUse.Row> dependenciesInUse = dataTableWatcher.stop();
for (DependenciesInUse.Row dependencyInUse : dependenciesInUse) {
UpgradesAndMigrations.Row row = rowBuilder.getRow(dependencyInUse.getVersion());
upgradesAndMigrations.insertRow(ctx, row);
for (String found : ResolvedDependencyVersions.findVersions((SourceFile) tree, groupIdPattern, artifactIdPattern)) {
upgradesAndMigrations.insertRow(ctx, rowBuilder.getRow(found));
}

return t;
return tree;
}
});
}
Expand Down
35 changes: 16 additions & 19 deletions src/main/java/io/moderne/devcenter/ParentPomUpgrade.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,19 +15,19 @@
*/
package io.moderne.devcenter;

import io.moderne.devcenter.internal.DataTableRowWatcher;
import io.moderne.devcenter.table.UpgradesAndMigrations;
import lombok.EqualsAndHashCode;
import lombok.Value;
import org.jspecify.annotations.Nullable;
import org.openrewrite.*;
import org.openrewrite.maven.search.FindMavenProject;
import org.openrewrite.maven.search.ParentPomInsight;
import org.openrewrite.maven.table.ParentPomsInUse;
import org.openrewrite.maven.tree.MavenResolutionResult;
import org.openrewrite.maven.tree.Parent;

import java.util.Arrays;
import java.util.List;

import static org.openrewrite.internal.StringUtils.matchesGlob;

@Value
@EqualsAndHashCode(callSuper = false)
public class ParentPomUpgrade extends UpgradeMigrationCard {
Expand Down Expand Up @@ -74,23 +74,20 @@ public TreeVisitor<?, ExecutionContext> getVisitor() {
@Override
public Tree preVisit(Tree tree, ExecutionContext ctx) {
stopAfterPreVisit();

ParentPomInsight parentPomInsight = new ParentPomInsight(groupIdPattern, artifactIdPattern, null, null);
DataTableRowWatcher<ParentPomsInUse.Row> dataTableWatcher = new DataTableRowWatcher<>(parentPomInsight.getInUse(), ctx);
dataTableWatcher.start();

if (!(tree instanceof SourceFile)) {
return tree;
}
SemverRowBuilder rowBuilder = new SemverRowBuilder(cardName, version);
Tree t = parentPomInsight.getVisitor().visitNonNull(tree, ctx);

List<ParentPomsInUse.Row> parentPomsInUse = dataTableWatcher.stop();
for (ParentPomsInUse.Row parentPomInUse : parentPomsInUse) {
if (parentPomInUse.getVersion() != null) {
UpgradesAndMigrations.Row row = rowBuilder.getRow(parentPomInUse.getVersion());
upgradesAndMigrations.insertRow(ctx, row);
((SourceFile) tree).getMarkers().findFirst(MavenResolutionResult.class).ifPresent(mrr -> {
Parent parent = mrr.getPom().getRequested().getParent();
if (parent != null &&
matchesGlob(parent.getGroupId(), groupIdPattern) &&
matchesGlob(parent.getArtifactId(), artifactIdPattern) &&
parent.getVersion() != null) {
upgradesAndMigrations.insertRow(ctx, rowBuilder.getRow(parent.getVersion()));
}
}

return t;
});
return tree;
}
});
}
Expand Down
47 changes: 15 additions & 32 deletions src/main/java/io/moderne/devcenter/ScalaVersionUpgrade.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
*/
package io.moderne.devcenter;

import io.moderne.devcenter.internal.DataTableRowWatcher;
import io.moderne.devcenter.internal.ResolvedDependencyVersions;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
Expand All @@ -24,9 +24,7 @@
import org.jspecify.annotations.Nullable;
import org.openrewrite.*;
import org.openrewrite.gradle.IsBuildGradle;
import org.openrewrite.java.dependencies.DependencyInsight;
import org.openrewrite.maven.search.FindMavenProject;
import org.openrewrite.maven.table.DependenciesInUse;

import java.util.List;
import java.util.stream.Stream;
Expand Down Expand Up @@ -63,47 +61,33 @@ public TreeVisitor<?, ExecutionContext> getVisitor() {
@Override
public Tree preVisit(Tree tree, ExecutionContext ctx) {
stopAfterPreVisit();
if (!(tree instanceof SourceFile)) {
return tree;
}
SourceFile source = (SourceFile) tree;

// Check for Scala 3 first (scala3-library_3), then fall back to
// scala-library for Scala 2. This order matters because scala3-library_3
// transitively depends on scala-library, and we want to report
// the Scala 3 version, not the transitive Scala 2 dependency.
FindResult result = findScalaDependency(ctx, tree, "org.scala-lang", "scala3-library_3");
if (!result.found) {
result = findScalaDependency(ctx, result.tree, "org.scala-lang", "scala-library");
if (!emitMeasures(ctx, source, "org.scala-lang", "scala3-library_3")) {
emitMeasures(ctx, source, "org.scala-lang", "scala-library");
}

return result.tree;
return tree;
}
});
}

private static class FindResult {
final Tree tree;
final boolean found;

FindResult(Tree tree, boolean found) {
this.tree = tree;
this.found = found;
}
}

private FindResult findScalaDependency(ExecutionContext ctx, Tree tree, String groupId, String artifactId) {
DependencyInsight dependencyInsight = new DependencyInsight(groupId, artifactId, null, null);
DataTableRowWatcher<DependenciesInUse.Row> dataTableWatcher = new DataTableRowWatcher<>(dependencyInsight.getDependenciesInUse(), ctx);
dataTableWatcher.start();

Tree t = dependencyInsight.getVisitor().visitNonNull(tree, ctx);

List<DependenciesInUse.Row> dependenciesInUse = dataTableWatcher.stop();
for (DependenciesInUse.Row row : dependenciesInUse) {
int actualMajor = parseMajorVersion(row.getVersion());
private boolean emitMeasures(ExecutionContext ctx, SourceFile source, String groupId, String artifactId) {
List<String> versions = ResolvedDependencyVersions.findVersions(source, groupId, artifactId);
for (String version : versions) {
int actualMajor = parseMajorVersion(version);
Measure measure = Measure.Completed;
if (actualMajor < majorVersion) {
if (actualMajor >= 3) {
measure = Measure.Scala3Plus;
} else if (actualMajor == 2) {
int actualMinor = parseMinorVersion(row.getVersion());
int actualMinor = parseMinorVersion(version);
if (actualMinor >= 13) {
measure = Measure.Scala213Plus;
} else if (actualMinor >= 12) {
Expand All @@ -116,10 +100,9 @@ private FindResult findScalaDependency(ExecutionContext ctx, Tree tree, String g
}
}

upgradesAndMigrations.insertRow(ctx, ScalaVersionUpgrade.this,
measure, row.getVersion());
upgradesAndMigrations.insertRow(ctx, ScalaVersionUpgrade.this, measure, version);
}
return new FindResult(t, !dependenciesInUse.isEmpty());
return !versions.isEmpty();
}

static int parseMajorVersion(String version) {
Expand Down
Loading
Loading