Skip to content

Commit

Permalink
Adopt Gradle Project Parser from OR
Browse files Browse the repository at this point in the history
  • Loading branch information
BoykoAlex committed Nov 2, 2023
1 parent 504c658 commit 708692d
Show file tree
Hide file tree
Showing 21 changed files with 1,211 additions and 33 deletions.
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

0 comments on commit 708692d

Please sign in to comment.