From e8f2dd72067677586bfb3b391bae4fe17ab5e3d6 Mon Sep 17 00:00:00 2001 From: "M.Schmidt" Date: Fri, 24 Jan 2025 12:22:53 +0100 Subject: [PATCH] fix: include invisible Annotations for fields --- .../frontend/conversion/AsmClassSource.java | 54 +++++++------------ .../bytecode/frontend/conversion/AsmUtil.java | 2 +- 2 files changed, 21 insertions(+), 35 deletions(-) diff --git a/sootup.java.bytecode.frontend/src/main/java/sootup/java/bytecode/frontend/conversion/AsmClassSource.java b/sootup.java.bytecode.frontend/src/main/java/sootup/java/bytecode/frontend/conversion/AsmClassSource.java index 4203bb3c666..3cd92200725 100644 --- a/sootup.java.bytecode.frontend/src/main/java/sootup/java/bytecode/frontend/conversion/AsmClassSource.java +++ b/sootup.java.bytecode.frontend/src/main/java/sootup/java/bytecode/frontend/conversion/AsmClassSource.java @@ -22,9 +22,11 @@ * #L% */ +import com.google.common.collect.Streams; import java.nio.file.Path; import java.util.*; import java.util.stream.Collectors; +import java.util.stream.Stream; import java.util.stream.StreamSupport; import javax.annotation.Nonnull; import org.objectweb.asm.tree.*; @@ -70,42 +72,31 @@ private static Set resolveFields( return new JavaSootField( fieldSignature, modifiers, - convertAnnotation(fieldNode.invisibleAnnotations), + Streams.concat( + convertAnnotation(fieldNode.visibleAnnotations), + convertAnnotation(fieldNode.invisibleAnnotations)) + .collect(Collectors.toList()), NoPositionInformation.getInstance()); }) .collect(Collectors.toSet()); } - protected static List convertAnnotation(List nodes) { + protected static Stream convertAnnotation(List nodes) { if (nodes == null) { - return Collections.emptyList(); + return Stream.empty(); } - return StreamSupport.stream(AsmUtil.createAnnotationUsage(nodes).spliterator(), false) - .collect(Collectors.toList()); + return StreamSupport.stream(AsmUtil.createAnnotationUsage(nodes).spliterator(), false); } @Override protected Iterable resolveAnnotations() { - List annotationNodes = new ArrayList<>(); - - annotationNodes.addAll( - classNode.visibleAnnotations != null - ? classNode.visibleAnnotations - : Collections.emptyList()); - annotationNodes.addAll( - classNode.visibleTypeAnnotations != null - ? classNode.visibleTypeAnnotations - : Collections.emptyList()); - annotationNodes.addAll( - classNode.invisibleAnnotations != null - ? classNode.invisibleAnnotations - : Collections.emptyList()); - annotationNodes.addAll( - classNode.invisibleTypeAnnotations != null - ? classNode.invisibleTypeAnnotations - : Collections.emptyList()); - - return convertAnnotation(annotationNodes); + Stream annotations = + Streams.concat( + convertAnnotation(classNode.visibleAnnotations), + convertAnnotation(classNode.invisibleAnnotations), + convertAnnotation(classNode.visibleTypeAnnotations), + convertAnnotation(classNode.invisibleTypeAnnotations)); + return annotations.collect(Collectors.toList()); } @Nonnull @@ -129,21 +120,16 @@ public Collection resolveMethods() throws ResolveException { identifierFactory.getMethodSignature( classSignature, methodName, retType, sigTypes); - List annotations = new ArrayList<>(); - if (methodSource.visibleAnnotations != null) { - annotations.addAll(methodSource.visibleAnnotations); - } - if (methodSource.invisibleAnnotations != null) { - annotations.addAll(methodSource.invisibleAnnotations); - } - // TODO: position/line numbers if possible return new JavaSootMethod( asmClassClassSourceContent, methodSignature, modifiers, exceptions, - convertAnnotation(annotations), + Streams.concat( + convertAnnotation(methodSource.visibleAnnotations), + convertAnnotation(methodSource.invisibleAnnotations)) + .collect(Collectors.toList()), NoPositionInformation.getInstance()); }) .collect(Collectors.toSet()); diff --git a/sootup.java.bytecode.frontend/src/main/java/sootup/java/bytecode/frontend/conversion/AsmUtil.java b/sootup.java.bytecode.frontend/src/main/java/sootup/java/bytecode/frontend/conversion/AsmUtil.java index a83b3ddc37d..bb50391a482 100644 --- a/sootup.java.bytecode.frontend/src/main/java/sootup/java/bytecode/frontend/conversion/AsmUtil.java +++ b/sootup.java.bytecode.frontend/src/main/java/sootup/java/bytecode/frontend/conversion/AsmUtil.java @@ -303,7 +303,7 @@ public static AnnotationUsage createAnnotationUsage(AnnotationNode annotationNod } public static Iterable createAnnotationUsage( - List invisibleParameterAnnotation) { + List invisibleParameterAnnotation) { if (invisibleParameterAnnotation == null) { return Collections.emptyList(); }