From 6d9d863487cd067c1ac38174891d40787db6346d Mon Sep 17 00:00:00 2001 From: Semyon Levin Date: Fri, 5 Jun 2026 18:57:52 +0400 Subject: [PATCH] Add @SuppressWarnings({"all", "cast"}) to all generated classes --- .../processor/CollectionBuilderUtils.java | 9 +++----- .../InternalDeconstructorProcessor.java | 5 ++-- .../InternalRecordBuilderProcessor.java | 13 +++++++---- .../InternalRecordInterfaceProcessor.java | 5 ++-- .../processor/RecordBuilderProcessor.java | 2 +- .../test/DeprecatedComponentRecord.java | 23 +++++++++++++++++++ 6 files changed, 42 insertions(+), 15 deletions(-) create mode 100644 record-builder-test/src/main/java/io/soabase/recordbuilder/test/DeprecatedComponentRecord.java diff --git a/record-builder-processor/src/main/java/io/soabase/recordbuilder/processor/CollectionBuilderUtils.java b/record-builder-processor/src/main/java/io/soabase/recordbuilder/processor/CollectionBuilderUtils.java index 734db825..6be3316f 100644 --- a/record-builder-processor/src/main/java/io/soabase/recordbuilder/processor/CollectionBuilderUtils.java +++ b/record-builder-processor/src/main/java/io/soabase/recordbuilder/processor/CollectionBuilderUtils.java @@ -23,9 +23,7 @@ import java.util.*; import java.util.regex.Pattern; -import static io.soabase.recordbuilder.processor.RecordBuilderProcessor.generatedRecordBuilderAnnotation; -import static io.soabase.recordbuilder.processor.RecordBuilderProcessor.recordBuilderGeneratedAnnotation; -import static io.soabase.recordbuilder.processor.RecordBuilderProcessor.suppressWarningsAnnotation; +import static io.soabase.recordbuilder.processor.RecordBuilderProcessor.*; class CollectionBuilderUtils { private final boolean useImmutableCollections; @@ -388,9 +386,6 @@ private MethodSpec buildShimMethod(String name, TypeName mainType, Class abst var extendedParameterizedType = ParameterizedTypeName.get(ClassName.get(abstractType), wildCardTypeArguments); MethodSpec.Builder methodBuilder = MethodSpec.methodBuilder(name); - if (!useImmutableCollections) { - methodBuilder.addAnnotation(suppressWarningsAnnotation); - } return methodBuilder.addAnnotation(generatedRecordBuilderAnnotation) .addModifiers(Modifier.PRIVATE, Modifier.STATIC).addTypeVariables(Arrays.asList(typeVariables)) .returns(parameterizedType).addParameter(extendedParameterizedType, "o").addStatement(code).build(); @@ -486,6 +481,8 @@ private TypeSpec buildMutableCollectionSubType(String className, ClassName mutab builder.addAnnotation(recordBuilderGeneratedAnnotation); } + builder.addAnnotation(suppressWarningsAnnotation); + return builder.build(); } diff --git a/record-builder-processor/src/main/java/io/soabase/recordbuilder/processor/InternalDeconstructorProcessor.java b/record-builder-processor/src/main/java/io/soabase/recordbuilder/processor/InternalDeconstructorProcessor.java index 3f78b58d..d9529e7b 100644 --- a/record-builder-processor/src/main/java/io/soabase/recordbuilder/processor/InternalDeconstructorProcessor.java +++ b/record-builder-processor/src/main/java/io/soabase/recordbuilder/processor/InternalDeconstructorProcessor.java @@ -44,8 +44,7 @@ import static io.soabase.recordbuilder.processor.ElementUtils.hasAnnotationTarget; import static io.soabase.recordbuilder.processor.InternalRecordBuilderProcessor.capitalize; import static io.soabase.recordbuilder.processor.ParameterSpecUtil.createParameterSpec; -import static io.soabase.recordbuilder.processor.RecordBuilderProcessor.generatedRecordBuilderAnnotation; -import static io.soabase.recordbuilder.processor.RecordBuilderProcessor.recordBuilderGeneratedAnnotation; +import static io.soabase.recordbuilder.processor.RecordBuilderProcessor.*; class InternalDeconstructorProcessor { private final String packageName; @@ -112,6 +111,8 @@ class InternalDeconstructorProcessor { builder.addAnnotation(recordBuilderGeneratedAnnotation); } + builder.addAnnotation(suppressWarningsAnnotation); + addVisibility(element.getModifiers()); addRecordComponents(); addDeconstructorMethod(); diff --git a/record-builder-processor/src/main/java/io/soabase/recordbuilder/processor/InternalRecordBuilderProcessor.java b/record-builder-processor/src/main/java/io/soabase/recordbuilder/processor/InternalRecordBuilderProcessor.java index 98ffdb6d..9da4d80c 100644 --- a/record-builder-processor/src/main/java/io/soabase/recordbuilder/processor/InternalRecordBuilderProcessor.java +++ b/record-builder-processor/src/main/java/io/soabase/recordbuilder/processor/InternalRecordBuilderProcessor.java @@ -38,8 +38,7 @@ import static io.soabase.recordbuilder.processor.CollectionBuilderUtils.SingleItemsMetaDataMode.STANDARD_FOR_SETTER; import static io.soabase.recordbuilder.processor.ElementUtils.*; import static io.soabase.recordbuilder.processor.ParameterSpecUtil.createParameterSpec; -import static io.soabase.recordbuilder.processor.RecordBuilderProcessor.generatedRecordBuilderAnnotation; -import static io.soabase.recordbuilder.processor.RecordBuilderProcessor.recordBuilderGeneratedAnnotation; +import static io.soabase.recordbuilder.processor.RecordBuilderProcessor.*; import static javax.tools.Diagnostic.Kind.ERROR; class InternalRecordBuilderProcessor { @@ -88,6 +87,7 @@ class InternalRecordBuilderProcessor { if (metaData.addClassRetainedGenerated()) { builder.addAnnotation(recordBuilderGeneratedAnnotation); } + builder.addAnnotation(suppressWarningsAnnotation); if (!validateMethodNameConflicts(processingEnv, recordFacade.element())) { builderType = Optional.empty(); @@ -264,6 +264,7 @@ private void addStagedBuilderClasses() { if (metaData.addClassRetainedGenerated()) { classBuilder.addAnnotation(recordBuilderGeneratedAnnotation); } + classBuilder.addAnnotation(suppressWarningsAnnotation); MethodSpec buildMethod = buildMethod().addModifiers(Modifier.PUBLIC, Modifier.DEFAULT) .addStatement("return $L().$L()", metaData.builderMethodName(), metaData.buildMethodName()).build(); @@ -313,6 +314,7 @@ private void add1StagedBuilderClass(RecordClassType component, Optional stagedBuilderType(builderClassType)); @@ -375,6 +377,7 @@ private void addWithNestedClass() { if (metaData.addClassRetainedGenerated()) { classBuilder.addAnnotation(recordBuilderGeneratedAnnotation); } + classBuilder.addAnnotation(suppressWarningsAnnotation); recordComponents.forEach(component -> addNestedGetterMethod(classBuilder, component, component.name())); addWithBuilderMethod(classBuilder); addWithSuppliedBuilderMethod(classBuilder); @@ -398,7 +401,7 @@ private void addBeanNestedClass() { var classBuilder = TypeSpec.interfaceBuilder(metaData.beanClassName()) .addAnnotation(generatedRecordBuilderAnnotation) .addJavadoc("Add getters to {@code $L}\n", recordClassType.name()).addModifiers(Modifier.PUBLIC) - .addTypeVariables(typeVariables); + .addTypeVariables(typeVariables).addAnnotation(suppressWarningsAnnotation); recordComponents.forEach(component -> { if (prefixedName(component, true).equals(component.name())) { return; @@ -754,6 +757,7 @@ private void addFromWithClass() { if (metaData.addClassRetainedGenerated()) { fromWithClassBuilder.addAnnotation(recordBuilderGeneratedAnnotation); } + fromWithClassBuilder.addAnnotation(suppressWarningsAnnotation); fromWithClassBuilder.addField(recordClassType.typeName(), "from", Modifier.PRIVATE, Modifier.FINAL); MethodSpec constructorSpec = MethodSpec.constructorBuilder().addParameter(recordClassType.typeName(), "from") @@ -1216,7 +1220,8 @@ private TypeSpec buildFunctionalInterface(String className, boolean isMap) { } return TypeSpec.interfaceBuilder(className).addAnnotation(generatedRecordBuilderAnnotation) .addAnnotation(FunctionalInterface.class).addModifiers(Modifier.PUBLIC, Modifier.STATIC) - .addTypeVariables(localTypeVariables).addMethod(methodBuilder.build()).build(); + .addTypeVariables(localTypeVariables).addMethod(methodBuilder.build()) + .addAnnotation(suppressWarningsAnnotation).build(); } private String prefixedName(RecordClassType component, boolean isGetter) { diff --git a/record-builder-processor/src/main/java/io/soabase/recordbuilder/processor/InternalRecordInterfaceProcessor.java b/record-builder-processor/src/main/java/io/soabase/recordbuilder/processor/InternalRecordInterfaceProcessor.java index d71697ab..f2e0dd12 100644 --- a/record-builder-processor/src/main/java/io/soabase/recordbuilder/processor/InternalRecordInterfaceProcessor.java +++ b/record-builder-processor/src/main/java/io/soabase/recordbuilder/processor/InternalRecordInterfaceProcessor.java @@ -30,8 +30,7 @@ import java.util.stream.Collectors; import static io.soabase.recordbuilder.processor.ElementUtils.generateName; -import static io.soabase.recordbuilder.processor.RecordBuilderProcessor.generatedRecordInterfaceAnnotation; -import static io.soabase.recordbuilder.processor.RecordBuilderProcessor.recordBuilderGeneratedAnnotation; +import static io.soabase.recordbuilder.processor.RecordBuilderProcessor.*; class InternalRecordInterfaceProcessor { private final ProcessingEnvironment processingEnv; @@ -95,6 +94,8 @@ private record Component(ExecutableElement element, Optional alternateNa } } + builder.addAnnotation(suppressWarningsAnnotation); + addAlternateMethods(builder, recordComponents); recordType = builder.build(); diff --git a/record-builder-processor/src/main/java/io/soabase/recordbuilder/processor/RecordBuilderProcessor.java b/record-builder-processor/src/main/java/io/soabase/recordbuilder/processor/RecordBuilderProcessor.java index c2cd5c54..c0d62ad9 100644 --- a/record-builder-processor/src/main/java/io/soabase/recordbuilder/processor/RecordBuilderProcessor.java +++ b/record-builder-processor/src/main/java/io/soabase/recordbuilder/processor/RecordBuilderProcessor.java @@ -47,7 +47,7 @@ public class RecordBuilderProcessor extends AbstractProcessor { static final AnnotationSpec generatedRecordBuilderAnnotation = AnnotationSpec.builder(Generated.class) .addMember("value", "$S", RecordBuilder.class.getName()).build(); static final AnnotationSpec suppressWarningsAnnotation = AnnotationSpec.builder(SuppressWarnings.class) - .addMember("value", "$S", "unchecked").build(); + .addMember("value", "{$S, $S}", "all", "cast").build(); static final AnnotationSpec generatedRecordInterfaceAnnotation = AnnotationSpec.builder(Generated.class) .addMember("value", "$S", RecordInterface.class.getName()).build(); static final AnnotationSpec recordBuilderGeneratedAnnotation = AnnotationSpec.builder(RecordBuilderGenerated.class) diff --git a/record-builder-test/src/main/java/io/soabase/recordbuilder/test/DeprecatedComponentRecord.java b/record-builder-test/src/main/java/io/soabase/recordbuilder/test/DeprecatedComponentRecord.java new file mode 100644 index 00000000..13eb66b1 --- /dev/null +++ b/record-builder-test/src/main/java/io/soabase/recordbuilder/test/DeprecatedComponentRecord.java @@ -0,0 +1,23 @@ +/* + * Copyright 2019 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.soabase.recordbuilder.test; + +import io.soabase.recordbuilder.core.RecordBuilder; + +@RecordBuilder +public record DeprecatedComponentRecord(@Deprecated String oldField, String newField) + implements DeprecatedComponentRecordBuilder.With { +}