[lombok] Skip generation with AccessLevel.NONE
This commit is contained in:
committed by
TeamCityServer
parent
be4a518a25
commit
9ebce7849c
@@ -22,7 +22,7 @@ Features support:
|
|||||||
- [ ] lombok.copyableAnnotations
|
- [ ] lombok.copyableAnnotations
|
||||||
- [ ] Copy annotations
|
- [ ] Copy annotations
|
||||||
- [x] Strip defined prefixes - in config and @Accessors
|
- [x] Strip defined prefixes - in config and @Accessors
|
||||||
- [ ] Skip generation with AccessLevel.NONE
|
- [x] Skip generation with AccessLevel.NONE
|
||||||
- [x] Strip 'is' prefix for boolean fields
|
- [x] Strip 'is' prefix for boolean fields
|
||||||
|
|
||||||
[~] [@With](https://projectlombok.org/features/With)
|
[~] [@With](https://projectlombok.org/features/With)
|
||||||
|
|||||||
+1
-1
@@ -25,7 +25,7 @@ class LombokSyntheticJavaPartsProvider(private val config: LombokConfig) : Synth
|
|||||||
listOf(
|
listOf(
|
||||||
GetterProcessor(config),
|
GetterProcessor(config),
|
||||||
SetterProcessor(config),
|
SetterProcessor(config),
|
||||||
WithProcessor(config),
|
WithProcessor(),
|
||||||
NoArgsConstructorProcessor(),
|
NoArgsConstructorProcessor(),
|
||||||
AllArgsConstructorProcessor(),
|
AllArgsConstructorProcessor(),
|
||||||
RequiredArgsConstructorProcessor()
|
RequiredArgsConstructorProcessor()
|
||||||
|
|||||||
+35
@@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.lombok.config
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
|
||||||
|
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||||
|
import org.jetbrains.kotlin.descriptors.java.JavaVisibilities
|
||||||
|
import org.jetbrains.kotlin.load.java.JavaDescriptorVisibilities
|
||||||
|
|
||||||
|
|
||||||
|
enum class AccessLevel {
|
||||||
|
PUBLIC, MODULE, PROTECTED, PACKAGE, PRIVATE,
|
||||||
|
|
||||||
|
/** Represents not generating anything or the complete lack of a method. */
|
||||||
|
NONE;
|
||||||
|
|
||||||
|
fun toDescriptorVisibility(): DescriptorVisibility = toDescriptorVisibility(this)
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
fun toDescriptorVisibility(v: AccessLevel): DescriptorVisibility {
|
||||||
|
val visibility = when (v) {
|
||||||
|
PUBLIC -> Visibilities.Public
|
||||||
|
PROTECTED -> Visibilities.Protected
|
||||||
|
PRIVATE -> Visibilities.Private
|
||||||
|
PACKAGE -> JavaVisibilities.PackageVisibility
|
||||||
|
MODULE -> Visibilities.Internal
|
||||||
|
NONE -> Visibilities.Private
|
||||||
|
}
|
||||||
|
return JavaDescriptorVisibilities.toDescriptorVisibility(visibility)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+6
-6
@@ -83,35 +83,35 @@ data class Accessors(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
data class Getter(val visibility: DescriptorVisibility = DescriptorVisibilities.PUBLIC) {
|
data class Getter(val visibility: AccessLevel = AccessLevel.PUBLIC) {
|
||||||
companion object : AnnotationCompanion<Getter>() {
|
companion object : AnnotationCompanion<Getter>() {
|
||||||
override val name: FqName = LombokNames.GETTER
|
override val name: FqName = LombokNames.GETTER
|
||||||
|
|
||||||
override fun extract(annotation: AnnotationDescriptor): Getter =
|
override fun extract(annotation: AnnotationDescriptor): Getter =
|
||||||
Getter(
|
Getter(
|
||||||
visibility = getVisibility(annotation)
|
visibility = getAccessLevel(annotation)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
data class Setter(val visibility: DescriptorVisibility = DescriptorVisibilities.PUBLIC) {
|
data class Setter(val visibility: AccessLevel = AccessLevel.PUBLIC) {
|
||||||
companion object : AnnotationCompanion<Setter>() {
|
companion object : AnnotationCompanion<Setter>() {
|
||||||
override val name: FqName = LombokNames.SETTER
|
override val name: FqName = LombokNames.SETTER
|
||||||
|
|
||||||
override fun extract(annotation: AnnotationDescriptor): Setter =
|
override fun extract(annotation: AnnotationDescriptor): Setter =
|
||||||
Setter(
|
Setter(
|
||||||
visibility = getVisibility(annotation)
|
visibility = getAccessLevel(annotation)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
data class With(val visibility: DescriptorVisibility) {
|
data class With(val visibility: AccessLevel = AccessLevel.PUBLIC) {
|
||||||
companion object : AnnotationCompanion<With>() {
|
companion object : AnnotationCompanion<With>() {
|
||||||
override val name: FqName = LombokNames.WITH
|
override val name: FqName = LombokNames.WITH
|
||||||
|
|
||||||
override fun extract(annotation: AnnotationDescriptor): With =
|
override fun extract(annotation: AnnotationDescriptor): With =
|
||||||
With(
|
With(
|
||||||
visibility = getVisibility(annotation)
|
visibility = getAccessLevel(annotation)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-1
@@ -36,6 +36,8 @@ class GetterProcessor(private val config: LombokConfig) : Processor {
|
|||||||
getter: Getter,
|
getter: Getter,
|
||||||
globalAccessors: Accessors
|
globalAccessors: Accessors
|
||||||
): SimpleFunctionDescriptor? {
|
): SimpleFunctionDescriptor? {
|
||||||
|
if (getter.visibility == AccessLevel.NONE) return null
|
||||||
|
|
||||||
val accessors = Accessors.getIfAnnotated(field, config) ?: globalAccessors
|
val accessors = Accessors.getIfAnnotated(field, config) ?: globalAccessors
|
||||||
return field.toPropertyName(accessors)?.let { propertyName ->
|
return field.toPropertyName(accessors)?.let { propertyName ->
|
||||||
val functionName =
|
val functionName =
|
||||||
@@ -49,7 +51,7 @@ class GetterProcessor(private val config: LombokConfig) : Processor {
|
|||||||
Name.identifier(functionName),
|
Name.identifier(functionName),
|
||||||
emptyList(),
|
emptyList(),
|
||||||
field.returnType,
|
field.returnType,
|
||||||
visibility = getter.visibility
|
visibility = getter.visibility.toDescriptorVisibility()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-5
@@ -7,10 +7,7 @@ package org.jetbrains.kotlin.lombok.processor
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.load.java.structure.impl.JavaClassImpl
|
import org.jetbrains.kotlin.load.java.structure.impl.JavaClassImpl
|
||||||
import org.jetbrains.kotlin.lombok.config.Accessors
|
import org.jetbrains.kotlin.lombok.config.*
|
||||||
import org.jetbrains.kotlin.lombok.config.Data
|
|
||||||
import org.jetbrains.kotlin.lombok.config.LombokConfig
|
|
||||||
import org.jetbrains.kotlin.lombok.config.Setter
|
|
||||||
import org.jetbrains.kotlin.lombok.utils.*
|
import org.jetbrains.kotlin.lombok.utils.*
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
|
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
|
||||||
@@ -37,6 +34,8 @@ class SetterProcessor(private val config: LombokConfig) : Processor {
|
|||||||
getter: Setter,
|
getter: Setter,
|
||||||
globalAccessors: Accessors
|
globalAccessors: Accessors
|
||||||
): SimpleFunctionDescriptor? {
|
): SimpleFunctionDescriptor? {
|
||||||
|
if (getter.visibility == AccessLevel.NONE) return null
|
||||||
|
|
||||||
val accessors = Accessors.getIfAnnotated(field, config) ?: globalAccessors
|
val accessors = Accessors.getIfAnnotated(field, config) ?: globalAccessors
|
||||||
return field.toPropertyName(accessors)?.let { propertyName ->
|
return field.toPropertyName(accessors)?.let { propertyName ->
|
||||||
val functionName =
|
val functionName =
|
||||||
@@ -49,7 +48,7 @@ class SetterProcessor(private val config: LombokConfig) : Processor {
|
|||||||
Name.identifier(functionName),
|
Name.identifier(functionName),
|
||||||
listOf(ValueParameter(field.name, field.type)),
|
listOf(ValueParameter(field.name, field.type)),
|
||||||
returnType,
|
returnType,
|
||||||
visibility = getter.visibility
|
visibility = getter.visibility.toDescriptorVisibility()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-3
@@ -9,12 +9,12 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
|||||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor
|
import org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor
|
||||||
import org.jetbrains.kotlin.load.java.structure.impl.JavaClassImpl
|
import org.jetbrains.kotlin.load.java.structure.impl.JavaClassImpl
|
||||||
import org.jetbrains.kotlin.lombok.config.LombokConfig
|
import org.jetbrains.kotlin.lombok.config.AccessLevel
|
||||||
import org.jetbrains.kotlin.lombok.config.With
|
import org.jetbrains.kotlin.lombok.config.With
|
||||||
import org.jetbrains.kotlin.lombok.utils.*
|
import org.jetbrains.kotlin.lombok.utils.*
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
class WithProcessor(private val config: LombokConfig) : Processor {
|
class WithProcessor : Processor {
|
||||||
override fun contribute(classDescriptor: ClassDescriptor, jClass: JavaClassImpl): Parts {
|
override fun contribute(classDescriptor: ClassDescriptor, jClass: JavaClassImpl): Parts {
|
||||||
|
|
||||||
val clWith = With.getOrNull(classDescriptor)
|
val clWith = With.getOrNull(classDescriptor)
|
||||||
@@ -32,6 +32,7 @@ class WithProcessor(private val config: LombokConfig) : Processor {
|
|||||||
field: PropertyDescriptor,
|
field: PropertyDescriptor,
|
||||||
with: With
|
with: With
|
||||||
): SimpleFunctionDescriptor? {
|
): SimpleFunctionDescriptor? {
|
||||||
|
if (with.visibility == AccessLevel.NONE) return null
|
||||||
|
|
||||||
val functionName = "with" + toPropertyNameCapitalized(field.name.identifier)
|
val functionName = "with" + toPropertyNameCapitalized(field.name.identifier)
|
||||||
|
|
||||||
@@ -39,7 +40,7 @@ class WithProcessor(private val config: LombokConfig) : Processor {
|
|||||||
Name.identifier(functionName),
|
Name.identifier(functionName),
|
||||||
listOf(ValueParameter(field.name, field.type)),
|
listOf(ValueParameter(field.name, field.type)),
|
||||||
classDescriptor.defaultType,
|
classDescriptor.defaultType,
|
||||||
visibility = with.visibility
|
visibility = with.visibility.toDescriptorVisibility()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+7
-14
@@ -5,25 +5,18 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.lombok.utils
|
package org.jetbrains.kotlin.lombok.utils
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
|
|
||||||
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
|
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
|
||||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
|
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.java.JavaVisibilities
|
import org.jetbrains.kotlin.lombok.config.AccessLevel
|
||||||
import org.jetbrains.kotlin.load.java.JavaDescriptorVisibilities
|
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.resolve.constants.*
|
import org.jetbrains.kotlin.resolve.constants.*
|
||||||
|
|
||||||
fun getVisibility(annotation: AnnotationDescriptor, field: String = "value"): DescriptorVisibility {
|
fun getVisibility(annotation: AnnotationDescriptor, field: String = "value"): DescriptorVisibility =
|
||||||
val value = annotation.getStringArgument(field) ?: "PUBLIC"
|
getAccessLevel(annotation, field).toDescriptorVisibility()
|
||||||
val visibility = when (value) {
|
|
||||||
"PUBLIC" -> Visibilities.Public
|
fun getAccessLevel(annotation: AnnotationDescriptor, field: String = "value"): AccessLevel {
|
||||||
"PROTECTED" -> Visibilities.Protected
|
val value = annotation.getStringArgument(field) ?: return AccessLevel.PUBLIC
|
||||||
"PRIVATE" -> Visibilities.Private
|
return AccessLevel.valueOf(value)
|
||||||
"PACKAGE" -> JavaVisibilities.PackageVisibility
|
|
||||||
else -> Visibilities.Public
|
|
||||||
}
|
|
||||||
return JavaDescriptorVisibilities.toDescriptorVisibility(visibility)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun AnnotationDescriptor.getStringArgument(argumentName: String): String? {
|
fun AnnotationDescriptor.getStringArgument(argumentName: String): String? {
|
||||||
|
|||||||
@@ -12,9 +12,12 @@ public class GetterTest {
|
|||||||
|
|
||||||
@Getter private Boolean boxedBoolean;
|
@Getter private Boolean boxedBoolean;
|
||||||
|
|
||||||
|
@Getter(AccessLevel.NONE) private Boolean invisible;
|
||||||
|
|
||||||
void test() {
|
void test() {
|
||||||
getAge();
|
getAge();
|
||||||
isPrimitiveBoolean();
|
isPrimitiveBoolean();
|
||||||
|
// getInvisible();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -38,6 +41,8 @@ class Test {
|
|||||||
//shouldn't be accesible from here
|
//shouldn't be accesible from here
|
||||||
// obj.getName()
|
// obj.getName()
|
||||||
|
|
||||||
|
// obj.getInvisible()
|
||||||
|
|
||||||
OverridenGetterTest().usage()
|
OverridenGetterTest().usage()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user