diff --git a/spring-rewrite-commons-gradle/pom.xml b/spring-rewrite-commons-gradle/pom.xml
index 426c903..61c8d0a 100644
--- a/spring-rewrite-commons-gradle/pom.xml
+++ b/spring-rewrite-commons-gradle/pom.xml
@@ -10,6 +10,7 @@
spring-rewrite-commons-gradle
+ Spring Rewrite Gradle Aggregate Project
pom
diff --git a/spring-rewrite-commons-gradle/rewrite-gradle-model/pom.xml b/spring-rewrite-commons-gradle/rewrite-gradle-model/pom.xml
index 13d912a..217aee1 100644
--- a/spring-rewrite-commons-gradle/rewrite-gradle-model/pom.xml
+++ b/spring-rewrite-commons-gradle/rewrite-gradle-model/pom.xml
@@ -10,6 +10,7 @@
rewrite-gradle-model
+ Spring Rewrite Gradle Tooling Model
17
diff --git a/spring-rewrite-commons-gradle/rewrite-gradle-parser/pom.xml b/spring-rewrite-commons-gradle/rewrite-gradle-parser/pom.xml
index 936cd34..d952160 100644
--- a/spring-rewrite-commons-gradle/rewrite-gradle-parser/pom.xml
+++ b/spring-rewrite-commons-gradle/rewrite-gradle-parser/pom.xml
@@ -10,6 +10,7 @@
rewrite-gradle-parser
+ Spring Rewrite Gradle Project Parser
17
diff --git a/spring-rewrite-commons-gradle/rewrite-gradle-parser/src/test/java/org/springframework/rewrite/gradle/ProjectParserTest.java b/spring-rewrite-commons-gradle/rewrite-gradle-parser/src/test/java/org/springframework/rewrite/gradle/ProjectParserTest.java
index ecbb1f3..dcd3ef3 100644
--- a/spring-rewrite-commons-gradle/rewrite-gradle-parser/src/test/java/org/springframework/rewrite/gradle/ProjectParserTest.java
+++ b/spring-rewrite-commons-gradle/rewrite-gradle-parser/src/test/java/org/springframework/rewrite/gradle/ProjectParserTest.java
@@ -16,6 +16,7 @@
package org.springframework.rewrite.gradle;
import org.assertj.core.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import org.openrewrite.InMemoryExecutionContext;
@@ -34,6 +35,7 @@ import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Collections;
+import java.util.Iterator;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
@@ -47,8 +49,18 @@ public class ProjectParserTest {
private static final Options OPTIONS = new Options(Collections.emptyList(), false, Collections.emptyList(),
Integer.MAX_VALUE, Collections.emptyList());
- private Path downloadPetclinic(Path dir) throws Exception {
- unzip(new URL(
+ private static Path petclincPath;
+
+ private static Path rewriteGradleModelPath;
+
+ @BeforeAll
+ static void setupAll(@TempDir Path dir) throws Exception {
+ petclincPath = downloadPetclinic(dir.resolve("petclinic"));
+ rewriteGradleModelPath = downloadRewriteGradleToolingModel(dir.resolve("rewrite-gradle-tooling-model"));
+ }
+
+ private static Path downloadPetclinic(Path dir) throws Exception {
+ Utils.unzip(new URL(
"https://github.com/spring-projects/spring-petclinic/archive/0aa3adb56f500c41564411c32cd301affe284ecc.zip"),
dir);
return Files.list(dir)
@@ -58,55 +70,80 @@ public class ProjectParserTest {
.orElseThrow();
}
- private static void unzip(URL url, Path destDir) throws IOException {
- File dir = destDir.toFile();
- // create output directory if it doesn't exist
- if (!dir.exists())
- dir.mkdirs();
- InputStream is;
- // buffer for read and write data to file
- byte[] buffer = new byte[1024];
- try {
- is = url.openStream();
- ZipInputStream zis = new ZipInputStream(is);
- ZipEntry ze = zis.getNextEntry();
- while (ze != null) {
- if (!ze.isDirectory()) {
- String fileName = ze.getName();
- File newFile = new File(destDir + File.separator + fileName);
- System.out.println("Unzipping to " + newFile.getAbsolutePath());
- // create directories for sub directories in zip
- new File(newFile.getParent()).mkdirs();
- FileOutputStream fos = new FileOutputStream(newFile);
- int len;
- while ((len = zis.read(buffer)) > 0) {
- fos.write(buffer, 0, len);
- }
- fos.close();
- }
- // close this ZipEntry
- zis.closeEntry();
- ze = zis.getNextEntry();
- }
- // close last ZipEntry
- zis.closeEntry();
- zis.close();
- is.close();
- }
- catch (IOException e) {
- throw e;
- }
+ private static Path downloadRewriteGradleToolingModel(Path dir) throws Exception {
+ Utils.unzip(new URL(
+ "https://github.com/openrewrite/rewrite-gradle-tooling-model/archive/5907af9f3861a16361a7fc7d91b2ab57dcfea697.zip"),
+ dir);
+ return Files.list(dir)
+ .filter(Files::isDirectory)
+ .filter(p -> p.getFileName().toString().startsWith("rewrite-gradle-tooling-model-"))
+ .findFirst()
+ .orElseThrow();
}
@Test
- void sanity(@TempDir Path dir) throws Exception {
- Path petClinic = downloadPetclinic(dir.resolve("petclinic"));
+ void sanity() throws Exception {
GradleProjectData gp = SpringRewriteModelBuilder.forProjectDirectory(GradleProjectData.class,
- petClinic.toFile(), petClinic.resolve("build.gradle").toFile());
+ petclincPath.toFile(), petclincPath.resolve("build.gradle").toFile());
List sources = new ProjectParser(gp, OPTIONS, log)
.parse(new InMemoryExecutionContext(t -> Assertions.fail("Parser Error", t)))
.toList();
assertThat(sources.size()).isEqualTo(114);
}
+ @Test
+ void multiProjectRootModel() {
+ GradleProjectData gp = SpringRewriteModelBuilder.forProjectDirectory(GradleProjectData.class,
+ rewriteGradleModelPath.toFile(), rewriteGradleModelPath.resolve("build.gradle.kts").toFile());
+
+ assertThat(gp.isRootProject()).isTrue();
+ assertThat(gp.getGroup()).isEqualTo("org.openrewrite.gradle.tooling");
+ assertThat(gp.getName()).isEqualTo("rewrite-gradle-tooling-model");
+ assertThat(gp.getVersion()).isEqualTo("0.1.0-dev.0.uncommitted");
+ assertThat(gp.getPlugins().size()).isEqualTo(9);
+ assertThat(gp.getMavenRepositories().isEmpty()).isTrue();
+
+ assertThat(gp.getSubprojects().size()).isEqualTo(2);
+
+ Iterator itr = gp.getSubprojects().iterator();
+
+ GradleProjectData modelProject = itr.next();
+ assertThat(modelProject.isRootProject()).isFalse();
+ assertThat(modelProject.getGroup()).isEqualTo("org.openrewrite.gradle.tooling");
+ assertThat(modelProject.getName()).isEqualTo("model");
+ assertThat(modelProject.getVersion()).isEqualTo("unspecified");
+ assertThat(modelProject.getMavenRepositories().size()).isEqualTo(3);
+
+ GradleProjectData pluginProject = itr.next();
+ assertThat(pluginProject.isRootProject()).isFalse();
+ assertThat(pluginProject.getGroup()).isEqualTo("org.openrewrite.gradle.tooling");
+ assertThat(pluginProject.getName()).isEqualTo("plugin");
+ assertThat(pluginProject.getVersion()).isEqualTo("unspecified");
+ assertThat(pluginProject.getMavenRepositories().size()).isEqualTo(3);
+ }
+
+ @Test
+ void multiProjectSubProjectModel() {
+ GradleProjectData gp = SpringRewriteModelBuilder.forProjectDirectory(GradleProjectData.class,
+ rewriteGradleModelPath.toFile(), rewriteGradleModelPath.resolve("model/build.gradle.kts").toFile());
+
+ assertThat(gp.isRootProject()).isFalse();
+ assertThat(gp.getGroup()).isEqualTo("org.openrewrite.gradle.tooling");
+ assertThat(gp.getName()).isEqualTo("model");
+ assertThat(gp.getVersion()).isEqualTo("unspecified");
+ assertThat(gp.getMavenRepositories().size()).isEqualTo(3);
+ assertThat(gp.getSubprojects().isEmpty()).isTrue();
+ assertThat(gp.getRootProjectDir().toPath().toString().endsWith(rewriteGradleModelPath.toString())).isTrue();
+ }
+
+ @Test
+ void parseMultiProject() throws Exception {
+ GradleProjectData gp = SpringRewriteModelBuilder.forProjectDirectory(GradleProjectData.class,
+ rewriteGradleModelPath.toFile(), rewriteGradleModelPath.resolve("build.gradle").toFile());
+ List sources = new ProjectParser(gp, OPTIONS, log)
+ .parse(new InMemoryExecutionContext(t -> Assertions.fail("Parser Error", t)))
+ .toList();
+ assertThat(sources.size()).isEqualTo(48);
+ }
+
}
diff --git a/spring-rewrite-commons-gradle/rewrite-gradle-parser/src/test/java/org/springframework/rewrite/gradle/Utils.java b/spring-rewrite-commons-gradle/rewrite-gradle-parser/src/test/java/org/springframework/rewrite/gradle/Utils.java
new file mode 100644
index 0000000..550004d
--- /dev/null
+++ b/spring-rewrite-commons-gradle/rewrite-gradle-parser/src/test/java/org/springframework/rewrite/gradle/Utils.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2021 - 2023 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.springframework.rewrite.gradle;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.nio.file.Path;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+
+public class Utils {
+
+ public static void unzip(URL url, Path destDir) throws IOException {
+ File dir = destDir.toFile();
+ // create output directory if it doesn't exist
+ if (!dir.exists())
+ dir.mkdirs();
+ InputStream is;
+ // buffer for read and write data to file
+ byte[] buffer = new byte[1024];
+ try {
+ is = url.openStream();
+ ZipInputStream zis = new ZipInputStream(is);
+ ZipEntry ze = zis.getNextEntry();
+ while (ze != null) {
+ if (!ze.isDirectory()) {
+ String fileName = ze.getName();
+ File newFile = new File(destDir + File.separator + fileName);
+ System.out.println("Unzipping to " + newFile.getAbsolutePath());
+ // create directories for sub directories in zip
+ new File(newFile.getParent()).mkdirs();
+ FileOutputStream fos = new FileOutputStream(newFile);
+ int len;
+ while ((len = zis.read(buffer)) > 0) {
+ fos.write(buffer, 0, len);
+ }
+ fos.close();
+ }
+ // close this ZipEntry
+ zis.closeEntry();
+ ze = zis.getNextEntry();
+ }
+ // close last ZipEntry
+ zis.closeEntry();
+ zis.close();
+ is.close();
+ }
+ catch (IOException e) {
+ throw e;
+ }
+ }
+
+}
diff --git a/spring-rewrite-commons-gradle/rewrite-gradle-parser/src/test/java/org/springframework/rewrite/gradle/model/GradleProjectDataTest.java b/spring-rewrite-commons-gradle/rewrite-gradle-parser/src/test/java/org/springframework/rewrite/gradle/model/GradleProjectDataTest.java
index 3778f97..df4942a 100644
--- a/spring-rewrite-commons-gradle/rewrite-gradle-parser/src/test/java/org/springframework/rewrite/gradle/model/GradleProjectDataTest.java
+++ b/spring-rewrite-commons-gradle/rewrite-gradle-parser/src/test/java/org/springframework/rewrite/gradle/model/GradleProjectDataTest.java
@@ -17,10 +17,13 @@ package org.springframework.rewrite.gradle.model;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
+import org.springframework.rewrite.gradle.Utils;
import java.io.InputStream;
+import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
+import java.util.Iterator;
import java.util.Objects;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/spring-rewrite-commons-gradle/rewrite-gradle-plugin/pom.xml b/spring-rewrite-commons-gradle/rewrite-gradle-plugin/pom.xml
index ba91fdd..8849466 100644
--- a/spring-rewrite-commons-gradle/rewrite-gradle-plugin/pom.xml
+++ b/spring-rewrite-commons-gradle/rewrite-gradle-plugin/pom.xml
@@ -10,6 +10,7 @@
rewrite-gradle-plugin
+ Spring Rewrite Gradle Plugin
17