From c0fa90c47d53d1832c0c65fd8feb8f685a369f5a Mon Sep 17 00:00:00 2001 From: scott Date: Sat, 27 Jul 2024 12:25:42 -0400 Subject: [PATCH] https://github.com/manifold-systems/manifold/issues/611 - addendum. Ensure enum constants are fully qualified in the context of annotation default values --- .../manifold/internal/javac/SrcClassUtil.java | 37 +++++++++++++++---- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/manifold-core-parent/manifold/src/main/java/manifold/internal/javac/SrcClassUtil.java b/manifold-core-parent/manifold/src/main/java/manifold/internal/javac/SrcClassUtil.java index 92977f41b7..42bdb917a7 100644 --- a/manifold-core-parent/manifold/src/main/java/manifold/internal/javac/SrcClassUtil.java +++ b/manifold-core-parent/manifold/src/main/java/manifold/internal/javac/SrcClassUtil.java @@ -380,14 +380,9 @@ private void addMethod( IModule module, SrcClass srcClass, Symbol.MethodSymbol m Type throwType = thrownTypes.get( i ); srcMethod.addThrowType( makeSrcType( throwType, method, TargetType.THROWS, i ) ); } - if( (method.owner.flags_field & Flags.ANNOTATION) != 0 ) - { - Attribute defaultValue = method.getDefaultValue(); - if( defaultValue != null ) - { - srcMethod.setDefaultValue( defaultValue.toString() ); - } - } + + setAnnotationDefaultValue( method, srcMethod ); + String bodyStmt; if( srcMethod.isConstructor() && !srcClass.isEnum() ) { @@ -415,6 +410,32 @@ private void addMethod( IModule module, SrcClass srcClass, Symbol.MethodSymbol m srcClass.addMethod( srcMethod ); } + private void setAnnotationDefaultValue( Symbol.MethodSymbol method, SrcMethod srcMethod ) + { + if( (method.owner.flags_field & Flags.ANNOTATION) == 0 ) + { + // declaring class is not an annotation + return; + } + + Attribute defaultValue = method.getDefaultValue(); + if( defaultValue == null ) + { + // annotation method does not have a default value + return; + } + + String qualifiedValue = defaultValue.toString(); + if( defaultValue instanceof Attribute.Enum ) + { + // enum constants must be qualified + + Symbol.VarSymbol value = ((Attribute.Enum)defaultValue).getValue(); + qualifiedValue = value.enclClass() + "." + value; + } + srcMethod.setDefaultValue( qualifiedValue ); + } + private static Set getModifiers( Symbol.MethodSymbol method ) { long flags = method.flags();