Polishing
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2013 the original author or authors.
|
||||
* Copyright 2002-2014 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -101,8 +101,8 @@ public class LocalVariableTableParameterNameDiscoverer implements ParameterNameD
|
||||
// We couldn't load the class file, which is not fatal as it
|
||||
// simply means this method of discovering parameter names won't work.
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("Cannot find '.class' file for class [" + clazz
|
||||
+ "] - unable to determine constructors/methods parameter names");
|
||||
logger.debug("Cannot find '.class' file for class [" + clazz +
|
||||
"] - unable to determine constructor/method parameter names");
|
||||
}
|
||||
return NO_DEBUG_INFO_MAP;
|
||||
}
|
||||
@@ -115,14 +115,14 @@ public class LocalVariableTableParameterNameDiscoverer implements ParameterNameD
|
||||
catch (IOException ex) {
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("Exception thrown while reading '.class' file for class [" + clazz +
|
||||
"] - unable to determine constructors/methods parameter names", ex);
|
||||
"] - unable to determine constructor/method parameter names", ex);
|
||||
}
|
||||
}
|
||||
catch (IllegalArgumentException ex) {
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("ASM ClassReader failed to parse class file [" + clazz +
|
||||
"], probably due to a new Java class file version that isn't supported yet " +
|
||||
"- unable to determine constructors/methods parameter names", ex);
|
||||
"- unable to determine constructor/method parameter names", ex);
|
||||
}
|
||||
}
|
||||
finally {
|
||||
@@ -146,6 +146,7 @@ public class LocalVariableTableParameterNameDiscoverer implements ParameterNameD
|
||||
private static final String STATIC_CLASS_INIT = "<clinit>";
|
||||
|
||||
private final Class<?> clazz;
|
||||
|
||||
private final Map<Member, String[]> memberMap;
|
||||
|
||||
public ParameterNameDiscoveringVisitor(Class<?> clazz, Map<Member, String[]> memberMap) {
|
||||
@@ -178,12 +179,17 @@ public class LocalVariableTableParameterNameDiscoverer implements ParameterNameD
|
||||
private static final String CONSTRUCTOR = "<init>";
|
||||
|
||||
private final Class<?> clazz;
|
||||
|
||||
private final Map<Member, String[]> memberMap;
|
||||
|
||||
private final String name;
|
||||
|
||||
private final Type[] args;
|
||||
|
||||
private final String[] parameterNames;
|
||||
|
||||
private final boolean isStatic;
|
||||
|
||||
private String[] parameterNames;
|
||||
private boolean hasLvtInfo = false;
|
||||
|
||||
/*
|
||||
@@ -192,25 +198,22 @@ public class LocalVariableTableParameterNameDiscoverer implements ParameterNameD
|
||||
*/
|
||||
private final int[] lvtSlotIndex;
|
||||
|
||||
public LocalVariableTableVisitor(Class<?> clazz, Map<Member, String[]> map, String name, String desc,
|
||||
boolean isStatic) {
|
||||
public LocalVariableTableVisitor(Class<?> clazz, Map<Member, String[]> map, String name, String desc, boolean isStatic) {
|
||||
super(SpringAsmInfo.ASM_VERSION);
|
||||
this.clazz = clazz;
|
||||
this.memberMap = map;
|
||||
this.name = name;
|
||||
// determine args
|
||||
args = Type.getArgumentTypes(desc);
|
||||
this.parameterNames = new String[args.length];
|
||||
this.args = Type.getArgumentTypes(desc);
|
||||
this.parameterNames = new String[this.args.length];
|
||||
this.isStatic = isStatic;
|
||||
this.lvtSlotIndex = computeLvtSlotIndices(isStatic, args);
|
||||
this.lvtSlotIndex = computeLvtSlotIndices(isStatic, this.args);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitLocalVariable(String name, String description, String signature, Label start, Label end,
|
||||
int index) {
|
||||
public void visitLocalVariable(String name, String description, String signature, Label start, Label end, int index) {
|
||||
this.hasLvtInfo = true;
|
||||
for (int i = 0; i < lvtSlotIndex.length; i++) {
|
||||
if (lvtSlotIndex[i] == index) {
|
||||
for (int i = 0; i < this.lvtSlotIndex.length; i++) {
|
||||
if (this.lvtSlotIndex[i] == index) {
|
||||
this.parameterNames[i] = name;
|
||||
}
|
||||
}
|
||||
@@ -223,27 +226,25 @@ public class LocalVariableTableParameterNameDiscoverer implements ParameterNameD
|
||||
// which doesn't use any local variables.
|
||||
// This means that hasLvtInfo could be false for that kind of methods
|
||||
// even if the class has local variable info.
|
||||
memberMap.put(resolveMember(), parameterNames);
|
||||
this.memberMap.put(resolveMember(), this.parameterNames);
|
||||
}
|
||||
}
|
||||
|
||||
private Member resolveMember() {
|
||||
ClassLoader loader = clazz.getClassLoader();
|
||||
Class<?>[] classes = new Class<?>[args.length];
|
||||
|
||||
// resolve args
|
||||
for (int i = 0; i < args.length; i++) {
|
||||
classes[i] = ClassUtils.resolveClassName(args[i].getClassName(), loader);
|
||||
ClassLoader loader = this.clazz.getClassLoader();
|
||||
Class<?>[] argTypes = new Class<?>[this.args.length];
|
||||
for (int i = 0; i < this.args.length; i++) {
|
||||
argTypes[i] = ClassUtils.resolveClassName(this.args[i].getClassName(), loader);
|
||||
}
|
||||
try {
|
||||
if (CONSTRUCTOR.equals(name)) {
|
||||
return clazz.getDeclaredConstructor(classes);
|
||||
if (CONSTRUCTOR.equals(this.name)) {
|
||||
return this.clazz.getDeclaredConstructor(argTypes);
|
||||
}
|
||||
|
||||
return clazz.getDeclaredMethod(name, classes);
|
||||
} catch (NoSuchMethodException ex) {
|
||||
throw new IllegalStateException("Method [" + name
|
||||
+ "] was discovered in the .class file but cannot be resolved in the class object", ex);
|
||||
return this.clazz.getDeclaredMethod(this.name, argTypes);
|
||||
}
|
||||
catch (NoSuchMethodException ex) {
|
||||
throw new IllegalStateException("Method [" + this.name +
|
||||
"] was discovered in the .class file but cannot be resolved in the class object", ex);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -254,7 +255,8 @@ public class LocalVariableTableParameterNameDiscoverer implements ParameterNameD
|
||||
lvtIndex[i] = nextIndex;
|
||||
if (isWideType(paramTypes[i])) {
|
||||
nextIndex += 2;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
nextIndex++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2012 the original author or authors.
|
||||
* Copyright 2002-2014 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -45,7 +45,7 @@ public class FileSystemResource extends AbstractResource implements WritableReso
|
||||
|
||||
|
||||
/**
|
||||
* Create a new FileSystemResource from a File handle.
|
||||
* Create a new {@code FileSystemResource} from a {@link File} handle.
|
||||
* <p>Note: When building relative resources via {@link #createRelative},
|
||||
* the relative path will apply <i>at the same directory level</i>:
|
||||
* e.g. new File("C:/dir1"), relative path "dir2" -> "C:/dir2"!
|
||||
@@ -62,7 +62,7 @@ public class FileSystemResource extends AbstractResource implements WritableReso
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new FileSystemResource from a file path.
|
||||
* Create a new {@code FileSystemResource} from a file path.
|
||||
* <p>Note: When building relative resources via {@link #createRelative},
|
||||
* it makes a difference whether the specified resource base path here
|
||||
* ends with a slash or not. In the case of "C:/dir1/", relative paths
|
||||
@@ -77,6 +77,7 @@ public class FileSystemResource extends AbstractResource implements WritableReso
|
||||
this.path = StringUtils.cleanPath(path);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return the file path for this resource.
|
||||
*/
|
||||
|
||||
@@ -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");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -49,9 +49,14 @@ public class StandardMethodMetadata implements MethodMetadata {
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new StandardMethodMetadata wrapper for the given Method.
|
||||
* Create a new StandardMethodMetadata wrapper for the given Method,
|
||||
* providing the option to return any nested annotations or annotation arrays in the
|
||||
* form of {@link org.springframework.core.annotation.AnnotationAttributes} instead
|
||||
* of actual {@link java.lang.annotation.Annotation} instances.
|
||||
* @param introspectedMethod the Method to introspect
|
||||
* @param nestedAnnotationsAsMap
|
||||
* @param nestedAnnotationsAsMap return nested annotations and annotation arrays as
|
||||
* {@link org.springframework.core.annotation.AnnotationAttributes} for compatibility
|
||||
* with ASM-based {@link AnnotationMetadata} implementations
|
||||
* @since 3.1.1
|
||||
*/
|
||||
public StandardMethodMetadata(Method introspectedMethod, boolean nestedAnnotationsAsMap) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2013 the original author or authors.
|
||||
* Copyright 2002-2014 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -27,7 +27,6 @@ import org.springframework.asm.SpringAsmInfo;
|
||||
import org.springframework.asm.Type;
|
||||
import org.springframework.core.annotation.AnnotationAttributes;
|
||||
import org.springframework.core.type.MethodMetadata;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
|
||||
/**
|
||||
* ASM method visitor which looks for the annotations defined on the method,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2012 the original author or authors.
|
||||
* Copyright 2002-2014 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -19,8 +19,8 @@ package org.springframework.core.type.filter;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.springframework.core.type.ClassMetadata;
|
||||
import org.springframework.core.type.classreading.MetadataReaderFactory;
|
||||
import org.springframework.core.type.classreading.MetadataReader;
|
||||
import org.springframework.core.type.classreading.MetadataReaderFactory;
|
||||
|
||||
/**
|
||||
* Type filter that is aware of traversing over hierarchy.
|
||||
@@ -131,7 +131,7 @@ public abstract class AbstractTypeHierarchyTraversingFilter implements TypeFilte
|
||||
/**
|
||||
* Override this to match on interface type name.
|
||||
*/
|
||||
protected Boolean matchInterface(String interfaceNames) {
|
||||
protected Boolean matchInterface(String interfaceName) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user