diff --git a/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/TypeUtils.java b/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/TypeUtils.java index a3be2fd1c6..f883b53887 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/TypeUtils.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/TypeUtils.java @@ -19,7 +19,9 @@ package org.springframework.boot.configurationprocessor; import java.util.Collection; import java.util.Collections; import java.util.HashMap; +import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import javax.annotation.processing.ProcessingEnvironment; import javax.lang.model.element.Element; @@ -185,7 +187,14 @@ class TypeUtils { return getQualifiedName(enclosingElement) + "$" + type.asElement().getSimpleName().toString(); } - return type.toString(); + StringBuilder sb = new StringBuilder(); + sb.append(getQualifiedName(type.asElement())); + if (!type.getTypeArguments().isEmpty()) { + List parameters = type.getTypeArguments().stream() + .map(TypeMirror::toString).collect(Collectors.toList()); + sb.append("<").append(String.join(",", parameters)).append(">"); + } + return sb.toString(); } @Override diff --git a/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationprocessor/ConfigurationMetadataAnnotationProcessorTests.java b/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationprocessor/ConfigurationMetadataAnnotationProcessorTests.java index 87af4e0e6a..394e0fbf60 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationprocessor/ConfigurationMetadataAnnotationProcessorTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationprocessor/ConfigurationMetadataAnnotationProcessorTests.java @@ -267,6 +267,8 @@ public class ConfigurationMetadataAnnotationProcessorTests { "java.util.Collection")); assertThat(metadata).has(Metadata.withProperty("collection.doubles", "java.util.List")); + assertThat(metadata).has(Metadata.withProperty("collection.names-to-holders", + "java.util.Map>")); } @Test diff --git a/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationsample/simple/SimpleCollectionProperties.java b/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationsample/simple/SimpleCollectionProperties.java index e8c627f712..5e75e92211 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationsample/simple/SimpleCollectionProperties.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationsample/simple/SimpleCollectionProperties.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2017 the original author or authors. + * 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. @@ -45,6 +45,8 @@ public class SimpleCollectionProperties { private final List doubles = new ArrayList<>(); + private final Map> namesToHolders = new HashMap<>(); + public Map getIntegersToNames() { return this.integersToNames; } @@ -81,4 +83,18 @@ public class SimpleCollectionProperties { return this.doubles; } + public Map> getNamesToHolders() { + return this.namesToHolders; + } + + public static class Holder { + + private T target; + + public void setTarget(T target) { + this.target = target; + } + + } + }