Author: hlship
Date: Sun Jul 24 23:03:47 2011
New Revision: 1150517

URL: http://svn.apache.org/viewvc?rev=1150517&view=rev
Log:
TAP5-1508: Convert InjectNamedWorker into a InjectNamedProvider (implementing 
InjectionProvider2)

Added:
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectNamedProvider.java
Removed:
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectNamedWorker.java
Modified:
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectWorker.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java

Added: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectNamedProvider.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectNamedProvider.java?rev=1150517&view=auto
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectNamedProvider.java
 (added)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectNamedProvider.java
 Sun Jul 24 23:03:47 2011
@@ -0,0 +1,59 @@
+// Copyright 2010, 2011 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.internal.transform;
+
+import org.apache.tapestry5.internal.services.ComponentClassCache;
+import org.apache.tapestry5.ioc.ObjectLocator;
+import org.apache.tapestry5.model.MutableComponentModel;
+import org.apache.tapestry5.plastic.PlasticField;
+import org.apache.tapestry5.services.transform.InjectionProvider2;
+
+import javax.inject.Named;
+
+/**
+ * Processes the combination of {@link javax.inject.Inject} and {@link 
javax.inject.Named} annotations.
+ *
+ * @since 5.3
+ */
+public class InjectNamedProvider implements InjectionProvider2
+{
+    private final ObjectLocator locator;
+
+    private final ComponentClassCache cache;
+
+    public InjectNamedProvider(ObjectLocator locator, ComponentClassCache 
cache)
+    {
+        this.locator = locator;
+        this.cache = cache;
+    }
+
+    public boolean provideInjection(PlasticField field, ObjectLocator locator, 
MutableComponentModel componentModel)
+    {
+        if (!field.hasAnnotation(Named.class))
+        {
+            return false;
+        }
+
+        Named annotation = field.getAnnotation(Named.class);
+
+        Class fieldType = cache.forName(field.getTypeName());
+
+        Object service = this.locator.getService(annotation.value(), 
fieldType);
+
+        field.inject(service);
+
+        return true;
+    }
+}

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectWorker.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectWorker.java?rev=1150517&r1=1150516&r2=1150517&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectWorker.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectWorker.java
 Sun Jul 24 23:03:47 2011
@@ -46,10 +46,6 @@ public class InjectWorker implements Com
     {
         public boolean accept(PlasticField field)
         {
-            // For the moment, InjectNamedWorker handles javax.inject.Inject 
w/ Named, and this code
-            // handles javax.inject.Inject otherwise. InjectNamedWorker runs 
*first* so if we can see
-            // an unclaimed field, with javax.inject.Inject, it is safe to 
continue.
-
             return field.hasAnnotation(Inject.class) ||
                     field.hasAnnotation(javax.inject.Inject.class);
         }

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=1150517&r1=1150516&r2=1150517&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:03:47 2011
@@ -532,7 +532,6 @@ public final class TapestryModule
      * <dd>Support for annotations {@link PageLoaded}, {@link PageAttached}, 
{@link PageDetached}</dd>
      * <dt>InjectService</dt>
      * <dd>Handles the {@link 
org.apache.tapestry5.ioc.annotations.InjectService} annotation</dd>
-     * <dt>InjectNamed</dt> <dd>Handles fields with the {@link 
javax.inject.Inject} and {@link javax.inject.Named} annotations</dd>
      * <dt>Component</dt>
      * <dd>Defines embedded components based on the {@link 
org.apache.tapestry5.annotations.Component} annotation</dd>
      * <dt>Environment</dt>
@@ -613,7 +612,6 @@ public final class TapestryModule
         configuration.addInstance("PageReset", 
PageResetAnnotationWorker.class);
         configuration.addInstance("InjectService", InjectServiceWorker.class);
 
-        configuration.addInstance("InjectNamed", InjectNamedWorker.class);
         configuration.addInstance("Inject", InjectWorker.class);
 
         configuration.addInstance("Persist", PersistWorker.class);
@@ -746,6 +744,17 @@ public final class TapestryModule
     }
 
     /**
+     * <dl>
+     * <dt>Named</dt> <dd>Handles fields with the {@link javax.inject.Named} 
annotation</dd>
+     * </dl>
+     */
+    @Contribute(InjectionProvider2.class)
+    public static void 
provideStandardInjectionProviders(OrderedConfiguration<InjectionProvider2> 
configuration)
+    {
+        configuration.addInstance("Named", InjectNamedProvider.class, 
"before:Default");
+    }
+
+    /**
      * Contributes the base set of injection providers:
      * <dl>
      * <dt>Default</dt>
@@ -763,15 +772,16 @@ public final class TapestryModule
      * services</dd>
      * </dl>
      */
-    public static void 
contributeInjectionProvider(OrderedConfiguration<InjectionProvider> 
configuration,
+    @Contribute(InjectionProvider2.class)
+    public static void 
provideOldStyleInjectionProvider(OrderedConfiguration<InjectionProvider> 
configuration,
 
-                                                   MasterObjectProvider 
masterObjectProvider,
+                                                        MasterObjectProvider 
masterObjectProvider,
 
-                                                   ObjectLocator locator,
+                                                        ObjectLocator locator,
 
-                                                   SymbolSource symbolSource,
+                                                        SymbolSource 
symbolSource,
 
-                                                   AssetSource assetSource)
+                                                        AssetSource 
assetSource)
     {
         configuration.add("Default", new 
DefaultInjectionProvider(masterObjectProvider, locator));
 


Reply via email to