Skip to content

Commit

Permalink
Merge pull request #600 from sdeleuze:jackson-kotlin
Browse files Browse the repository at this point in the history
* pr/600:
  Polish "Add jackson-module-kotlin dependency when appropriate"
  Add jackson-module-kotlin dependency when appropriate
  • Loading branch information
snicoll committed Feb 12, 2018
2 parents e612aab + 15fb6eb commit 378623f
Show file tree
Hide file tree
Showing 3 changed files with 135 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
/*
* Copyright 2012-2018 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
*
* http://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 io.spring.initializr.service.extension;

import io.spring.initializr.generator.ProjectRequest;
import io.spring.initializr.generator.ProjectRequestPostProcessor;
import io.spring.initializr.metadata.Dependency;
import io.spring.initializr.metadata.InitializrMetadata;

import org.springframework.stereotype.Component;

/**
* A {@link ProjectRequestPostProcessor} that automatically adds "jackson-module-kotlin"
* when Kotlin is used and a dependency has the "json" facet.
*
* @author Sebastien Deleuze
*/
@Component
class JacksonKotlinRequestPostProcessor implements ProjectRequestPostProcessor {

private final Dependency jacksonModuleKotlin;

public JacksonKotlinRequestPostProcessor() {
this.jacksonModuleKotlin = Dependency.withId("jackson-module-kotlin",
"com.fasterxml.jackson.module", "jackson-module-kotlin");
}

@Override
public void postProcessAfterResolution(ProjectRequest request,
InitializrMetadata metadata) {
if (request.getFacets().contains("json")
&& "kotlin".equals(request.getLanguage())) {
request.getResolvedDependencies().add(this.jacksonModuleKotlin);
}
}

}
7 changes: 7 additions & 0 deletions initializr-service/src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,7 @@ initializr:
weight: 100
facets:
- web
- json
links:
- rel: guide
href: https://spring.io/guides/gs/rest-service/
Expand All @@ -301,9 +302,13 @@ initializr:
versionRange: 2.0.0.M1
description: Reactive web development with Netty and Spring WebFlux
weight: 90
facets:
- json
- name: Rest Repositories
id: data-rest
weight: 10
facets:
- json
description: Exposing Spring Data repositories over REST via spring-data-rest-webmvc
links:
- rel: guide
Expand Down Expand Up @@ -353,6 +358,8 @@ initializr:
- name: Jersey (JAX-RS)
id: jersey
description: RESTful Web Services framework with support of JAX-RS
facets:
- json
versionRange: 1.2.0.RELEASE
links:
- rel: reference
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
/*
* Copyright 2012-2017 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
*
* http://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 io.spring.initializr.service.extension;

import io.spring.initializr.generator.ProjectRequest;
import io.spring.initializr.metadata.Dependency;
import org.junit.Test;

/**
* Tests for {@link JacksonKotlinRequestPostProcessor}.
*
* @author Sebastien Deleuze
* @author Stephane Nicoll
*/
public class JacksonKotlinRequestPostProcessorTests
extends AbstractRequestPostProcessorTests {

static final Dependency JACKSON_KOTLIN = Dependency.withId("jackson-module-kotlin",
"com.fasterxml.jackson.module", "jackson-module-kotlin");

static final Dependency REACTOR_TEST = Dependency.create(
"io.projectreactor", "reactor-test", null, Dependency.SCOPE_TEST);

@Test
public void jacksonModuleKotlinIsAdded() {
ProjectRequest request = createProjectRequest("webflux");
request.setBootVersion("2.0.0.M2");
request.setLanguage("kotlin");
generateMavenPom(request)
.hasSpringBootStarterDependency("webflux")
.hasDependency(JACKSON_KOTLIN)
.hasSpringBootStarterTest()
.hasDependency(REACTOR_TEST)
.hasDependency("org.jetbrains.kotlin", "kotlin-reflect")
.hasDependency("org.jetbrains.kotlin", "kotlin-stdlib-jdk8")
.hasDependenciesCount(6);
}

@Test
public void jacksonModuleKotlinIsNotAddedWithoutKotlin() {
ProjectRequest request = createProjectRequest("webflux");
request.setBootVersion("2.0.0.M2");
generateMavenPom(request)
.hasSpringBootStarterDependency("webflux")
.hasSpringBootStarterTest()
.hasDependency(REACTOR_TEST)
.hasDependenciesCount(3);
}

@Test
public void jacksonModuleKotlinIsNotAddedWithoutJsonFacet() {
ProjectRequest request = createProjectRequest("actuator");
request.setBootVersion("2.0.0.M2");
request.setLanguage("kotlin");
generateMavenPom(request)
.hasSpringBootStarterDependency("actuator")
.hasSpringBootStarterTest()
.hasDependency("org.jetbrains.kotlin", "kotlin-reflect")
.hasDependency("org.jetbrains.kotlin", "kotlin-stdlib-jdk8")
.hasDependenciesCount(4);
}

}

0 comments on commit 378623f

Please sign in to comment.