@ -1,5 +1,5 @@
/ *
/ *
* Copyright 2012 - 20 19 the original author or authors .
* Copyright 2012 - 20 22 the original author or authors .
*
*
* Licensed under the Apache License , Version 2.0 ( the "License" ) ;
* Licensed under the Apache License , Version 2.0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
* you may not use this file except in compliance with the License .
@ -17,20 +17,21 @@
package org.springframework.boot.autoconfigure.condition ;
package org.springframework.boot.autoconfigure.condition ;
import java.util.ArrayList ;
import java.util.ArrayList ;
import java.util.HashMap ;
import java.util.List ;
import java.util.List ;
import java.util.Map ;
import java.util.Map ;
import java.util.stream.Collectors ;
import org.springframework.boot.autoconfigure.condition.ConditionMessage.Style ;
import org.springframework.boot.autoconfigure.condition.ConditionMessage.Style ;
import org.springframework.context.annotation.Condition ;
import org.springframework.context.annotation.Condition ;
import org.springframework.context.annotation.ConditionContext ;
import org.springframework.context.annotation.ConditionContext ;
import org.springframework.core.Ordered ;
import org.springframework.core.Ordered ;
import org.springframework.core.annotation.AnnotationAttributes ;
import org.springframework.core.annotation.AnnotationAttributes ;
import org.springframework.core.annotation.MergedAnnotation ;
import org.springframework.core.annotation.MergedAnnotationPredicates ;
import org.springframework.core.annotation.Order ;
import org.springframework.core.annotation.Order ;
import org.springframework.core.env.PropertyResolver ;
import org.springframework.core.env.PropertyResolver ;
import org.springframework.core.type.AnnotatedTypeMetadata ;
import org.springframework.core.type.AnnotatedTypeMetadata ;
import org.springframework.util.Assert ;
import org.springframework.util.Assert ;
import org.springframework.util.MultiValueMap ;
import org.springframework.util.StringUtils ;
import org.springframework.util.StringUtils ;
/ * *
/ * *
@ -47,8 +48,10 @@ class OnPropertyCondition extends SpringBootCondition {
@Override
@Override
public ConditionOutcome getMatchOutcome ( ConditionContext context , AnnotatedTypeMetadata metadata ) {
public ConditionOutcome getMatchOutcome ( ConditionContext context , AnnotatedTypeMetadata metadata ) {
List < AnnotationAttributes > allAnnotationAttributes = annotationAttributesFromMultiValueMap (
List < AnnotationAttributes > allAnnotationAttributes = metadata . getAnnotations ( )
metadata . getAllAnnotationAttributes ( ConditionalOnProperty . class . getName ( ) ) ) ;
. stream ( ConditionalOnProperty . class . getName ( ) )
. filter ( MergedAnnotationPredicates . unique ( MergedAnnotation : : getMetaTypes ) )
. map ( MergedAnnotation : : asAnnotationAttributes ) . collect ( Collectors . toList ( ) ) ;
List < ConditionMessage > noMatch = new ArrayList < > ( ) ;
List < ConditionMessage > noMatch = new ArrayList < > ( ) ;
List < ConditionMessage > match = new ArrayList < > ( ) ;
List < ConditionMessage > match = new ArrayList < > ( ) ;
for ( AnnotationAttributes annotationAttributes : allAnnotationAttributes ) {
for ( AnnotationAttributes annotationAttributes : allAnnotationAttributes ) {
@ -61,29 +64,6 @@ class OnPropertyCondition extends SpringBootCondition {
return ConditionOutcome . match ( ConditionMessage . of ( match ) ) ;
return ConditionOutcome . match ( ConditionMessage . of ( match ) ) ;
}
}
private List < AnnotationAttributes > annotationAttributesFromMultiValueMap (
MultiValueMap < String , Object > multiValueMap ) {
List < Map < String , Object > > maps = new ArrayList < > ( ) ;
multiValueMap . forEach ( ( key , value ) - > {
for ( int i = 0 ; i < value . size ( ) ; i + + ) {
Map < String , Object > map ;
if ( i < maps . size ( ) ) {
map = maps . get ( i ) ;
}
else {
map = new HashMap < > ( ) ;
maps . add ( map ) ;
}
map . put ( key , value . get ( i ) ) ;
}
} ) ;
List < AnnotationAttributes > annotationAttributes = new ArrayList < > ( maps . size ( ) ) ;
for ( Map < String , Object > map : maps ) {
annotationAttributes . add ( AnnotationAttributes . fromMap ( map ) ) ;
}
return annotationAttributes ;
}
private ConditionOutcome determineOutcome ( AnnotationAttributes annotationAttributes , PropertyResolver resolver ) {
private ConditionOutcome determineOutcome ( AnnotationAttributes annotationAttributes , PropertyResolver resolver ) {
Spec spec = new Spec ( annotationAttributes ) ;
Spec spec = new Spec ( annotationAttributes ) ;
List < String > missingProperties = new ArrayList < > ( ) ;
List < String > missingProperties = new ArrayList < > ( ) ;