[picocontainer-scm] [5818] java/2.x/trunk/pico: PICO-391 and PICO-390, an upgrade ASM and Paranamer

paul-yCVjj/[email protected] Tue, 16 Oct 2012 17:02:07 -0500 (CDT)
Newsgroups gmane.comp.java.picocontainer.cvs
Message-ID <[email protected]>
Revision 5818
Author paul
Date 2012-10-16 17:02:06 -0500 (Tue, 16 Oct 2012)

Log Message

PICO-391 and PICO-390, an upgrade ASM and Paranamer

Modified Paths

- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/Injector.java

- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/MethodInjection.java

- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/MethodInjector.java

- java/2.x/trunk/pico/container/src/test/org/picocontainer/injectors/MethodInjectionTestCase.java

- java/2.x/trunk/pico/pom.xml

Diff

Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/Injector.java (5817 => 5818)

--- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/Injector.java 2011-12-03 23:45:50 UTC (rev 5817)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/Injector.java 2012-10-16 22:02:06 UTC (rev 5818)
@@ -13,6 +13,8 @@
import org.picocontainer.Parameter;

import java.lang.annotation.Annotation;
+import java.util.Arrays;
+import java.util.HashSet;

/**
* convenience class providing static methods to conveniently create injectors
@@ -142,7 +144,7 @@
*/
public static ComponentAdapter method(final Object componentKey, final Class componentImplementation, Parameter[] parameters, ComponentMonitor monitor,
String methodName, boolean useNames) throws AbstractInjector.NotConcreteRegistrationException {
- return monitor.newInjector(new MethodInjector(componentKey, componentImplementation, parameters, monitor, methodName, useNames));
+ return monitor.newInjector(new MethodInjector.ByMethodName(componentKey, componentImplementation, parameters, monitor, new HashSet<String>(Arrays.asList(methodName)), useNames));
}

/**

Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/MethodInjection.java (5817 => 5818)

--- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/MethodInjection.java 2011-12-03 23:45:50 UTC (rev 5817)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/MethodInjection.java 2012-10-16 22:02:06 UTC (rev 5818)
@@ -9,16 +9,18 @@
*****************************************************************************/
package org.picocontainer.injectors;

+import org.picocontainer.Characteristics;
import org.picocontainer.ComponentAdapter;
import org.picocontainer.ComponentMonitor;
import org.picocontainer.LifecycleStrategy;
import org.picocontainer.Parameter;
import org.picocontainer.PicoCompositionException;
-import org.picocontainer.Characteristics;
import org.picocontainer.behaviors.AbstractBehaviorFactory;

+import java.lang.reflect.Method;
+import java.util.HashSet;
import java.util.Properties;
-import java.lang.reflect.Method;
+import java.util.Set;

/**
* A {@link org.picocontainer.InjectionFactory} for methods.
@@ -35,6 +37,10 @@
delegate = new MethodInjectionByName(injectionMethodName);
}

+ public MethodInjection(String... injectionMethodNames) {
+ delegate = new MethodInjectionByName(injectionMethodNames);
+ }
+
public MethodInjection() {
this("inject");
}
@@ -49,15 +55,21 @@
}

public class MethodInjectionByName extends AbstractInjectionFactory {
- private final String injectionMethodName;
+ private final Set<String> injectionMethodNames = new HashSet<String>();

+ public MethodInjectionByName(String... injectionMethodNames) {
+ for (String injectionMethodName : injectionMethodNames) {
+ this.injectionMethodNames.add(injectionMethodName);
+ }
+ }
+
public MethodInjectionByName(String injectionMethodName) {
- this.injectionMethodName = injectionMethodName;
+ this.injectionMethodNames.add(injectionMethodName);
}

public <T> ComponentAdapter<T> createComponentAdapter(ComponentMonitor monitor, LifecycleStrategy lifecycleStrategy, Properties componentProperties, Object componentKey, Class<T> componentImplementation, Parameter... parameters) throws PicoCompositionException {
boolean useNames = AbstractBehaviorFactory.arePropertiesPresent(componentProperties, Characteristics.USE_NAMES, true);
- return wrapLifeCycle(new MethodInjector(componentKey, componentImplementation, parameters, monitor, injectionMethodName, useNames), lifecycleStrategy);
+ return wrapLifeCycle(new MethodInjector.ByMethodName(componentKey, componentImplementation, parameters, monitor, injectionMethodNames, useNames), lifecycleStrategy);
}
}

Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/MethodInjector.java (5817 => 5818)

--- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/MethodInjector.java 2011-12-03 23:45:50 UTC (rev 5817)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/MethodInjector.java 2012-10-16 22:02:06 UTC (rev 5818)
@@ -9,17 +9,19 @@

package org.picocontainer.injectors;

+import org.picocontainer.ComponentMonitor;
+import org.picocontainer.Parameter;
+import org.picocontainer.PicoCompositionException;
+import org.picocontainer.PicoContainer;
+import org.picocontainer.annotations.Nullable;
+
import java.lang.annotation.Annotation;
import java.lang.reflect.AccessibleObject;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Member;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
-import org.picocontainer.ComponentMonitor;
-import org.picocontainer.Parameter;
-import org.picocontainer.PicoCompositionException;
-import org.picocontainer.PicoContainer;
-import org.picocontainer.annotations.Nullable;
+import java.util.Set;

/**
* Injection will happen through a single method for the component.
@@ -34,7 +36,7 @@
* @author Mauro Talevi
*/
@SuppressWarnings("serial")
-public class MethodInjector<T> extends SingleMemberInjector<T> {
+public abstract class MethodInjector<T> extends SingleMemberInjector<T> {
private transient ThreadLocalCyclicDependencyGuard instantiationGuard;
private final String methodName;

@@ -57,21 +59,7 @@
this.methodName = methodName;
}

- protected Method getInjectorMethod() {
- Method[] methods = new Method[0];
- try {
- methods = super.getComponentImplementation().getMethods();
- } catch (AmbiguousComponentResolutionException e) {
- e.setComponent(getComponentImplementation());
- throw e;
- }
- for (Method method : methods) {
- if (method.getName().equals(methodName)) {
- return method;
- }
- }
- return null;
- }
+ protected abstract Method getInjectorMethod();

@Override
public T getComponentInstance(final PicoContainer container, @SuppressWarnings("unused") Type into) throws PicoCompositionException {
@@ -83,7 +71,7 @@
Method method = getInjectorMethod();
T inst = null;
ComponentMonitor componentMonitor = currentMonitor();
- try {
+ try { // TODO .. instantiating() ???
componentMonitor.instantiating(container, MethodInjector.this, null);
long startTime = System.currentTimeMillis();
Object[] methodParameters = null;
@@ -120,7 +108,7 @@
@SuppressWarnings("synthetic-access")
public Object run(Object inst) {
Method method = getInjectorMethod();
- if (method.getDeclaringClass().isAssignableFrom(inst.getClass())) {
+ if (method != null && method.getDeclaringClass().isAssignableFrom(inst.getClass())) {
Object[] methodParameters = getMemberArguments(guardedContainer, method);
return invokeMethod(method, methodParameters, (T) inst, container);
}
@@ -179,11 +167,6 @@
}

@Override
- public String getDescriptor() {
- return "MethodInjector-";
- }
-
- @Override
protected boolean isNullParamAllowed(AccessibleObject member, int i) {
Annotation[] annotations = ((Method) member).getParameterAnnotations()[i];
for (Annotation annotation : annotations) {
@@ -210,9 +193,42 @@

@Override
public String getDescriptor() {
- return "ReflectionMethodInjector[" + injectionMethod + "]-";
+ return "MethodInjector.ByReflectionMethod[" + injectionMethod + "]-";
}

}

+ public static class ByMethodName extends MethodInjector {
+ private Set<String> injectionMethodNames;
+
+ public ByMethodName(Object componentKey, Class componentImplementation, Parameter[] parameters, ComponentMonitor monitor, Set<String> injectionMethodNames, boolean useNames) throws NotConcreteRegistrationException {
+ super(componentKey, componentImplementation, parameters, monitor, null, useNames);
+ ByMethodName.this.injectionMethodNames = injectionMethodNames;
+ }
+
+ @Override
+ protected Method getInjectorMethod() {
+ Method[] methods;
+ try {
+ methods = super.getComponentImplementation().getMethods();
+ } catch (AmbiguousComponentResolutionException e) {
+ e.setComponent(getComponentImplementation());
+ throw e;
+ }
+ for (Method method : methods) {
+ if (injectionMethodNames.contains(method.getName())) {
+ return method;
+ }
+ }
+ return null;
+ }
+
+
+ @Override
+ public String getDescriptor() {
+ return "MethodInjector.ByMethodName" + injectionMethodNames + "-";
+ }
+
+ }
+
}
\ No newline at end of file

Modified: java/2.x/trunk/pico/container/src/test/org/picocontainer/injectors/MethodInjectionTestCase.java (5817 => 5818)

--- java/2.x/trunk/pico/container/src/test/org/picocontainer/injectors/MethodInjectionTestCase.java 2011-12-03 23:45:50 UTC (rev 5817)
+++ java/2.x/trunk/pico/container/src/test/org/picocontainer/injectors/MethodInjectionTestCase.java 2012-10-16 22:02:06 UTC (rev 5818)
@@ -9,24 +9,27 @@
*****************************************************************************/
package org.picocontainer.injectors;

-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.lang.reflect.Method;
-
import org.junit.Test;
import org.picocontainer.Characteristics;
import org.picocontainer.DefaultPicoContainer;
import org.picocontainer.MutablePicoContainer;
import org.picocontainer.PicoBuilder;
-import static org.picocontainer.Characteristics.USE_NAMES;
import org.picocontainer.annotations.Nullable;
import org.picocontainer.containers.EmptyPicoContainer;
import org.picocontainer.lifecycle.NullLifecycleStrategy;
import org.picocontainer.monitors.NullComponentMonitor;

+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.HashSet;
+
+import static junit.framework.Assert.assertNull;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import static org.picocontainer.Characteristics.USE_NAMES;
+
public class MethodInjectionTestCase {

public static interface IFoo {
@@ -55,7 +58,7 @@
Foo foo = pico.getComponent(Foo.class);
assertNotNull(foo.bar);
assertNotNull(foo.num);
- assertEquals("MethodInjector-class org.picocontainer.injectors.MethodInjectionTestCase$Foo", pico.getComponentAdapter(Foo.class).toString());
+ assertEquals("MethodInjector.ByMethodName[inject]-class org.picocontainer.injectors.MethodInjectionTestCase$Foo", pico.getComponentAdapter(Foo.class).toString());
}

@Test public void testMethodInjectionViaMethodDef() {
@@ -67,7 +70,7 @@
Foo foo = pico.getComponent(Foo.class);
assertNotNull(foo.bar);
assertNotNull(foo.num);
- assertEquals("ReflectionMethodInjector["+mthd+"]-class org.picocontainer.injectors.MethodInjectionTestCase$Foo", pico.getComponentAdapter(Foo.class).toString());
+ assertEquals("MethodInjector.ByReflectionMethod["+mthd+"]-class org.picocontainer.injectors.MethodInjectionTestCase$Foo", pico.getComponentAdapter(Foo.class).toString());
}

@Test public void testMethodInjectionViaMethodDefViaInterface() {
@@ -79,10 +82,52 @@
Foo foo = pico.getComponent(Foo.class);
assertNotNull(foo.bar);
assertNotNull(foo.num);
- assertEquals("ReflectionMethodInjector["+mthd+"]-class org.picocontainer.injectors.MethodInjectionTestCase$Foo", pico.getComponentAdapter(Foo.class).toString());
+ assertEquals("MethodInjector.ByReflectionMethod["+mthd+"]-class org.picocontainer.injectors.MethodInjectionTestCase$Foo", pico.getComponentAdapter(Foo.class).toString());
}

+ @Test public void testMethodInjectionViaMethodName() {
+ DefaultPicoContainer pico = new DefaultPicoContainer(new MethodInjection("inject"), new NullLifecycleStrategy(), new EmptyPicoContainer());
+ pico.addComponent(123);
+ pico.addComponent(Foo.class);
+ pico.addComponent(new Bar());
+ Foo foo = pico.getComponent(Foo.class);
+ assertNotNull(foo.bar);
+ assertNotNull(foo.num);
+ assertEquals("MethodInjector.ByMethodName[inject]-class org.picocontainer.injectors.MethodInjectionTestCase$Foo", pico.getComponentAdapter(Foo.class).toString());
+ }

+ @Test public void testMethodInjectionSilentlyFailsSafeIfWrongMethodName() {
+ DefaultPicoContainer pico = new DefaultPicoContainer(new MethodInjection("sdjfhkjsdhf"), new NullLifecycleStrategy(), new EmptyPicoContainer());
+ pico.addComponent(123);
+ pico.addComponent(Foo.class);
+ pico.addComponent(new Bar());
+ Foo foo = pico.getComponent(Foo.class);
+ assertNull(foo.bar);
+ assertNull(foo.num);
+ }
+
+ @Test public void testMethodInjectionWorksIfMethodNameOneOfAList() {
+ DefaultPicoContainer pico = new DefaultPicoContainer(new MethodInjection("sdjfhkjsdhf", "inject"), new NullLifecycleStrategy(), new EmptyPicoContainer());
+ pico.addComponent(123);
+ pico.addComponent(Foo.class);
+ pico.addComponent(new Bar());
+ Foo foo = pico.getComponent(Foo.class);
+ assertNotNull(foo.bar);
+ assertNotNull(foo.num);
+ assertEquals("MethodInjector.ByMethodName[sdjfhkjsdhf, inject]-class org.picocontainer.injectors.MethodInjectionTestCase$Foo", pico.getComponentAdapter(Foo.class).toString());
+ }
+
+ @Test public void testCompositeMethodInjectionSilentlyFailsSafeIfWrongMethodName() {
+ DefaultPicoContainer pico = new DefaultPicoContainer(new CompositeInjection(new ConstructorInjection(), new MethodInjection("sdjfhkjsdhf")), new NullLifecycleStrategy(), new EmptyPicoContainer());
+ pico.addComponent(123);
+ pico.addComponent(Foo.class);
+ pico.addComponent(new Bar());
+ Foo foo = pico.getComponent(Foo.class);
+ assertNull(foo.bar);
+ assertNull(foo.num);
+ }
+
+
@Test public void testMethodInjectionViaCharacteristics() {
DefaultPicoContainer pico = new DefaultPicoContainer(new NullLifecycleStrategy(), new EmptyPicoContainer());
pico.addComponent(123);
@@ -91,18 +136,18 @@
Foo foo = pico.getComponent(Foo.class);
assertNotNull(foo.bar);
assertNotNull(foo.num);
- assertEquals("MethodInjector-class org.picocontainer.injectors.MethodInjectionTestCase$Foo", pico.getComponentAdapter(Foo.class).toString());
+ assertEquals("MethodInjector.ByMethodName[inject]-class org.picocontainer.injectors.MethodInjectionTestCase$Foo", pico.getComponentAdapter(Foo.class).toString());
}

@Test public void testMethodInjectionViaAdapter() {
DefaultPicoContainer pico = new DefaultPicoContainer(new MethodInjection());
pico.addComponent(123);
- pico.addAdapter(new MethodInjector(Foo.class, Foo.class, null, new NullComponentMonitor(), "inject", false));
+ pico.addAdapter(new MethodInjector.ByMethodName(Foo.class, Foo.class, null, new NullComponentMonitor(), new HashSet<String>(Arrays.asList("inject")), false));
pico.addComponent(Bar.class);
Foo foo = pico.getComponent(Foo.class);
assertNotNull(foo.bar);
assertNotNull(foo.num);
- assertEquals("MethodInjector-class org.picocontainer.injectors.MethodInjectionTestCase$Foo", pico.getComponentAdapter(Foo.class).toString());
+ assertEquals("MethodInjector.ByMethodName[inject]-class org.picocontainer.injectors.MethodInjectionTestCase$Foo", pico.getComponentAdapter(Foo.class).toString());
}

@Test public void testMethodInjectionByBuilder() {
@@ -113,7 +158,7 @@
Foo foo = pico.getComponent(Foo.class);
assertNotNull(foo.bar);
assertNotNull(foo.num);
- assertEquals("MethodInjector-class org.picocontainer.injectors.MethodInjectionTestCase$Foo", pico.getComponentAdapter(Foo.class).toString());
+ assertEquals("MethodInjector.ByMethodName[inject]-class org.picocontainer.injectors.MethodInjectionTestCase$Foo", pico.getComponentAdapter(Foo.class).toString());
}

public static class Foo2 implements IFoo {
@@ -133,7 +178,7 @@
Foo2 foo = pico.getComponent(Foo2.class);
assertNotNull(foo.bar);
assertTrue(foo.num == null);
- assertEquals("MethodInjector-class org.picocontainer.injectors.MethodInjectionTestCase$Foo2", pico.getComponentAdapter(Foo2.class).toString());
+ assertEquals("MethodInjector.ByMethodName[inject]-class org.picocontainer.injectors.MethodInjectionTestCase$Foo2", pico.getComponentAdapter(Foo2.class).toString());
}

@Test public void testMethodInjectionWithDisallowedNullableParam() {
@@ -159,7 +204,7 @@
assertNotNull(foo.bar);
assertNotNull(foo.num);
assertEquals(123, (int)foo.num);
- assertEquals("MethodInjector-class org.picocontainer.injectors.MethodInjectionTestCase$Foo", pico.getComponentAdapter(Foo.class).toString());
+ assertEquals("MethodInjector.ByMethodName[inject]-class org.picocontainer.injectors.MethodInjectionTestCase$Foo", pico.getComponentAdapter(Foo.class).toString());
}

}
\ No newline at end of file

Modified: java/2.x/trunk/pico/pom.xml (5817 => 5818)

--- java/2.x/trunk/pico/pom.xml 2011-12-03 23:45:50 UTC (rev 5817)
+++ java/2.x/trunk/pico/pom.xml 2012-10-16 22:02:06 UTC (rev 5818)
@@ -63,14 +63,14 @@
<dependency>
<groupId>com.thoughtworks.paranamer</groupId>
<artifactId>paranamer</artifactId>
- <version>2.4</version>
+ <version>2.5.1</version>
<optional>true</optional>
</dependency>
<!-- For proxy -->
<dependency>
<groupId>asm</groupId>
<artifactId>asm</artifactId>
- <version>3.3</version>
+ <version>3.3.1</version>
<optional>true</optional>
</dependency>
<dependency>

----------

To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email