Polish "Respect lombok.AccessLevel attributes"
Closes gh-13175
This commit is contained in:
parent
3699132cf0
commit
563d7d70a2
|
|
@ -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 hasLombokPublicMethod(field, element, LOMBOK_GETTER_ANNOTATION);
|
||||
return hasLombokPublicAccessor(field, element, true);
|
||||
}
|
||||
|
||||
private boolean hasLombokSetter(VariableElement field, TypeElement element) {
|
||||
return !field.getModifiers().contains(Modifier.FINAL)
|
||||
&& hasLombokPublicMethod(field, element, LOMBOK_SETTER_ANNOTATION);
|
||||
&& hasLombokPublicAccessor(field, element, false);
|
||||
}
|
||||
|
||||
private boolean hasLombokPublicMethod(VariableElement field, TypeElement element,
|
||||
String lombokMethodAnnotation) {
|
||||
AnnotationMirror lombokMethodAnnotationOnField = getAnnotation(field,
|
||||
lombokMethodAnnotation);
|
||||
/**
|
||||
* 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 isLombokPublic(lombokMethodAnnotationOnField);
|
||||
return isAccessLevelPublic(lombokMethodAnnotationOnField);
|
||||
}
|
||||
|
||||
AnnotationMirror lombokMethodAnnotationOnElement = getAnnotation(element,
|
||||
lombokMethodAnnotation);
|
||||
annotation);
|
||||
if (lombokMethodAnnotationOnElement != null) {
|
||||
return isLombokPublic(lombokMethodAnnotationOnElement);
|
||||
return isAccessLevelPublic(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,
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -60,63 +60,64 @@ public class LombokAccessLevelOverwriteDataProperties {
|
|||
*/
|
||||
@Getter(AccessLevel.NONE)
|
||||
@Setter(AccessLevel.NONE)
|
||||
private String ignored0;
|
||||
private String ignoredAccessLevelNone;
|
||||
|
||||
@Getter(AccessLevel.NONE)
|
||||
private String ignored1;
|
||||
private String ignoredGetterAccessLevelNone;
|
||||
|
||||
@Setter(AccessLevel.NONE)
|
||||
private String ignored2;
|
||||
private String ignoredSetterAccessLevelNone;
|
||||
|
||||
/*
|
||||
* AccessLevel.PRIVATE
|
||||
*/
|
||||
@Getter(AccessLevel.PRIVATE)
|
||||
@Setter(AccessLevel.PRIVATE)
|
||||
private String ignored3;
|
||||
private String ignoredAccessLevelPrivate;
|
||||
|
||||
@Getter(AccessLevel.PRIVATE)
|
||||
private String ignored4;
|
||||
private String ignoredGetterAccessLevelPrivate;
|
||||
|
||||
@Setter(AccessLevel.PRIVATE)
|
||||
private String ignored5;
|
||||
private String ignoredSetterAccessLevelPrivate;
|
||||
|
||||
/*
|
||||
* AccessLevel.PACKAGE
|
||||
*/
|
||||
@Getter(AccessLevel.PACKAGE)
|
||||
@Setter(AccessLevel.PACKAGE)
|
||||
private String ignored6;
|
||||
private String ignoredAccessLevelPackage;
|
||||
|
||||
@Getter(AccessLevel.PACKAGE)
|
||||
private String ignored7;
|
||||
private String ignoredGetterAccessLevelPackage;
|
||||
|
||||
@Setter(AccessLevel.PACKAGE)
|
||||
private String ignored8;
|
||||
private String ignoredSetterAccessLevelPackage;
|
||||
|
||||
/*
|
||||
* AccessLevel.PROTECTED
|
||||
*/
|
||||
@Getter(AccessLevel.PROTECTED)
|
||||
@Setter(AccessLevel.PROTECTED)
|
||||
private String ignored9;
|
||||
private String ignoredAccessLevelProtected;
|
||||
|
||||
@Getter(AccessLevel.PROTECTED)
|
||||
private String ignored10;
|
||||
private String ignoredGetterAccessLevelProtected;
|
||||
|
||||
@Setter(AccessLevel.PROTECTED)
|
||||
private String ignored11;
|
||||
private String ignoredSetterAccessLevelProtected;
|
||||
|
||||
/*
|
||||
* AccessLevel.MODULE
|
||||
*/
|
||||
@Getter(AccessLevel.MODULE)
|
||||
@Setter(AccessLevel.MODULE)
|
||||
private String ignored12;
|
||||
private String ignoredAccessLevelModule;
|
||||
|
||||
@Getter(AccessLevel.MODULE)
|
||||
private String ignored13;
|
||||
private String ignoredGetterAccessLevelModule;
|
||||
|
||||
@Setter(AccessLevel.MODULE)
|
||||
private String ignored14;
|
||||
private String ignoredSetterAccessLevelModule;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
@ -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;
|
||||
private String ignoredAccessLevelModule;
|
||||
|
||||
@Getter(AccessLevel.MODULE)
|
||||
private String ignored13;
|
||||
|
||||
@Setter(AccessLevel.MODULE)
|
||||
private String ignored14;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
@ -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;
|
||||
private String ignoredAccessLevelModule;
|
||||
|
||||
@Getter(AccessLevel.MODULE)
|
||||
private String ignored13;
|
||||
|
||||
@Setter(AccessLevel.MODULE)
|
||||
private String ignored14;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
@ -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 ignored16;
|
||||
private String ignoredOnlyPublicGetter;
|
||||
|
||||
@Setter(AccessLevel.PUBLIC)
|
||||
private String ignored17;
|
||||
private String ignoredOnlyPublicSetter;
|
||||
|
||||
/*
|
||||
* Either PUBLIC getter or setter implicitly defined
|
||||
*/
|
||||
@Getter
|
||||
private String ignored18;
|
||||
|
||||
@Setter
|
||||
private String ignored19;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -62,4 +62,10 @@ public class LombokExplicitProperties {
|
|||
@SuppressWarnings("unused")
|
||||
private String ignored;
|
||||
|
||||
@Getter
|
||||
private String ignoredOnlyGetter;
|
||||
|
||||
@Setter
|
||||
private String ignoredOnlySetter;
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue