@@ -625,7 +625,9 @@ public void recordProcessing() throws IOException {
625625 "METHOD hashCode()" ,
626626 "METHOD equals(java.lang.Object)" ,
627627 "METHOD x()" ,
628- "METHOD y()" );
628+ "METHOD y()" ,
629+ "FIELD x" ,
630+ "FIELD y" );
629631 }
630632
631633 @ SupportedAnnotationTypes ("*" )
@@ -1207,6 +1209,110 @@ class B {}
12071209 .containsExactly ("package '' contains A" , "package '' contains B" );
12081210 }
12091211
1212+ @ SupportedAnnotationTypes ("*" )
1213+ public static class RecordMembers extends AbstractProcessor {
1214+ @ Override
1215+ public SourceVersion getSupportedSourceVersion () {
1216+ return SourceVersion .latestSupported ();
1217+ }
1218+
1219+ @ Override
1220+ public boolean process (Set <? extends TypeElement > annotations , RoundEnvironment roundEnv ) {
1221+ if (!roundEnv .processingOver ()) {
1222+ return false ;
1223+ }
1224+ for (Element e :
1225+ processingEnv .getElementUtils ().getTypeElement ("Person" ).getEnclosedElements ()) {
1226+ processingEnv .getMessager ().printError (e + " " + e .getKind (), e );
1227+ }
1228+ return false ;
1229+ }
1230+ }
1231+
1232+ @ Test
1233+ public void recordMembers () throws Exception {
1234+ ImmutableList <Tree .CompUnit > units =
1235+ parseUnit (
1236+ """
1237+ === Person.java ===
1238+ public record Person(String name) {
1239+ }
1240+ """ );
1241+ TurbineError e = runProcessors (units , new RecordMembers ());
1242+ assertThat (
1243+ e .diagnostics ().stream ()
1244+ .filter (d -> d .severity ().equals (Diagnostic .Kind .ERROR ))
1245+ .map (d -> d .message ()))
1246+ .containsExactly (
1247+ "name RECORD_COMPONENT" ,
1248+ "name FIELD" ,
1249+ "Person(java.lang.String) CONSTRUCTOR" ,
1250+ "toString() METHOD" ,
1251+ "hashCode() METHOD" ,
1252+ "equals(java.lang.Object) METHOD" ,
1253+ "name() METHOD" );
1254+ }
1255+
1256+ @ SupportedAnnotationTypes ("*" )
1257+ public static class RecordFields extends AbstractProcessor {
1258+ @ Override
1259+ public SourceVersion getSupportedSourceVersion () {
1260+ return SourceVersion .latestSupported ();
1261+ }
1262+
1263+ @ Override
1264+ public boolean process (Set <? extends TypeElement > annotations , RoundEnvironment roundEnv ) {
1265+ if (!roundEnv .processingOver ()) {
1266+ return false ;
1267+ }
1268+ for (VariableElement e :
1269+ fieldsIn (
1270+ processingEnv .getElementUtils ().getTypeElement ("Person" ).getEnclosedElements ())) {
1271+ processingEnv
1272+ .getMessager ()
1273+ .printError (
1274+ String .format (
1275+ "%s: modifiers %s, type %s, annotations %s" ,
1276+ e .getSimpleName (), e .getModifiers (), e .asType (), e .getAnnotationMirrors ()),
1277+ e );
1278+ }
1279+ return false ;
1280+ }
1281+ }
1282+
1283+ @ Test
1284+ public void recordFields () throws Exception {
1285+ ImmutableList <Tree .CompUnit > units =
1286+ parseUnit (
1287+ """
1288+ === A.java ===
1289+ import java.lang.annotation.ElementType;
1290+ import java.lang.annotation.Target;
1291+ @Target({ElementType.FIELD, ElementType.TYPE_USE})
1292+ public @interface A {}
1293+ === B.java ===
1294+ import java.lang.annotation.ElementType;
1295+ import java.lang.annotation.Target;
1296+ @Target({ElementType.PARAMETER})
1297+ public @interface B {}
1298+ === Person.java ===
1299+ import java.util.List;
1300+ public record Person(String name, List<@A String> b, final @A int c, @B int d) {
1301+ }
1302+ """ );
1303+ TurbineError e = runProcessors (units , new RecordFields ());
1304+ assertThat (
1305+ e .diagnostics ().stream ()
1306+ .filter (d -> d .severity ().equals (Diagnostic .Kind .ERROR ))
1307+ .map (d -> d .message ()))
1308+ .containsExactly (
1309+ "name: modifiers [private, final], type java.lang.String, annotations []" ,
1310+ "b: modifiers [private, final], type java.util.List<java.lang.@A String>, annotations"
1311+ + " []" ,
1312+ "c: modifiers [private, final], type @A int, annotations [@A]" ,
1313+ "d: modifiers [private, final], type int, annotations []" );
1314+ }
1315+
12101316 private TurbineError runProcessors (ImmutableList <Tree .CompUnit > units , Processor ... processors ) {
12111317 return assertThrows (
12121318 TurbineError .class ,
0 commit comments