Skip to content

Commit

Permalink
fix: include invisible Annotations for fields
Browse files Browse the repository at this point in the history
  • Loading branch information
swissiety committed Jan 24, 2025
1 parent b37d99c commit e8f2dd7
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 35 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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.*;
Expand Down Expand Up @@ -70,42 +72,31 @@ private static Set<JavaSootField> 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<AnnotationUsage> convertAnnotation(List<AnnotationNode> nodes) {
protected static Stream<AnnotationUsage> convertAnnotation(List<? extends AnnotationNode> 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<AnnotationUsage> resolveAnnotations() {
List<AnnotationNode> 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<AnnotationUsage> annotations =
Streams.concat(
convertAnnotation(classNode.visibleAnnotations),
convertAnnotation(classNode.invisibleAnnotations),
convertAnnotation(classNode.visibleTypeAnnotations),
convertAnnotation(classNode.invisibleTypeAnnotations));
return annotations.collect(Collectors.toList());
}

@Nonnull
Expand All @@ -129,21 +120,16 @@ public Collection<JavaSootMethod> resolveMethods() throws ResolveException {
identifierFactory.getMethodSignature(
classSignature, methodName, retType, sigTypes);

List<AnnotationNode> 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());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -303,7 +303,7 @@ public static AnnotationUsage createAnnotationUsage(AnnotationNode annotationNod
}

public static Iterable<AnnotationUsage> createAnnotationUsage(
List<AnnotationNode> invisibleParameterAnnotation) {
List<? extends AnnotationNode> invisibleParameterAnnotation) {
if (invisibleParameterAnnotation == null) {
return Collections.emptyList();
}
Expand Down

0 comments on commit e8f2dd7

Please sign in to comment.