Skip to content

Adopt Gradle Project Parser from OR #987

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from
Closed
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
113 changes: 111 additions & 2 deletions sbm-support-rewrite/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,11 @@
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring-boot.version>3.1.1</spring-boot.version>
<rewrite.version>8.1.6</rewrite.version>
<rewrite-spring.version>5.0.5</rewrite-spring.version>
<rewrite.version>8.9.0-SNAPSHOT</rewrite.version>
<rewrite-spring.version>5.0.11</rewrite-spring.version>
<rewrite-maven-plugin.version>5.3.2</rewrite-maven-plugin.version>
<rewrite-gradle-plugin.version>6.4.0-SNAPSHOT</rewrite-gradle-plugin.version>
<gradle-core.version>6.1.1</gradle-core.version>
<maven.version>3.9.1</maven.version>
<maven-resolver.version>1.9.7</maven-resolver.version>
<maven-wagon-http.version>3.5.3</maven-wagon-http.version>
Expand Down Expand Up @@ -74,6 +76,14 @@
</comments>
</license>
</licenses>

<repositories>
<repository>
<id>gradle-repo</id>
<name>Gradle Tooling Repo</name>
<url>https://repo.gradle.org/gradle/libs-releases</url>
</repository>
</repositories>

<dependencyManagement>
<dependencies>
Expand Down Expand Up @@ -132,11 +142,110 @@
<artifactId>rewrite-xml</artifactId>
<version>${rewrite.version}</version>
</dependency>
<dependency>
<groupId>org.openrewrite</groupId>
<artifactId>rewrite-groovy</artifactId>
<version>${rewrite.version}</version>
</dependency>
<dependency>
<groupId>org.openrewrite</groupId>
<artifactId>rewrite-polyglot</artifactId>
<version>1.8.1</version>
</dependency>
<dependency>
<groupId>org.openrewrite.maven</groupId>
<artifactId>rewrite-maven-plugin</artifactId>
<version>${rewrite-maven-plugin.version}</version>
</dependency>

<dependency>
<groupId>org.gradle</groupId>
<artifactId>gradle-tooling-api</artifactId>
<version>${gradle-tooling.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.gradle</groupId>
<artifactId>gradle-base-services</artifactId>
<version>${gradle-core.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.gradle</groupId>
<artifactId>gradle-core-api</artifactId>
<version>${gradle-core.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.gradle</groupId>
<artifactId>gradle-language-groovy</artifactId>
<version>${gradle-core.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.gradle</groupId>
<artifactId>gradle-language-java</artifactId>
<version>${gradle-core.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.gradle</groupId>
<artifactId>gradle-logging</artifactId>
<version>${gradle-core.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.gradle</groupId>
<artifactId>gradle-messaging</artifactId>
<version>${gradle-core.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.gradle</groupId>
<artifactId>gradle-native</artifactId>
<version>${gradle-core.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.gradle</groupId>
<artifactId>gradle-process-services</artifactId>
<version>${gradle-core.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.gradle</groupId>
<artifactId>gradle-resources</artifactId>
<version>${gradle-core.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.gradle</groupId>
<artifactId>gradle-testing-base</artifactId>
<version>${gradle-core.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.gradle</groupId>
<artifactId>gradle-testing-jvm</artifactId>
<version>${gradle-core.version}</version>
<scope>runtime</scope>
</dependency>

<dependency>
<groupId>org.gradle</groupId>
<artifactId>gradle-tooling-api</artifactId>
<version>7.6</version>
</dependency>
<dependency>
<groupId>org.openrewrite.gradle.tooling</groupId>
<artifactId>model</artifactId>
<version>1.4.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.openrewrite.gradle.tooling</groupId>
<artifactId>parser</artifactId>
<version>1.4.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package org.springframework.sbm.parsers;

import java.io.File;
import java.util.Collections;
import java.util.List;
import java.util.stream.Stream;

import org.openrewrite.ExecutionContext;
import org.openrewrite.SourceFile;
import org.openrewrite.gradle.parser.ProjectParser;
import org.openrewrite.gradle.toolingapi.OpenRewriteModelBuilder;
import org.openrewrite.gradle.toolingapi.parser.GradleProjectData;
import org.openrewrite.style.NamedStyles;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class RewriteGradleProjectParser {

private static final List<String> PLAIN_TEXT_MASKS = List.of(
"**gradlew",
"**META-INF/services/**",
"**/META-INF/spring.factories",
"**/META-INF/spring/**",
"**.bash",
"**.bat",
"**/CODEOWNERS",
"**Dockerfile",
"**.gitattributes",
"**.gitignore",
"**.java-version",
"**.jsp",
"**.ksh",
"**.kts",
"**/lombok.config",
"**.qute.java",
"**.sdkmanrc",
"**.sh",
"**.sql",
"**.txt"
);
private static final Logger log = LoggerFactory.getLogger(RewriteGradleProjectParser.class);


public Stream<SourceFile> parse(File dir, File buildFile, ExecutionContext context) {
GradleProjectData projectData = OpenRewriteModelBuilder.forProjectDirectory(GradleProjectData.class, dir, buildFile);
ProjectParser parser = new ProjectParser(projectData, new ProjectParser.Options() {

@Override
public List<NamedStyles> getStyles() {
return Collections.emptyList();
}

@Override
public int getSizeThresholdMb() {
return Integer.MAX_VALUE;
}

@Override
public List<String> getPlainTextMasks() {
return PLAIN_TEXT_MASKS;
}

@Override
public boolean getLogCompilationWarningsAndErrors() {
return false;
}

@Override
public List<String> getExclusions() {
return Collections.emptyList();
}
}, log);

return parser.parse(context);

}

}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
import org.junitpioneer.jupiter.Issue;
import org.openrewrite.ExecutionContext;
import org.openrewrite.InMemoryExecutionContext;
import org.openrewrite.Parser;
import org.openrewrite.Parser.Input;
import org.openrewrite.SourceFile;
import org.openrewrite.java.marker.JavaProject;
import org.openrewrite.java.marker.JavaSourceSet;
Expand Down Expand Up @@ -282,13 +282,18 @@ void parseComplexMavenReactorProject() {
RewriteMavenProjectParser projectParser = sut;
ExecutionContext executionContext = new InMemoryExecutionContext(t -> t.printStackTrace());
List<String> parsedFiles = new ArrayList<>();
ParsingExecutionContextView.view(executionContext).setParsingListener((Parser.Input input, SourceFile sourceFile) -> {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT)
.withLocale(Locale.US)
.withZone(ZoneId.systemDefault());
String format = dateTimeFormatter.format(Instant.now());
System.out.println("%s: Parsed file: %s".formatted(format, sourceFile.getSourcePath()));
parsedFiles.add(sourceFile.getSourcePath().toString());
ParsingExecutionContextView.view(executionContext).setParsingListener(new ParsingEventListener() {

@Override
public void parsed(Input input, SourceFile sourceFile) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT)
.withLocale(Locale.US)
.withZone(ZoneId.systemDefault());
String format = dateTimeFormatter.format(Instant.now());
System.out.println("%s: Parsed file: %s".formatted(format, sourceFile.getSourcePath()));
parsedFiles.add(sourceFile.getSourcePath().toString());
}

});
RewriteProjectParsingResult parsingResult = projectParser.parse(
projectRoot,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,25 @@
*/
package org.springframework.sbm.parsers;

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;

import java.nio.file.Path;
import java.time.Instant;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import org.intellij.lang.annotations.Language;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import org.junitpioneer.jupiter.Issue;
import org.openrewrite.ExecutionContext;
import org.openrewrite.InMemoryExecutionContext;
import org.openrewrite.Parser;
import org.openrewrite.Parser.Input;
import org.openrewrite.SourceFile;
import org.openrewrite.tree.ParsingEventListener;
import org.openrewrite.tree.ParsingExecutionContextView;
Expand All @@ -31,18 +42,6 @@
import org.springframework.sbm.test.util.DummyResource;
import org.springframework.sbm.utils.ResourceUtil;

import java.nio.file.Path;
import java.time.Instant;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;

/**
* @author Fabian Krüger
*/
Expand Down Expand Up @@ -107,13 +106,18 @@ void parseComplexMavenReactorProject2(@TempDir Path tempDir) {
);
ExecutionContext executionContext = new InMemoryExecutionContext(t -> t.printStackTrace());
List<String> parsedFiles = new ArrayList<>();
ParsingExecutionContextView.view(executionContext).setParsingListener((Parser.Input input, SourceFile sourceFile) -> {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT)
.withLocale(Locale.US)
.withZone(ZoneId.systemDefault());
String format = dateTimeFormatter.format(Instant.now());
System.out.println("%s: Parsed file: %s".formatted(format, sourceFile.getSourcePath()));
parsedFiles.add(sourceFile.getSourcePath().toString());
ParsingExecutionContextView.view(executionContext).setParsingListener(new ParsingEventListener() {

@Override
public void parsed(Input input, SourceFile sourceFile) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT)
.withLocale(Locale.US)
.withZone(ZoneId.systemDefault());
String format = dateTimeFormatter.format(Instant.now());
System.out.println("%s: Parsed file: %s".formatted(format, sourceFile.getSourcePath()));
parsedFiles.add(sourceFile.getSourcePath().toString());
}

});

// TODO: Provide Scanner with excludes
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,34 @@
*/
package org.springframework.sbm.parsers.gradle;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.fail;

import java.io.File;
import java.nio.file.Path;
import java.util.List;
import java.util.stream.Collectors;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.openrewrite.InMemoryExecutionContext;
import org.openrewrite.SourceFile;
import org.springframework.sbm.parsers.RewriteGradleProjectParser;

/**
* @author Fabian Krüger
*/
public class RewriteGradleParserTest {

private final RewriteGradleProjectParser sut = new RewriteGradleProjectParser();


@Test
@DisplayName("Should ")
void should() {


File baseDir = Path.of("./testcode/gradle-projects/gs-rest-service-complete").toAbsolutePath().normalize().toFile();
File buildFile = new File(baseDir, "build.gradle");
List<SourceFile> files = sut.parse(baseDir, buildFile, new InMemoryExecutionContext(t -> fail(t.getMessage()))).collect(Collectors.toList());
assertThat(files).hasSize(16);
}
}
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.2/maven-wrapper-0.5.2.tar.gz
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
plugins {
id 'org.springframework.boot' version '3.1.4'
id 'io.spring.dependency-management' version '1.1.3'
id 'java'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'

repositories {
mavenCentral()
}

dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation('org.springframework.boot:spring-boot-starter-test')
}

test {
useJUnitPlatform()
}
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Loading