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));