Skip to content

Commit

Permalink
Gradle: handle add and remove java dependency management commands
Browse files Browse the repository at this point in the history
Fixes #1862
  • Loading branch information
murdos committed Sep 1, 2023
1 parent 6504b7e commit dd5d4b0
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import tech.jhipster.lite.module.domain.javabuild.command.RemoveJavaDependencyManagement;
import tech.jhipster.lite.module.domain.javabuild.command.SetVersion;
import tech.jhipster.lite.module.domain.javadependency.JavaDependency;
import tech.jhipster.lite.module.domain.javadependency.JavaDependencyScope;
import tech.jhipster.lite.module.domain.properties.JHipsterProjectFolder;
import tech.jhipster.lite.module.domain.replacement.ContentReplacers;
import tech.jhipster.lite.module.domain.replacement.MandatoryFileReplacer;
Expand Down Expand Up @@ -65,18 +66,22 @@ public void handle(AddDirectJavaDependency command) {
Assert.notNull(COMMAND, command);

versionsCatalog.addLibrary(command.dependency());
addJavaDependencyToBuildGradle(command.dependency());
addDependencyToBuildGradle(command.dependency());
}

private void addJavaDependencyToBuildGradle(JavaDependency dependency) {
private void addDependencyToBuildGradle(JavaDependency dependency) {
GradleDependencyScope gradleScope = gradleDependencyScope(dependency);

String libraryVersionCatalogReference = "libs.%s".formatted(VersionsCatalog.dependencySlug(dependency).replace("-", "."));
String dependencyDeclaration = dependency.scope() == JavaDependencyScope.IMPORT
? "%s%s(platform(%s))".formatted(indentation.times(1), gradleScope.command(), libraryVersionCatalogReference)
: "%s%s(%s)".formatted(indentation.times(1), gradleScope.command(), libraryVersionCatalogReference);
MandatoryReplacer replacer = new MandatoryReplacer(
new RegexNeedleBeforeReplacer(
(contentBeforeReplacement, newText) -> !contentBeforeReplacement.contains(newText),
gradleScope == GradleDependencyScope.TEST_IMPLEMENTATION ? GRADLE_TEST_DEPENDENCY_NEEDLE : GRADLE_DEPENDENCY_NEEDLE
),
"%s%s(libs.%s)".formatted(indentation.times(1), gradleScope.command(), VersionsCatalog.dependencySlug(dependency).replace("-", "."))
dependencyDeclaration
);
fileReplacer.handle(projectFolder, ContentReplacers.of(new MandatoryFileReplacer(new JHipsterProjectFilePath(BUILD_GRADLE_FILE), replacer)));
}
Expand All @@ -92,32 +97,32 @@ private static GradleDependencyScope gradleDependencyScope(JavaDependency depend

@Override
public void handle(RemoveDirectJavaDependency command) {
versionsCatalog.retrieveDependencySlugsFrom(command.dependency()).forEach(this::removeJavaDependencyFromBuildGradle);
versionsCatalog.retrieveDependencySlugsFrom(command.dependency()).forEach(this::removeDependencyFromBuildGradle);
versionsCatalog.removeLibrary(command.dependency());
}

private void removeJavaDependencyFromBuildGradle(DependencySlug dependencySlug) {
private void removeDependencyFromBuildGradle(DependencySlug dependencySlug) {
String scopePattern = Stream.of(GradleDependencyScope.values())
.map(GradleDependencyScope::command)
.collect(Collectors.joining("|", "(", ")"));
Pattern dependencyLinePattern = Pattern.compile(
"^\\s+%s\\(libs\\.%s\\)$".formatted(scopePattern, dependencySlug.slug().replace("-", "\\.")),
"^\\s+%s\\((platform\\()?libs\\.%s\\)?\\)$".formatted(scopePattern, dependencySlug.slug().replace("-", "\\.")),
Pattern.MULTILINE
);
MandatoryReplacer replacer = new MandatoryReplacer(new RegexReplacer(always(), dependencyLinePattern), "");
fileReplacer.handle(projectFolder, ContentReplacers.of(new MandatoryFileReplacer(new JHipsterProjectFilePath(BUILD_GRADLE_FILE), replacer)));
}

@Override
@ExcludeFromGeneratedCodeCoverage(reason = "Not yet implemented")
public void handle(RemoveJavaDependencyManagement command) {
throw new NotImplementedException(NOT_YET_IMPLEMENTED);
versionsCatalog.retrieveDependencySlugsFrom(command.dependency()).forEach(this::removeDependencyFromBuildGradle);
versionsCatalog.removeLibrary(command.dependency());
}

@Override
@ExcludeFromGeneratedCodeCoverage(reason = "Not yet implemented")
public void handle(AddJavaDependencyManagement command) {
throw new NotImplementedException(NOT_YET_IMPLEMENTED);
versionsCatalog.addLibrary(command.dependency());
addDependencyToBuildGradle(command.dependency());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ void shouldIncludeVersionRefInLibrariesSectionOfTomlVersionCatalog() {
""");
}

@EnumSource(value = JavaDependencyScope.class, mode = EXCLUDE, names = {"TEST", "RUNTIME", "PROVIDED"})
@EnumSource(value = JavaDependencyScope.class, mode = EXCLUDE, names = {"TEST", "RUNTIME", "PROVIDED", "IMPORT"})
@ParameterizedTest
void shouldAddImplementationDependencyInBuildGradleFileForScope(JavaDependencyScope scope) {
JavaDependency dependency = javaDependency()
Expand Down Expand Up @@ -258,6 +258,68 @@ void shouldRemoveProvidedDependencyInBuildGradleFile() {
}
}

@Nested
class HandleAddJavaDependencyManagement {

private final JHipsterProjectFolder projectFolder = projectFrom("src/test/resources/projects/empty-gradle");

@Test
void shouldAddEntryInLibrariesSectionToExistingTomlVersionCatalog() {
new GradleCommandHandler(Indentation.DEFAULT, projectFolder).handle(new AddJavaDependencyManagement(springBootDependencyManagement()));

assertThat(versionCatalogContent(projectFolder))
.contains("""
[libraries.spring-boot-dependencies]
\t\tname = "spring-boot-dependencies"
\t\tgroup = "org.springframework.boot"
""");

assertThat(versionCatalogContent(projectFolder))
.contains("""
[libraries.spring-boot-dependencies.version]
\t\t\tref = "spring-boot"
""");
}

@Test
void shouldAddImplementationDependencyInBuildGradleFileForScope() {
new GradleCommandHandler(Indentation.DEFAULT, projectFolder).handle(new AddJavaDependencyManagement(springBootDependencyManagement()));

assertThat(buildGradleContent(projectFolder)).contains("implementation(platform(libs.spring.boot.dependencies))");
}
}

@Nested
class HandleRemoveJavaDependencyManagement {

private final JHipsterProjectFolder projectFolder = projectFrom("src/test/resources/projects/empty-gradle");

@Test
void shouldRemoveEntryInLibrariesSection() {
GradleCommandHandler gradleCommandHandler = new GradleCommandHandler(Indentation.DEFAULT, projectFolder);
gradleCommandHandler.handle(new AddJavaDependencyManagement(springBootDependencyManagement()));

gradleCommandHandler.handle(new RemoveJavaDependencyManagement(springBootDependencyManagement().id()));

assertThat(versionCatalogContent(projectFolder))
.doesNotContain("[libraries.spring-boot-dependencies]")
.doesNotContain("""
\t\tname = "spring-boot-dependencies"
\t\tgroup = "org.springframework.boot"
""");
}

@Test
void shouldRemoveDependencyInBuildGradleFile() {
GradleCommandHandler gradleCommandHandler = new GradleCommandHandler(Indentation.DEFAULT, projectFolder);
gradleCommandHandler.handle(new AddJavaDependencyManagement(springBootDependencyManagement()));

gradleCommandHandler.handle(new RemoveJavaDependencyManagement(springBootDependencyManagement().id()));

assertThat(buildGradleContent(projectFolder)).doesNotContain("implementation(platform(libs.spring.boot.dependencies))");
}
}

private static String buildGradleContent(JHipsterProjectFolder projectFolder) {
return content(Paths.get(projectFolder.get()).resolve("build.gradle.kts"));
}
Expand Down
3 changes: 2 additions & 1 deletion tests-ci/generate.sh
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,8 @@ elif [[ $application == 'gradleapp' ]]; then
applyModules \
"init" \
"gradle-java" \
"java-base"
"java-base" \
"pagination-domain"

elif [[ $application == 'fullapp' ]]; then
spring_boot_mvc
Expand Down

0 comments on commit dd5d4b0

Please sign in to comment.