Author: hlship
Date: Sun Jul 24 23:05:14 2011
New Revision: 1150523

URL: http://svn.apache.org/viewvc?rev=1150523&view=rev
Log:
TAP5-1508: Record DefaultInjectionProvider to InjectionProvider2

Modified:
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DefaultInjectionProvider.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DefaultInjectionProvider.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DefaultInjectionProvider.java?rev=1150523&r1=1150522&r2=1150523&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DefaultInjectionProvider.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DefaultInjectionProvider.java
 Sun Jul 24 23:05:14 2011
@@ -14,37 +14,42 @@
 
 package org.apache.tapestry5.internal.services;
 
+import org.apache.tapestry5.ioc.AnnotationProvider;
 import org.apache.tapestry5.ioc.Messages;
 import org.apache.tapestry5.ioc.ObjectLocator;
 import org.apache.tapestry5.ioc.services.MasterObjectProvider;
 import org.apache.tapestry5.model.MutableComponentModel;
-import org.apache.tapestry5.services.ClassTransformation;
-import org.apache.tapestry5.services.InjectionProvider;
-import org.apache.tapestry5.services.TransformField;
+import org.apache.tapestry5.plastic.PlasticField;
+import org.apache.tapestry5.services.transform.InjectionProvider2;
+
+import java.lang.annotation.Annotation;
 
 /**
  * Worker for the {@link org.apache.tapestry5.ioc.annotations.Inject} 
annotation that delegates out to the master
  * {@link org.apache.tapestry5.ioc.services.MasterObjectProvider} to access 
the value. This worker must be scheduled
  * after certain other workers, such as {@link BlockInjectionProvider} (which 
is keyed off a combination of type and
  * the Inject annotation).
- * 
+ *
  * @see org.apache.tapestry5.ioc.services.MasterObjectProvider
  */
-public class DefaultInjectionProvider implements InjectionProvider
+public class DefaultInjectionProvider implements InjectionProvider2
 {
     private final MasterObjectProvider masterObjectProvider;
 
     private final ObjectLocator locator;
 
-    public DefaultInjectionProvider(MasterObjectProvider masterObjectProvider, 
ObjectLocator locator)
+    private final ComponentClassCache classCache;
+
+    private final static String MESSAGES_TYPE = Messages.class.getName();
+
+    public DefaultInjectionProvider(MasterObjectProvider masterObjectProvider, 
ObjectLocator locator, ComponentClassCache classCache)
     {
         this.masterObjectProvider = masterObjectProvider;
         this.locator = locator;
+        this.classCache = classCache;
     }
 
-    @SuppressWarnings("unchecked")
-    public boolean provideInjection(String fieldName, Class fieldType, 
ObjectLocator locator,
-            final ClassTransformation transformation, MutableComponentModel 
componentModel)
+    public boolean provideInjection(final PlasticField field, ObjectLocator 
locator, MutableComponentModel componentModel)
     {
         // I hate special cases, but we have a conflict between the 
ObjectProvider contributed so as to inject
         // the global application messages into services, and the injection of 
per-component Messages into components.
@@ -52,12 +57,20 @@ public class DefaultInjectionProvider im
         // to inject the wrong Messages (the global application messages, not 
the component messages) ... so we
         // make a special check here.
 
-        if (fieldType.equals(Messages.class))
+        if (field.getTypeName().equals(MESSAGES_TYPE))
+        {
             return false;
+        }
 
-        TransformField field = transformation.getField(fieldName);
+        Class fieldType = classCache.forName(field.getTypeName());
 
-        Object injectionValue = masterObjectProvider.provide(fieldType, field, 
this.locator, false);
+        Object injectionValue = masterObjectProvider.provide(fieldType, new 
AnnotationProvider()
+        {
+            public <T extends Annotation> T getAnnotation(Class<T> 
annotationClass)
+            {
+                return field.getAnnotation(annotationClass);
+            }
+        }, this.locator, false);
 
         // Null means that no ObjectProvider could provide the value. We have 
set up the chain of
         // command so that InjectResources can give it a try next. Later, 
we'll try to match against

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java?rev=1150523&r1=1150522&r2=1150523&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
 Sun Jul 24 23:05:14 2011
@@ -745,6 +745,8 @@ public final class TapestryModule
 
     /**
      * <dl>
+     * <dt>Default</dt>
+     * <dd>based on {@link MasterObjectProvider}</dd>
      * <dt>Named</dt> <dd>Handles fields with the {@link javax.inject.Named} 
annotation</dd>
      * <dt>Block</dt>
      * <dd>injects fields of type {@link Block}</dd>
@@ -762,33 +764,16 @@ public final class TapestryModule
 
                                                          AssetSource 
assetSource)
     {
-        configuration.addInstance("Named", InjectNamedProvider.class, 
"before:Default");
-        configuration.add("Block", new BlockInjectionProvider(), 
"before:Default");
-        configuration.add("CommonResources", new 
CommonResourcesInjectionProvider(), "after:Default");
-        configuration.add("Asset", new AssetInjectionProvider(symbolSource, 
assetSource), "before:Default");
+        configuration.addInstance("Named", InjectNamedProvider.class);
+        configuration.add("Block", new BlockInjectionProvider());
+        configuration.add("Asset", new AssetInjectionProvider(symbolSource, 
assetSource));
+
+        configuration.addInstance("Default", DefaultInjectionProvider.class);
+
+        configuration.add("CommonResources", new 
CommonResourcesInjectionProvider());
         // This needs to be the last one, since it matches against services
         // and might blow up if there is no match.
         configuration.addInstance("Service", ServiceInjectionProvider.class, 
"after:*");
-
-    }
-
-    /**
-     * Contributes the base set of injection providers:
-     * <dl>
-     * <dt>Default</dt>
-     * <dd>based on {@link MasterObjectProvider}</dd>
-     * <dt>ComponentResources</dt>
-     * <dd>give component access to its resources</dd>
-     * </dl>
-     */
-    @Contribute(InjectionProvider2.class)
-    public static void 
provideOldStyleInjectionProvider(OrderedConfiguration<InjectionProvider> 
configuration,
-
-                                                        MasterObjectProvider 
masterObjectProvider,
-
-                                                        ObjectLocator locator)
-    {
-        configuration.add("Default", new 
DefaultInjectionProvider(masterObjectProvider, locator));
     }
 
     /**


Reply via email to