Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
S
spring-boot
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
DEMO
spring-boot
Commits
563d7d70
Commit
563d7d70
authored
May 16, 2018
by
Stephane Nicoll
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Polish "Respect lombok.AccessLevel attributes"
Closes gh-13175
parent
3699132c
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
87 additions
and
178 deletions
+87
-178
ConfigurationMetadataAnnotationProcessor.java
...onprocessor/ConfigurationMetadataAnnotationProcessor.java
+27
-21
ConfigurationMetadataAnnotationProcessorTests.java
...cessor/ConfigurationMetadataAnnotationProcessorTests.java
+18
-21
LombokAccessLevelOverwriteDataProperties.java
...mple/lombok/LombokAccessLevelOverwriteDataProperties.java
+16
-15
LombokAccessLevelOverwriteDefaultProperties.java
...e/lombok/LombokAccessLevelOverwriteDefaultProperties.java
+6
-35
LombokAccessLevelOverwriteExplicitProperties.java
.../lombok/LombokAccessLevelOverwriteExplicitProperties.java
+6
-35
LombokAccessLevelProperties.java
...nfigurationsample/lombok/LombokAccessLevelProperties.java
+8
-51
LombokExplicitProperties.java
.../configurationsample/lombok/LombokExplicitProperties.java
+6
-0
No files found.
spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/ConfigurationMetadataAnnotationProcessor.java
View file @
563d7d70
...
...
@@ -77,10 +77,7 @@ public class ConfigurationMetadataAnnotationProcessor extends AbstractProcessor
static
final
String
LOMBOK_SETTER_ANNOTATION
=
"lombok.Setter"
;
private
static
final
String
LOMBOK_ACCESS_LEVEL
=
"lombok.AccessLevel"
;
private
static
final
String
LOMBOK_ACCESS_LEVEL_PUBLIC
=
LOMBOK_ACCESS_LEVEL
+
".PUBLIC"
;
static
final
String
LOMBOK_ACCESS_LEVEL_PUBLIC
=
"PUBLIC"
;
private
MetadataStore
metadataStore
;
...
...
@@ -308,35 +305,44 @@ public class ConfigurationMetadataAnnotationProcessor extends AbstractProcessor
}
private
boolean
isLombokField
(
VariableElement
field
,
TypeElement
element
)
{
return
hasLombokPublic
Method
(
field
,
element
,
LOMBOK_GETTER_ANNOTATION
);
return
hasLombokPublic
Accessor
(
field
,
element
,
true
);
}
private
boolean
hasLombokSetter
(
VariableElement
field
,
TypeElement
element
)
{
return
!
field
.
getModifiers
().
contains
(
Modifier
.
FINAL
)
&&
hasLombokPublicMethod
(
field
,
element
,
LOMBOK_SETTER_ANNOTATION
);
}
private
boolean
hasLombokPublicMethod
(
VariableElement
field
,
TypeElement
element
,
String
lombokMethodAnnotation
)
{
AnnotationMirror
lombokMethodAnnotationOnField
=
getAnnotation
(
field
,
lombokMethodAnnotation
);
&&
hasLombokPublicAccessor
(
field
,
element
,
false
);
}
/**
* Determine if the specified {@link VariableElement field} defines a public accessor
* using lombok annotations.
* @param field the field to inspect
* @param element the parent element of the field (i.e. its holding class)
* @param getter {@code true} to look for the read accessor, {@code false} for the
* write accessor
* @return {@code true} if this field is a public accessor of the specified type
*/
private
boolean
hasLombokPublicAccessor
(
VariableElement
field
,
TypeElement
element
,
boolean
getter
)
{
String
annotation
=
(
getter
?
LOMBOK_GETTER_ANNOTATION
:
LOMBOK_SETTER_ANNOTATION
);
AnnotationMirror
lombokMethodAnnotationOnField
=
getAnnotation
(
field
,
annotation
);
if
(
lombokMethodAnnotationOnField
!=
null
)
{
return
is
Lombok
Public
(
lombokMethodAnnotationOnField
);
return
is
AccessLevel
Public
(
lombokMethodAnnotationOnField
);
}
AnnotationMirror
lombokMethodAnnotationOnElement
=
getAnnotation
(
element
,
lombokMethodA
nnotation
);
a
nnotation
);
if
(
lombokMethodAnnotationOnElement
!=
null
)
{
return
is
Lombok
Public
(
lombokMethodAnnotationOnElement
);
return
is
AccessLevel
Public
(
lombokMethodAnnotationOnElement
);
}
return
hasAnnotation
(
element
,
LOMBOK_DATA_ANNOTATION
);
}
private
boolean
isLombokPublic
(
AnnotationMirror
lombokAnnotation
)
{
return
lombokAnnotation
.
getElementValues
().
values
().
stream
()
.
noneMatch
(
e
->
e
.
toString
().
startsWith
(
LOMBOK_ACCESS_LEVEL
)
&&
!
e
.
toString
().
equals
(
LOMBOK_ACCESS_LEVEL_PUBLIC
));
private
boolean
isAccessLevelPublic
(
AnnotationMirror
lombokAnnotation
)
{
Map
<
String
,
Object
>
values
=
getAnnotationElementValues
(
lombokAnnotation
);
Object
value
=
values
.
get
(
"value"
);
return
(
value
==
null
||
value
.
toString
().
equals
(
LOMBOK_ACCESS_LEVEL_PUBLIC
));
}
private
void
processNestedType
(
String
prefix
,
TypeElement
element
,
...
...
spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationprocessor/ConfigurationMetadataAnnotationProcessorTests.java
View file @
563d7d70
...
...
@@ -488,6 +488,21 @@ public class ConfigurationMetadataAnnotationProcessorTests {
assertSimpleLombokProperties
(
metadata
,
LombokSimpleProperties
.
class
,
"simple"
);
}
@Test
public
void
lombokExplicitProperties
()
throws
Exception
{
ConfigurationMetadata
metadata
=
compile
(
LombokExplicitProperties
.
class
);
assertSimpleLombokProperties
(
metadata
,
LombokExplicitProperties
.
class
,
"explicit"
);
assertThat
(
metadata
.
getItems
()).
hasSize
(
6
);
}
@Test
public
void
lombokAccessLevelProperties
()
{
ConfigurationMetadata
metadata
=
compile
(
LombokAccessLevelProperties
.
class
);
assertAccessLevelLombokProperties
(
metadata
,
LombokAccessLevelProperties
.
class
,
"accesslevel"
,
2
);
}
@Test
public
void
lombokAccessLevelOverwriteDataProperties
()
{
ConfigurationMetadata
metadata
=
compile
(
...
...
@@ -515,20 +530,6 @@ public class ConfigurationMetadataAnnotationProcessorTests {
"accesslevel.overwrite.default"
);
}
@Test
public
void
lombokAccessLevelProperties
()
{
ConfigurationMetadata
metadata
=
compile
(
LombokAccessLevelProperties
.
class
);
assertAccessLevelLombokProperties
(
metadata
,
LombokAccessLevelProperties
.
class
,
"accesslevel"
,
2
,
20
);
}
@Test
public
void
lombokExplicitProperties
()
throws
Exception
{
ConfigurationMetadata
metadata
=
compile
(
LombokExplicitProperties
.
class
);
assertSimpleLombokProperties
(
metadata
,
LombokExplicitProperties
.
class
,
"explicit"
);
}
@Test
public
void
lombokInnerClassProperties
()
throws
Exception
{
ConfigurationMetadata
metadata
=
compile
(
LombokInnerClassProperties
.
class
);
...
...
@@ -830,21 +831,17 @@ public class ConfigurationMetadataAnnotationProcessorTests {
private
void
assertAccessLevelOverwriteLombokProperties
(
ConfigurationMetadata
metadata
,
Class
<?>
source
,
String
prefix
)
{
assertAccessLevelLombokProperties
(
metadata
,
source
,
prefix
,
7
,
15
);
assertAccessLevelLombokProperties
(
metadata
,
source
,
prefix
,
7
);
}
private
void
assertAccessLevelLombokProperties
(
ConfigurationMetadata
metadata
,
Class
<?>
source
,
String
prefix
,
int
countNameFields
,
int
countIgnoredFields
)
{
Class
<?>
source
,
String
prefix
,
int
countNameFields
)
{
assertThat
(
metadata
).
has
(
Metadata
.
withGroup
(
prefix
).
fromSource
(
source
));
for
(
int
i
=
0
;
i
<
countNameFields
;
i
++)
{
assertThat
(
metadata
)
.
has
(
Metadata
.
withProperty
(
prefix
+
".name"
+
i
,
String
.
class
));
}
for
(
int
i
=
0
;
i
<
countIgnoredFields
;
i
++)
{
assertThat
(
metadata
)
.
doesNotHave
(
Metadata
.
withProperty
(
prefix
+
".ignored"
+
i
));
}
assertThat
(
metadata
.
getItems
()).
hasSize
(
1
+
countNameFields
);
}
private
ConfigurationMetadata
compile
(
Class
<?>...
types
)
{
...
...
spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationsample/lombok/LombokAccessLevelOverwriteDataProperties.java
View file @
563d7d70
...
...
@@ -60,63 +60,64 @@ public class LombokAccessLevelOverwriteDataProperties {
*/
@Getter
(
AccessLevel
.
NONE
)
@Setter
(
AccessLevel
.
NONE
)
private
String
ignored
0
;
private
String
ignored
AccessLevelNone
;
@Getter
(
AccessLevel
.
NONE
)
private
String
ignored
1
;
private
String
ignored
GetterAccessLevelNone
;
@Setter
(
AccessLevel
.
NONE
)
private
String
ignored
2
;
private
String
ignored
SetterAccessLevelNone
;
/*
* AccessLevel.PRIVATE
*/
@Getter
(
AccessLevel
.
PRIVATE
)
@Setter
(
AccessLevel
.
PRIVATE
)
private
String
ignored
3
;
private
String
ignored
AccessLevelPrivate
;
@Getter
(
AccessLevel
.
PRIVATE
)
private
String
ignored
4
;
private
String
ignored
GetterAccessLevelPrivate
;
@Setter
(
AccessLevel
.
PRIVATE
)
private
String
ignored
5
;
private
String
ignored
SetterAccessLevelPrivate
;
/*
* AccessLevel.PACKAGE
*/
@Getter
(
AccessLevel
.
PACKAGE
)
@Setter
(
AccessLevel
.
PACKAGE
)
private
String
ignored
6
;
private
String
ignored
AccessLevelPackage
;
@Getter
(
AccessLevel
.
PACKAGE
)
private
String
ignored
7
;
private
String
ignored
GetterAccessLevelPackage
;
@Setter
(
AccessLevel
.
PACKAGE
)
private
String
ignored
8
;
private
String
ignored
SetterAccessLevelPackage
;
/*
* AccessLevel.PROTECTED
*/
@Getter
(
AccessLevel
.
PROTECTED
)
@Setter
(
AccessLevel
.
PROTECTED
)
private
String
ignored
9
;
private
String
ignored
AccessLevelProtected
;
@Getter
(
AccessLevel
.
PROTECTED
)
private
String
ignored
10
;
private
String
ignored
GetterAccessLevelProtected
;
@Setter
(
AccessLevel
.
PROTECTED
)
private
String
ignored
11
;
private
String
ignored
SetterAccessLevelProtected
;
/*
* AccessLevel.MODULE
*/
@Getter
(
AccessLevel
.
MODULE
)
@Setter
(
AccessLevel
.
MODULE
)
private
String
ignored
12
;
private
String
ignored
AccessLevelModule
;
@Getter
(
AccessLevel
.
MODULE
)
private
String
ignored
13
;
private
String
ignored
GetterAccessLevelModule
;
@Setter
(
AccessLevel
.
MODULE
)
private
String
ignored14
;
private
String
ignoredSetterAccessLevelModule
;
}
spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationsample/lombok/LombokAccessLevelOverwriteDefaultProperties.java
View file @
563d7d70
/*
* Copyright 2012-201
7
the original author or authors.
* Copyright 2012-201
8
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.
...
...
@@ -60,63 +60,34 @@ public class LombokAccessLevelOverwriteDefaultProperties {
*/
@Getter
(
AccessLevel
.
NONE
)
@Setter
(
AccessLevel
.
NONE
)
private
String
ignored0
;
@Getter
(
AccessLevel
.
NONE
)
private
String
ignored1
;
@Setter
(
AccessLevel
.
NONE
)
private
String
ignored2
;
private
String
ignoredAccessLevelNone
;
/*
* AccessLevel.PRIVATE
*/
@Getter
(
AccessLevel
.
PRIVATE
)
@Setter
(
AccessLevel
.
PRIVATE
)
private
String
ignored3
;
@Getter
(
AccessLevel
.
PRIVATE
)
private
String
ignored4
;
@Setter
(
AccessLevel
.
PRIVATE
)
private
String
ignored5
;
private
String
ignoredAccessLevelPrivate
;
/*
* AccessLevel.PACKAGE
*/
@Getter
(
AccessLevel
.
PACKAGE
)
@Setter
(
AccessLevel
.
PACKAGE
)
private
String
ignored6
;
@Getter
(
AccessLevel
.
PACKAGE
)
private
String
ignored7
;
@Setter
(
AccessLevel
.
PACKAGE
)
private
String
ignored8
;
private
String
ignoredAccessLevelPackage
;
/*
* AccessLevel.PROTECTED
*/
@Getter
(
AccessLevel
.
PROTECTED
)
@Setter
(
AccessLevel
.
PROTECTED
)
private
String
ignored9
;
@Getter
(
AccessLevel
.
PROTECTED
)
private
String
ignored10
;
@Setter
(
AccessLevel
.
PROTECTED
)
private
String
ignored11
;
private
String
ignoredAccessLevelProtected
;
/*
* AccessLevel.MODULE
*/
@Getter
(
AccessLevel
.
MODULE
)
@Setter
(
AccessLevel
.
MODULE
)
private
String
ignored12
;
@Getter
(
AccessLevel
.
MODULE
)
private
String
ignored13
;
private
String
ignoredAccessLevelModule
;
@Setter
(
AccessLevel
.
MODULE
)
private
String
ignored14
;
}
spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationsample/lombok/LombokAccessLevelOverwriteExplicitProperties.java
View file @
563d7d70
/*
* Copyright 2012-201
7
the original author or authors.
* Copyright 2012-201
8
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.
...
...
@@ -60,63 +60,34 @@ public class LombokAccessLevelOverwriteExplicitProperties {
*/
@Getter
(
AccessLevel
.
NONE
)
@Setter
(
AccessLevel
.
NONE
)
private
String
ignored0
;
@Getter
(
AccessLevel
.
NONE
)
private
String
ignored1
;
@Setter
(
AccessLevel
.
NONE
)
private
String
ignored2
;
private
String
ignoredAccessLevelNone
;
/*
* AccessLevel.PRIVATE
*/
@Getter
(
AccessLevel
.
PRIVATE
)
@Setter
(
AccessLevel
.
PRIVATE
)
private
String
ignored3
;
@Getter
(
AccessLevel
.
PRIVATE
)
private
String
ignored4
;
@Setter
(
AccessLevel
.
PRIVATE
)
private
String
ignored5
;
private
String
ignoredAccessLevelPrivate
;
/*
* AccessLevel.PACKAGE
*/
@Getter
(
AccessLevel
.
PACKAGE
)
@Setter
(
AccessLevel
.
PACKAGE
)
private
String
ignored6
;
@Getter
(
AccessLevel
.
PACKAGE
)
private
String
ignored7
;
@Setter
(
AccessLevel
.
PACKAGE
)
private
String
ignored8
;
private
String
ignoredAccessLevelPackage
;
/*
* AccessLevel.PROTECTED
*/
@Getter
(
AccessLevel
.
PROTECTED
)
@Setter
(
AccessLevel
.
PROTECTED
)
private
String
ignored9
;
@Getter
(
AccessLevel
.
PROTECTED
)
private
String
ignored10
;
@Setter
(
AccessLevel
.
PROTECTED
)
private
String
ignored11
;
private
String
ignoredAccessLevelProtected
;
/*
* AccessLevel.MODULE
*/
@Getter
(
AccessLevel
.
MODULE
)
@Setter
(
AccessLevel
.
MODULE
)
private
String
ignored12
;
@Getter
(
AccessLevel
.
MODULE
)
private
String
ignored13
;
private
String
ignoredAccessLevelModule
;
@Setter
(
AccessLevel
.
MODULE
)
private
String
ignored14
;
}
spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationsample/lombok/LombokAccessLevelProperties.java
View file @
563d7d70
/*
* Copyright 2012-201
7
the original author or authors.
* Copyright 2012-201
8
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.
...
...
@@ -43,86 +43,43 @@ public class LombokAccessLevelProperties {
*/
@Getter
(
AccessLevel
.
NONE
)
@Setter
(
AccessLevel
.
NONE
)
private
String
ignored0
;
@Getter
(
AccessLevel
.
NONE
)
private
String
ignored1
;
@Setter
(
AccessLevel
.
NONE
)
private
String
ignored2
;
private
String
ignoredAccessLevelNone
;
/*
* AccessLevel.PRIVATE
*/
@Getter
(
AccessLevel
.
PRIVATE
)
@Setter
(
AccessLevel
.
PRIVATE
)
private
String
ignored3
;
@Getter
(
AccessLevel
.
PRIVATE
)
private
String
ignored4
;
@Setter
(
AccessLevel
.
PRIVATE
)
private
String
ignored5
;
private
String
ignoredAccessLevelPrivate
;
/*
* AccessLevel.PACKAGE
*/
@Getter
(
AccessLevel
.
PACKAGE
)
@Setter
(
AccessLevel
.
PACKAGE
)
private
String
ignored6
;
@Getter
(
AccessLevel
.
PACKAGE
)
private
String
ignored7
;
@Setter
(
AccessLevel
.
PACKAGE
)
private
String
ignored8
;
private
String
ignoredAccessLevelPackage
;
/*
* AccessLevel.PROTECTED
*/
@Getter
(
AccessLevel
.
PROTECTED
)
@Setter
(
AccessLevel
.
PROTECTED
)
private
String
ignored9
;
@Getter
(
AccessLevel
.
PROTECTED
)
private
String
ignored10
;
@Setter
(
AccessLevel
.
PROTECTED
)
private
String
ignored11
;
private
String
ignoredAccessLevelProtected
;
/*
* AccessLevel.MODULE
*/
@Getter
(
AccessLevel
.
MODULE
)
@Setter
(
AccessLevel
.
MODULE
)
private
String
ignored12
;
@Getter
(
AccessLevel
.
MODULE
)
private
String
ignored13
;
@Setter
(
AccessLevel
.
MODULE
)
private
String
ignored14
;
/*
* Nor getter neither setter defined
*/
private
String
ignored15
;
private
String
ignoredAccessLevelModule
;
/*
* Either PUBLIC getter or setter explicitly defined
*/
@Getter
(
AccessLevel
.
PUBLIC
)
private
String
ignored
16
;
private
String
ignored
OnlyPublicGetter
;
@Setter
(
AccessLevel
.
PUBLIC
)
private
String
ignored
17
;
private
String
ignored
OnlyPublicSetter
;
/*
* Either PUBLIC getter or setter implicitly defined
*/
@Getter
private
String
ignored18
;
@Setter
private
String
ignored19
;
}
spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationsample/lombok/LombokExplicitProperties.java
View file @
563d7d70
...
...
@@ -62,4 +62,10 @@ public class LombokExplicitProperties {
@SuppressWarnings
(
"unused"
)
private
String
ignored
;
@Getter
private
String
ignoredOnlyGetter
;
@Setter
private
String
ignoredOnlySetter
;
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment