Allow for reuse of key visitor classes in tooling

Based on https://github.com/SpringSource/spring-framework/pull/263
This commit is contained in:
Juergen Hoeller 2013-04-30 21:31:22 +02:00
parent 06fdfb0b0d
commit 0ea17c8382
2 changed files with 19 additions and 15 deletions

View File

@ -43,17 +43,17 @@ import org.springframework.util.MultiValueMap;
* @author Costin Leau * @author Costin Leau
* @since 2.5 * @since 2.5
*/ */
final class AnnotationMetadataReadingVisitor extends ClassMetadataReadingVisitor implements AnnotationMetadata { public class AnnotationMetadataReadingVisitor extends ClassMetadataReadingVisitor implements AnnotationMetadata {
private final ClassLoader classLoader; protected final ClassLoader classLoader;
private final Set<String> annotationSet = new LinkedHashSet<String>(); protected final Set<String> annotationSet = new LinkedHashSet<String>();
private final Map<String, Set<String>> metaAnnotationMap = new LinkedHashMap<String, Set<String>>(4); protected final Map<String, Set<String>> metaAnnotationMap = new LinkedHashMap<String, Set<String>>(4);
private final Map<String, AnnotationAttributes> attributeMap = new LinkedHashMap<String, AnnotationAttributes>(4); protected final Map<String, AnnotationAttributes> attributeMap = new LinkedHashMap<String, AnnotationAttributes>(4);
private final MultiValueMap<String, MethodMetadata> methodMetadataMap = new LinkedMultiValueMap<String, MethodMetadata>(); protected final MultiValueMap<String, MethodMetadata> methodMetadataMap = new LinkedMultiValueMap<String, MethodMetadata>();
public AnnotationMetadataReadingVisitor(ClassLoader classLoader) { public AnnotationMetadataReadingVisitor(ClassLoader classLoader) {

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2012 the original author or authors. * Copyright 2002-2013 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -39,22 +39,24 @@ import org.springframework.util.MultiValueMap;
* @author Chris Beams * @author Chris Beams
* @since 3.0 * @since 3.0
*/ */
final class MethodMetadataReadingVisitor extends MethodVisitor implements MethodMetadata { public class MethodMetadataReadingVisitor extends MethodVisitor implements MethodMetadata {
private final String name; protected final String name;
private final int access; protected final int access;
private String declaringClassName; protected final String declaringClassName;
private final ClassLoader classLoader; protected final ClassLoader classLoader;
private final MultiValueMap<String, MethodMetadata> methodMetadataMap; protected final MultiValueMap<String, MethodMetadata> methodMetadataMap;
protected final Map<String, AnnotationAttributes> attributeMap = new LinkedHashMap<String, AnnotationAttributes>(2);
private final Map<String, AnnotationAttributes> attributeMap = new LinkedHashMap<String, AnnotationAttributes>(2);
public MethodMetadataReadingVisitor(String name, int access, String declaringClassName, ClassLoader classLoader, public MethodMetadataReadingVisitor(String name, int access, String declaringClassName, ClassLoader classLoader,
MultiValueMap<String, MethodMetadata> methodMetadataMap) { MultiValueMap<String, MethodMetadata> methodMetadataMap) {
super(SpringAsmInfo.ASM_VERSION); super(SpringAsmInfo.ASM_VERSION);
this.name = name; this.name = name;
this.access = access; this.access = access;
@ -63,10 +65,11 @@ final class MethodMetadataReadingVisitor extends MethodVisitor implements Method
this.methodMetadataMap = methodMetadataMap; this.methodMetadataMap = methodMetadataMap;
} }
@Override @Override
public AnnotationVisitor visitAnnotation(final String desc, boolean visible) { public AnnotationVisitor visitAnnotation(final String desc, boolean visible) {
String className = Type.getType(desc).getClassName(); String className = Type.getType(desc).getClassName();
methodMetadataMap.add(className, this); this.methodMetadataMap.add(className, this);
return new AnnotationAttributesReadingVisitor(className, this.attributeMap, null, this.classLoader); return new AnnotationAttributesReadingVisitor(className, this.attributeMap, null, this.classLoader);
} }
@ -97,4 +100,5 @@ final class MethodMetadataReadingVisitor extends MethodVisitor implements Method
public String getDeclaringClassName() { public String getDeclaringClassName() {
return this.declaringClassName; return this.declaringClassName;
} }
} }