You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2006/10/27 19:41:43 UTC

svn commit: r468472 - in /tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj: ./ src/main/aspect/org/apache/tapestry/internal/aspects/ src/main/java/org/apache/tapestry/ src/main/java/org/apache/tapestry/internal/ src/main/java/org...

Author: hlship
Date: Fri Oct 27 10:41:40 2006
New Revision: 468472

URL: http://svn.apache.org/viewvc?view=rev&rev=468472
Log:
Convert remaining AspectJ aspect + Annotation bits into pure Java code.
Remove AspectJ support from the project and from Maven.
Shrank output JAR size by about 30% (657K to 449K).

Added:
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/util/OneShotLock.java
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/test/java/org/apache/tapestry/internal/util/OneShotLockSubject.java
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/test/java/org/apache/tapestry/internal/util/OneShotLockTest.java
Removed:
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/aspect/org/apache/tapestry/internal/aspects/AbstractClassTargetting.aj
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/aspect/org/apache/tapestry/internal/aspects/InternalOneShotChecks.aj
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/aspect/org/apache/tapestry/internal/aspects/InternalUtilityChecks.aj
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/aspect/org/apache/tapestry/internal/aspects/OneShotChecks.aj
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/aspect/org/apache/tapestry/internal/aspects/UtilityChecks.aj
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/annotations/OneShot.java
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/annotations/Utility.java
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/test/java/org/apache/tapestry/internal/aspects/OneShotChecksAspectTest.java
Modified:
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/.classpath
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/.project
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/pom.xml
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/TapestryConstants.java
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/InternalConstants.java
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/bindings/BindingsMessages.java
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/ioc/IOCMessages.java
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/ioc/IOCProxyUtilities.java
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/ioc/RegistryImpl.java
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/ioc/services/AbstractFab.java
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/ioc/services/ClassFabImpl.java
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/ioc/services/RegistryShutdownHubImpl.java
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/ioc/services/ServiceMessages.java
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/model/ModelMessages.java
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/services/ServicesMessages.java
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/structure/StructureMessages.java
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/util/InternalUtils.java
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/util/Orderer.java
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/util/UtilMessages.java
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/ioc/IOCConstants.java
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/ioc/IOCUtilities.java
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/ioc/RegistryBuilder.java
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/ioc/services/ClassFabUtils.java
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/services/TransformConstants.java
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/services/TransformUtils.java
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/util/CollectionFactory.java
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/util/Defense.java
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/util/UtilMessages.java
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/resources/org/apache/tapestry/internal/util/UtilStrings.properties
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/test/java/org/apache/tapestry/internal/TargetMessages.java
    tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/test/java/org/apache/tapestry/internal/services/TemplateParserImplTest.java

Modified: tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/.classpath
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/.classpath?view=diff&rev=468472&r1=468471&r2=468472
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/.classpath (original)
+++ tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/.classpath Fri Oct 27 10:41:40 2006
@@ -1,13 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry kind="src" path="src/main/java"/>
-	<classpathentry kind="src" path="src/main/aspect"/>
+	<classpathentry excluding="org/apache/tapestry/internal/aspects/InternalOneShotChecks.aj" kind="src" path="src/main/aspect"/>
 	<classpathentry kind="lib" path="src/main/resources"/>
 	<classpathentry kind="src" path="src/test/java"/>
 	<classpathentry kind="lib" path="src/test/resources"/>
 	<classpathentry kind="lib" path="src/test/conf"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
-	<classpathentry kind="con" path="org.eclipse.ajdt.core.ASPECTJRT_CONTAINER"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>

Modified: tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/.project
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/.project?view=diff&rev=468472&r1=468471&r2=468472
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/.project (original)
+++ tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/.project Fri Oct 27 10:41:40 2006
@@ -6,7 +6,7 @@
 	</projects>
 	<buildSpec>
 		<buildCommand>
-			<name>org.eclipse.ajdt.core.ajbuilder</name>
+			<name>org.eclipse.jdt.core.javabuilder</name>
 			<arguments>
 			</arguments>
 		</buildCommand>
@@ -17,7 +17,6 @@
 		</buildCommand>
 	</buildSpec>
 	<natures>
-		<nature>org.eclipse.ajdt.ui.ajnature</nature>
 		<nature>org.eclipse.jdt.core.javanature</nature>
 		<nature>org.maven.ide.eclipse.maven2Nature</nature>
 	</natures>

Modified: tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/pom.xml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/pom.xml?view=diff&rev=468472&r1=468471&r2=468472
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/pom.xml (original)
+++ tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/pom.xml Fri Oct 27 10:41:40 2006
@@ -43,10 +43,6 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>aspectj</groupId>
-            <artifactId>aspectjrt</artifactId>
-        </dependency>
-        <dependency>
             <groupId>javax.servlet</groupId>
             <artifactId>servlet-api</artifactId>
         </dependency>
@@ -74,10 +70,6 @@
     <build>
         <plugins>
             <plugin>
-                <groupId>org.codehaus.mojo</groupId>
-                <artifactId>aspectj-maven-plugin</artifactId>
-            </plugin>
-            <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-surefire-plugin</artifactId>
                 <configuration>
@@ -86,6 +78,16 @@
                     </suiteXmlFiles>
                 </configuration>
             </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>1.5</source>
+                    <target>1.5</target>
+                    <optimize>true</optimize>
+                    <verbose>true</verbose>
+                </configuration>
+            </plugin>          
         </plugins>
     </build>
     <reporting>

Modified: tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/TapestryConstants.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/TapestryConstants.java?view=diff&rev=468472&r1=468471&r2=468472
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/TapestryConstants.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/TapestryConstants.java Fri Oct 27 10:41:40 2006
@@ -14,16 +14,15 @@
 
 package org.apache.tapestry;
 
-import org.apache.tapestry.internal.annotations.Utility;
-
 /**
  * Collection of common constant values used throughout Tapestry.
- * 
- * 
  */
-@Utility
 public final class TapestryConstants
 {
     /** Default client event name, used in most situations. */
     public static final String DEFAULT_EVENT = "action";
+
+    private TapestryConstants()
+    {
+    }
 }

Modified: tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/InternalConstants.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/InternalConstants.java?view=diff&rev=468472&r1=468471&r2=468472
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/InternalConstants.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/InternalConstants.java Fri Oct 27 10:41:40 2006
@@ -14,12 +14,6 @@
 
 package org.apache.tapestry.internal;
 
-import org.apache.tapestry.internal.annotations.Utility;
-
-/**
- * 
- */
-@Utility
 public final class InternalConstants
 {
     /**
@@ -33,4 +27,8 @@
 
     /** Binding expression prefix used to bind to a property of the component. */
     public static final String PROP_BINDING_PREFIX = "prop";
+
+    private InternalConstants()
+    {
+    }
 }

Modified: tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/bindings/BindingsMessages.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/bindings/BindingsMessages.java?view=diff&rev=468472&r1=468471&r2=468472
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/bindings/BindingsMessages.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/bindings/BindingsMessages.java Fri Oct 27 10:41:40 2006
@@ -17,16 +17,15 @@
 import org.apache.tapestry.Binding;
 import org.apache.tapestry.Messages;
 import org.apache.tapestry.internal.MessagesImpl;
-import org.apache.tapestry.internal.annotations.Utility;
 
-/**
- * 
- */
-@Utility
 final class BindingsMessages
 {
     private static final Messages MESSAGES = MessagesImpl.forClass(BindingsMessages.class);
 
+    private BindingsMessages()
+    {
+    }
+
     static String bindingIsReadOnly(Binding binding)
     {
         return MESSAGES.format("binding-is-read-only", binding);
@@ -39,7 +38,11 @@
 
     static String noSuchProperty(Class targetClass, String propertyName, String propertyPath)
     {
-        return MESSAGES.format("no-such-property", targetClass.getName(), propertyName, propertyPath);
+        return MESSAGES.format(
+                "no-such-property",
+                targetClass.getName(),
+                propertyName,
+                propertyPath);
     }
 
     static String writeOnlyProperty(String propertyName, Class clazz, String propertyPath)

Modified: tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/ioc/IOCMessages.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/ioc/IOCMessages.java?view=diff&rev=468472&r1=468471&r2=468472
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/ioc/IOCMessages.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/ioc/IOCMessages.java Fri Oct 27 10:41:40 2006
@@ -26,17 +26,16 @@
 
 import org.apache.tapestry.Messages;
 import org.apache.tapestry.internal.MessagesImpl;
-import org.apache.tapestry.internal.annotations.Utility;
 import org.apache.tapestry.ioc.def.ContributionDef;
 import org.apache.tapestry.ioc.def.ServiceDef;
 
-/**
- * 
- */
-@Utility
 public final class IOCMessages
 {
     private static final Messages MESSAGES = MessagesImpl.forClass(IOCMessages.class);
+
+    private IOCMessages()
+    {
+    }
 
     static String buildMethodConflict(Method conflict, String existing)
     {

Modified: tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/ioc/IOCProxyUtilities.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/ioc/IOCProxyUtilities.java?view=diff&rev=468472&r1=468471&r2=468472
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/ioc/IOCProxyUtilities.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/ioc/IOCProxyUtilities.java Fri Oct 27 10:41:40 2006
@@ -14,14 +14,15 @@
 
 package org.apache.tapestry.internal.ioc;
 
-import org.apache.tapestry.internal.annotations.Utility;
-
 /**
  * Contains static methods used by proxies generated at runtime.
  */
-@Utility
 public final class IOCProxyUtilities
 {
+    private IOCProxyUtilities()
+    {
+    }
+
     /**
      * Invoked by a proxy when the registry has shutdown.
      * 

Modified: tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/ioc/RegistryImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/ioc/RegistryImpl.java?view=diff&rev=468472&r1=468471&r2=468472
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/ioc/RegistryImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/ioc/RegistryImpl.java Fri Oct 27 10:41:40 2006
@@ -25,10 +25,10 @@
 import java.util.Set;
 
 import org.apache.commons.logging.Log;
-import org.apache.tapestry.internal.annotations.OneShot;
 import org.apache.tapestry.internal.ioc.services.ClassFactoryImpl;
 import org.apache.tapestry.internal.ioc.services.RegistryShutdownHubImpl;
 import org.apache.tapestry.internal.ioc.services.ThreadCleanupHubImpl;
+import org.apache.tapestry.internal.util.OneShotLock;
 import org.apache.tapestry.internal.util.Orderer;
 import org.apache.tapestry.ioc.Configuration;
 import org.apache.tapestry.ioc.IOCConstants;
@@ -54,10 +54,6 @@
 import org.apache.tapestry.ioc.services.ThreadCleanupHub;
 import org.apache.tapestry.util.CollectionFactory;
 
-/**
- * 
- */
-@OneShot
 public class RegistryImpl implements Registry, InternalRegistry
 {
     private static final String REGISTRY_SHUTDOWN_HUB_SERVICE_ID = "tapestry.ioc.RegistryShutdownHub";
@@ -72,6 +68,8 @@
 
     static final String LOG_SOURCE_SERVICE_ID = "tapestry.ioc.LogSource";
 
+    private final OneShotLock _lock = new OneShotLock();
+
     private final Map<String, Object> _builtinServices = newMap();
 
     private final Map<String, Class> _builtinTypes = newMap();
@@ -156,15 +154,18 @@
         _builtinServices.put(serviceId, service);
     }
 
-    @OneShot.Lockdown
     public synchronized void shutdown()
     {
+        _lock.lock();
+
         _registryShutdownHub.fireRegistryDidShutdown();
     }
 
     /** Internal access, usualy from another module. */
     public <T> T getService(String serviceId, Class<T> serviceInterface, Module module)
     {
+        _lock.check();
+
         T result = checkForBuiltinService(serviceId, serviceInterface);
         if (result != null)
             return result;
@@ -200,11 +201,15 @@
      */
     public <T> T getService(String serviceId, Class<T> serviceInterface)
     {
+        _lock.check();
+
         return getService(serviceId, serviceInterface, null);
     }
 
     public void cleanupThread()
     {
+        _lock.check();
+
         _cleanupHub.cleanup();
     }
 
@@ -222,6 +227,8 @@
 
     public <T> Collection<T> getUnorderedConfiguration(ServiceDef serviceDef, Class<T> objectType)
     {
+        _lock.check();
+
         final Collection<T> result = newList();
 
         Configuration<T> configuration = new Configuration<T>()
@@ -242,6 +249,8 @@
 
     public <T> List<T> getOrderedConfiguration(ServiceDef serviceDef, Class<T> objectType)
     {
+        _lock.check();
+
         Log log = getLog(serviceDef.getServiceId());
 
         final Orderer<T> orderer = new Orderer<T>(log);
@@ -259,6 +268,8 @@
     public <K, V> Map<K, V> getMappedConfiguration(ServiceDef serviceDef, Class<K> keyType,
             Class<V> objectType)
     {
+        _lock.check();
+
         final Map<K, V> result = newMap();
 
         MappedConfiguration<K, V> configuration = new MappedConfiguration<K, V>()
@@ -381,6 +392,8 @@
     // Seems like something that could be cached.
     public <T> T getService(Class<T> serviceInterface, Module module)
     {
+        _lock.check();
+
         List<String> ids = CollectionFactory.newList();
 
         for (Module m : _modules.values())
@@ -411,11 +424,15 @@
 
     public <T> T getService(Class<T> serviceInterface)
     {
+        _lock.check();
+
         return getService(serviceInterface, null);
     }
 
     public ServiceLifecycle getServiceLifecycle(String lifecycle)
     {
+        _lock.check();
+
         ServiceLifecycle result = _lifecycles.get(lifecycle);
 
         if (result == null)
@@ -434,6 +451,8 @@
 
     public List<ServiceDecorator> findDecoratorsForService(ServiceDef serviceDef)
     {
+        _lock.check();
+
         Log log = getLog(serviceDef.getServiceId());
 
         Orderer<DecoratorDef> orderer = new Orderer<DecoratorDef>(log);
@@ -516,21 +535,29 @@
 
     public Log getLog(Class clazz)
     {
+        _lock.check();
+
         return _logSource.getLog(clazz);
     }
 
     public Log getLog(String name)
     {
+        _lock.check();
+
         return _logSource.getLog(name);
     }
 
     public ClassFab newClass(Class serviceInterface)
     {
+        _lock.check();
+
         return _classFactory.newClass(serviceInterface);
     }
 
     public <T> T getObject(String reference, Class<T> objectType, ServiceLocator locator)
     {
+        _lock.check();
+
         ObjectProvider masterProvider = getService(
                 IOCConstants.MASTER_OBJECT_PROVIDER_SERVICE_ID,
                 ObjectProvider.class);
@@ -540,12 +567,16 @@
 
     public <T> T getObject(String reference, Class<T> objectType)
     {
+        _lock.check();
+
         // Concerened about this causing potential endless loops.
         return getObject(reference, objectType, this);
     }
 
     public void addRegistryShutdownListener(RegistryShutdownListener listener)
     {
+        _lock.check();
+
         _registryShutdownHub.addRegistryShutdownListener(listener);
     }
 }

Modified: tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/ioc/services/AbstractFab.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/ioc/services/AbstractFab.java?view=diff&rev=468472&r1=468471&r2=468472
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/ioc/services/AbstractFab.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/ioc/services/AbstractFab.java Fri Oct 27 10:41:40 2006
@@ -21,16 +21,17 @@
 import javassist.CtClass;
 
 import org.apache.commons.logging.Log;
-import org.apache.tapestry.internal.annotations.OneShot;
+import org.apache.tapestry.internal.util.OneShotLock;
 
 /**
  * Base class for {@link org.apache.tapestry.internal.ioc.services.ClassFabImpl}. This code is a
  * fork from HiveMind; it is kept seperate from ClassFabImpl in case we want to re-introduce the
  * idea of an InterfaceFab.
  */
-@OneShot
 public class AbstractFab
 {
+    protected final OneShotLock _lock = new OneShotLock();
+
     private final CtClass _ctClass;
 
     private final CtClassSource _source;
@@ -51,6 +52,8 @@
 
     public void addInterface(Class interfaceClass)
     {
+        _lock.check();
+
         CtClass ctInterfaceClass = _source.getCtClass(interfaceClass);
 
         try
@@ -98,9 +101,10 @@
         return result;
     }
 
-    @OneShot.Lockdown
     public Class createClass()
     {
+        _lock.lock();
+
         if (_log.isDebugEnabled())
             _log.debug(String.format("Creating class from %s", this));
 

Modified: tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/ioc/services/ClassFabImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/ioc/services/ClassFabImpl.java?view=diff&rev=468472&r1=468471&r2=468472
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/ioc/services/ClassFabImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/ioc/services/ClassFabImpl.java Fri Oct 27 10:41:40 2006
@@ -140,6 +140,8 @@
 
     public void addField(String name, Class type)
     {
+        _lock.check();
+
         CtClass ctType = convertClass(type);
 
         try
@@ -161,6 +163,8 @@
     public void proxyMethodsToDelegate(Class serviceInterface, String delegateExpression,
             String toString)
     {
+        _lock.check();
+
         addInterface(serviceInterface);
 
         MethodIterator mi = new MethodIterator(serviceInterface);
@@ -182,6 +186,8 @@
 
     public void addToString(String toString)
     {
+        _lock.check();
+
         MethodSignature sig = new MethodSignature(String.class, "toString", null, null);
 
         // TODO: Very simple quoting here, will break down if the string itself contains
@@ -192,6 +198,8 @@
 
     public void addMethod(int modifiers, MethodSignature ms, String body)
     {
+        _lock.check();
+
         if (_addedSignatures.contains(ms))
             throw new RuntimeException(ServiceMessages.duplicateMethodInClass(ms, this));
 
@@ -230,6 +238,8 @@
 
     public void addNoOpMethod(MethodSignature signature)
     {
+        _lock.check();
+
         Class returnType = signature.getReturnType();
 
         if (returnType.equals(void.class))
@@ -252,6 +262,8 @@
     public void addConstructor(Class[] parameterTypes, Class[] exceptions, String body)
     {
         Defense.notBlank(body, "body");
+
+        _lock.check();
 
         CtClass[] ctParameters = convertClasses(parameterTypes);
         CtClass[] ctExceptions = convertClasses(exceptions);

Modified: tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/ioc/services/RegistryShutdownHubImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/ioc/services/RegistryShutdownHubImpl.java?view=diff&rev=468472&r1=468471&r2=468472
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/ioc/services/RegistryShutdownHubImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/ioc/services/RegistryShutdownHubImpl.java Fri Oct 27 10:41:40 2006
@@ -19,16 +19,14 @@
 import java.util.List;
 
 import org.apache.commons.logging.Log;
-import org.apache.tapestry.internal.annotations.OneShot;
+import org.apache.tapestry.internal.util.OneShotLock;
 import org.apache.tapestry.ioc.services.RegistryShutdownHub;
 import org.apache.tapestry.ioc.services.RegistryShutdownListener;
 
-/**
- * 
- */
-@OneShot
 public class RegistryShutdownHubImpl implements RegistryShutdownHub
 {
+    private final OneShotLock _lock = new OneShotLock();
+
     private final Log _log;
 
     private final List<RegistryShutdownListener> _listeners = newThreadSafeList();
@@ -40,6 +38,8 @@
 
     public void addRegistryShutdownListener(RegistryShutdownListener listener)
     {
+        _lock.check();
+
         _listeners.add(listener);
     }
 
@@ -50,9 +50,10 @@
      * @param log
      *            used if any listener throws an exception
      */
-    @OneShot.Lockdown
     public void fireRegistryDidShutdown()
     {
+        _lock.lock();
+
         for (RegistryShutdownListener l : _listeners)
         {
             try

Modified: tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/ioc/services/ServiceMessages.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/ioc/services/ServiceMessages.java?view=diff&rev=468472&r1=468471&r2=468472
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/ioc/services/ServiceMessages.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/ioc/services/ServiceMessages.java Fri Oct 27 10:41:40 2006
@@ -18,17 +18,16 @@
 
 import org.apache.tapestry.Messages;
 import org.apache.tapestry.internal.MessagesImpl;
-import org.apache.tapestry.internal.annotations.Utility;
 import org.apache.tapestry.ioc.services.MethodSignature;
 import org.apache.tapestry.ioc.services.ThreadCleanupListener;
 
-/**
- * 
- */
-@Utility
 final class ServiceMessages
 {
     private final static Messages MESSAGES = MessagesImpl.forClass(ServiceMessages.class);
+
+    private ServiceMessages()
+    {
+    }
 
     static String unableToAddMethod(MethodSignature signature, CtClass ctClass, Throwable cause)
     {

Modified: tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/model/ModelMessages.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/model/ModelMessages.java?view=diff&rev=468472&r1=468471&r2=468472
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/model/ModelMessages.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/model/ModelMessages.java Fri Oct 27 10:41:40 2006
@@ -16,15 +16,14 @@
 
 import org.apache.tapestry.Messages;
 import org.apache.tapestry.internal.MessagesImpl;
-import org.apache.tapestry.internal.annotations.Utility;
 
-/**
- * 
- */
-@Utility
 class ModelMessages
 {
     private final static Messages MESSAGES = MessagesImpl.forClass(ModelMessages.class);
+
+    private ModelMessages()
+    {
+    }
 
     static String duplicateParameter(String parameterName, String componentName)
     {

Modified: tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/services/ServicesMessages.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/services/ServicesMessages.java?view=diff&rev=468472&r1=468471&r2=468472
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/services/ServicesMessages.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/services/ServicesMessages.java Fri Oct 27 10:41:40 2006
@@ -23,15 +23,17 @@
 import org.apache.tapestry.Messages;
 import org.apache.tapestry.Resource;
 import org.apache.tapestry.internal.MessagesImpl;
-import org.apache.tapestry.internal.annotations.Utility;
 import org.apache.tapestry.internal.util.InternalUtils;
 import org.apache.tapestry.runtime.RenderCommand;
 import org.apache.tapestry.services.MethodSignature;
 
-@Utility
 class ServicesMessages
 {
     private static final Messages MESSAGES = MessagesImpl.forClass(ServicesMessages.class);
+
+    private ServicesMessages()
+    {
+    }
 
     static final String duplicateContribution(Object conflict, String name, Object existing)
     {

Modified: tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/structure/StructureMessages.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/structure/StructureMessages.java?view=diff&rev=468472&r1=468471&r2=468472
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/structure/StructureMessages.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/structure/StructureMessages.java Fri Oct 27 10:41:40 2006
@@ -18,13 +18,15 @@
 
 import org.apache.tapestry.Messages;
 import org.apache.tapestry.internal.MessagesImpl;
-import org.apache.tapestry.internal.annotations.Utility;
 import org.apache.tapestry.internal.util.InternalUtils;
 
-@Utility
-final class StructureMessages
+class StructureMessages
 {
     private static final Messages MESSAGES = MessagesImpl.forClass(StructureMessages.class);
+
+    private StructureMessages()
+    {
+    }
 
     static String missingParameters(List<String> parameters, ComponentPageElement element)
     {

Modified: tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/util/InternalUtils.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/util/InternalUtils.java?view=diff&rev=468472&r1=468471&r2=468472
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/util/InternalUtils.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/util/InternalUtils.java Fri Oct 27 10:41:40 2006
@@ -29,7 +29,6 @@
 
 import org.apache.tapestry.Locatable;
 import org.apache.tapestry.Location;
-import org.apache.tapestry.internal.annotations.Utility;
 import org.apache.tapestry.ioc.ServiceLocator;
 import org.apache.tapestry.ioc.annotations.Inject;
 import org.apache.tapestry.ioc.annotations.InjectService;
@@ -38,7 +37,7 @@
  * Utilities used within various internal implemenations of Tapestry IOC and the rest of the
  * tapestry-core framework.
  */
-@Utility
+
 public class InternalUtils
 {
     /**
@@ -46,6 +45,10 @@
      * member name.
      */
     public static final String NAME_PREFIX = "_$";
+
+    private InternalUtils()
+    {
+    }
 
     /**
      * Converts a method to a user presentable string consisting of the containing class name, the

Added: tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/util/OneShotLock.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/util/OneShotLock.java?view=auto&rev=468472
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/util/OneShotLock.java (added)
+++ tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/util/OneShotLock.java Fri Oct 27 10:41:40 2006
@@ -0,0 +1,44 @@
+package org.apache.tapestry.internal.util;
+
+/**
+ * Logic for handling one shot semantics for classes; classes that include a method (or methods)
+ * that "locks down" the instance, to prevent it from being used again in the future.
+ */
+public class OneShotLock
+{
+    private boolean _lock;
+
+    /**
+     * Checks to see if the lock has been set (via {@link #lock()}).
+     * 
+     * @throws IllegalStateException
+     *             if the lock is set
+     */
+    public void check()
+    {
+        innerCheck();
+    }
+
+    private void innerCheck()
+    {
+        if (_lock)
+        {
+            // [0] is getStackTrace()
+            // [1] is innerCheck()
+            // [2] is check() or lock()
+            // [3] is caller of check() or lock()
+            
+            StackTraceElement element = Thread.currentThread().getStackTrace()[4];
+
+            throw new IllegalStateException(UtilMessages.oneShotLock(element));
+        }
+    }
+
+    /** Checks the lock, then sets it. */
+    public void lock()
+    {
+        innerCheck();
+
+        _lock = true;
+    }
+}

Modified: tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/util/Orderer.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/util/Orderer.java?view=diff&rev=468472&r1=468471&r2=468472
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/util/Orderer.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/util/Orderer.java Fri Oct 27 10:41:40 2006
@@ -22,7 +22,6 @@
 import java.util.Map;
 
 import org.apache.commons.logging.Log;
-import org.apache.tapestry.internal.annotations.OneShot;
 import org.apache.tapestry.internal.ioc.IdMatcherImpl;
 import org.apache.tapestry.ioc.IOCUtilities;
 import org.apache.tapestry.ioc.IdMatcher;
@@ -33,9 +32,10 @@
  * Used to order objects into an "execution" order. Each object must have a unique id. It may
  * specify a list of constraints which identify the ordering of the objects.
  */
-@OneShot
 public class Orderer<T>
 {
+    private final OneShotLock _lock = new OneShotLock();
+
     private final Log _log;
 
     private final List<Orderable> _orderables = newList();
@@ -88,6 +88,8 @@
      */
     public void add(Orderable<T> orderable)
     {
+        _lock.check();
+
         String id = orderable.getId();
 
         if (_orderablesById.containsKey(id))
@@ -115,12 +117,15 @@
 
     public void add(String id, T target, String... constraints)
     {
+        _lock.check();
+
         add(new Orderable<T>(id, target, constraints));
     }
 
-    @OneShot.Lockdown
     public List<T> getOrdered()
     {
+        _lock.lock();
+
         initializeGraph();
 
         List<T> result = newList();

Modified: tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/util/UtilMessages.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/util/UtilMessages.java?view=diff&rev=468472&r1=468471&r2=468472
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/util/UtilMessages.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/internal/util/UtilMessages.java Fri Oct 27 10:41:40 2006
@@ -18,16 +18,15 @@
 
 import org.apache.tapestry.Messages;
 import org.apache.tapestry.internal.MessagesImpl;
-import org.apache.tapestry.internal.annotations.Utility;
 
-/**
- * 
- */
-@Utility
-final class UtilMessages
+class UtilMessages
 {
     private static final Messages MESSAGES = MessagesImpl.forClass(UtilMessages.class);
 
+    private UtilMessages()
+    {
+    }
+
     static String unableToReadLastModified(URL url, Throwable cause)
     {
         return MESSAGES.format("unable-to-read-last-modified", url, cause);
@@ -48,4 +47,8 @@
         return MESSAGES.format("constraint-format", constraint, id);
     }
 
+    static String oneShotLock(StackTraceElement element)
+    {
+        return MESSAGES.format("one-shot-lock", element);
+    }
 }

Modified: tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/ioc/IOCConstants.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/ioc/IOCConstants.java?view=diff&rev=468472&r1=468471&r2=468472
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/ioc/IOCConstants.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/ioc/IOCConstants.java Fri Oct 27 10:41:40 2006
@@ -14,12 +14,6 @@
 
 package org.apache.tapestry.ioc;
 
-import org.apache.tapestry.internal.annotations.Utility;
-
-/**
- * 
- */
-@Utility
 public class IOCConstants
 {
     public static final String DEFAULT_LIFECYCLE = "singleton";
@@ -27,4 +21,8 @@
     public static final String MODULE_BUILDER_MANIFEST_ENTRY_NAME = "Tapestry-Module-Classes";
 
     public static final String MASTER_OBJECT_PROVIDER_SERVICE_ID = "tapestry.ioc.MasterObjectProvider";
+
+    private IOCConstants()
+    {
+    }
 }

Modified: tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/ioc/IOCUtilities.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/ioc/IOCUtilities.java?view=diff&rev=468472&r1=468471&r2=468472
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/ioc/IOCUtilities.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/ioc/IOCUtilities.java Fri Oct 27 10:41:40 2006
@@ -23,15 +23,16 @@
 import java.util.Enumeration;
 import java.util.jar.Manifest;
 
-import org.apache.tapestry.internal.annotations.Utility;
-
 /**
  * A collection of utility methods for a couple of different areas, including creating the initial
  * {@link org.apache.tapestry.ioc.Registry}.
  */
-@Utility
 public final class IOCUtilities
 {
+    private IOCUtilities()
+    {
+    }
+
     /**
      * Construct a default registry, including modules identify via the Tapestry-Module-Classes
      * Manifest entry.

Modified: tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/ioc/RegistryBuilder.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/ioc/RegistryBuilder.java?view=diff&rev=468472&r1=468471&r2=468472
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/ioc/RegistryBuilder.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/ioc/RegistryBuilder.java Fri Oct 27 10:41:40 2006
@@ -23,11 +23,11 @@
 import java.util.Map;
 
 import org.apache.commons.logging.Log;
-import org.apache.tapestry.internal.annotations.OneShot;
 import org.apache.tapestry.internal.ioc.DefaultModuleDefImpl;
 import org.apache.tapestry.internal.ioc.IOCMessages;
 import org.apache.tapestry.internal.ioc.LogSourceImpl;
 import org.apache.tapestry.internal.ioc.RegistryImpl;
+import org.apache.tapestry.internal.util.OneShotLock;
 import org.apache.tapestry.ioc.annotations.SubModule;
 import org.apache.tapestry.ioc.def.ModuleDef;
 import org.apache.tapestry.ioc.services.TapestryIOCModule;
@@ -35,12 +35,11 @@
 /**
  * Used to construct the IoC {@link org.apache.tapestry.ioc.Registry}. This class is <em>not</em>
  * threadsafe. The Registry, once created, <em>is</em> threadsafe.
- * 
- * 
  */
-@OneShot
 public final class RegistryBuilder
 {
+    private final OneShotLock _lock = new OneShotLock();
+
     /** Module defs, keyed on module id. */
     final Map<String, ModuleDef> _modules = newMap();
 
@@ -71,6 +70,8 @@
 
     public void add(ModuleDef moduleDef)
     {
+        _lock.check();
+
         String id = moduleDef.getModuleId();
 
         if (_modules.containsKey(id))
@@ -84,6 +85,8 @@
 
     public void add(Class... moduleBuilderClasses)
     {
+        _lock.check();
+
         List<Class> queue = newList(Arrays.asList(moduleBuilderClasses));
 
         while (!queue.isEmpty())
@@ -105,6 +108,8 @@
 
     public void add(String classname)
     {
+        _lock.check();
+
         try
         {
             Class builderClass = Class.forName(classname, true, _classLoader);
@@ -117,19 +122,24 @@
         }
     }
 
-    @OneShot.Lockdown
     public Registry build()
     {
+        _lock.lock();
+
         return new RegistryImpl(_modules.values(), _classLoader, _logSource);
     }
 
     public ClassLoader getClassLoader()
     {
+        _lock.check();
+
         return _classLoader;
     }
 
     public Log getLog()
     {
+        _lock.check();
+
         return _log;
     }
 }

Modified: tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/ioc/services/ClassFabUtils.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/ioc/services/ClassFabUtils.java?view=diff&rev=468472&r1=468471&r2=468472
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/ioc/services/ClassFabUtils.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/ioc/services/ClassFabUtils.java Fri Oct 27 10:41:40 2006
@@ -19,18 +19,17 @@
 import java.lang.reflect.Method;
 import java.util.Map;
 
-import org.apache.tapestry.internal.annotations.Utility;
-
 /**
  * Handy method useful when creating new classes using
  * {@link org.apache.tapestry.ioc.services.ClassFab}.
- * 
- * @author Howard Lewis Ship
  */
-@Utility
 public class ClassFabUtils
 {
     private static long _uid = System.currentTimeMillis();
+
+    private ClassFabUtils()
+    {
+    }
 
     /**
      * Generates a unique class name, which will be in the default package.

Modified: tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/services/TransformConstants.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/services/TransformConstants.java?view=diff&rev=468472&r1=468471&r2=468472
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/services/TransformConstants.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/services/TransformConstants.java Fri Oct 27 10:41:40 2006
@@ -17,7 +17,6 @@
 import java.lang.reflect.Modifier;
 
 import org.apache.tapestry.MarkupWriter;
-import org.apache.tapestry.internal.annotations.Utility;
 import org.apache.tapestry.runtime.ComponentEvent;
 import org.apache.tapestry.runtime.LifecycleEvent;
 
@@ -25,7 +24,6 @@
  * Constants used by implementations of
  * {@link org.apache.tapestry.services.ComponentClassTransformWorker}.
  */
-@Utility
 public final class TransformConstants
 {
     // Shared parameters of a whole bunch of lifecycle methods, representing the different
@@ -107,6 +105,10 @@
      * @see org.apache.tapestry.annotations.CleanupRender
      */
     public static final MethodSignature CLEANUP_RENDER_SIGNATURE = newLifecycleMethodSignature("cleanupRender");
+
+    private TransformConstants()
+    {
+    }
 
     private static MethodSignature newLifecycleMethodSignature(String name)
     {

Modified: tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/services/TransformUtils.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/services/TransformUtils.java?view=diff&rev=468472&r1=468471&r2=468472
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/services/TransformUtils.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/services/TransformUtils.java Fri Oct 27 10:41:40 2006
@@ -18,12 +18,9 @@
 
 import java.util.Map;
 
-import org.apache.tapestry.internal.annotations.Utility;
-
 /**
  * Support code for generating code (used when transforming component classes).
  */
-@Utility
 public final class TransformUtils
 {
     private static final Map<String, PrimitiveTypeInfo> _nameToInfo = newMap();
@@ -71,6 +68,10 @@
         add(long.class, Long.class, "longValue", "0L");
         add(float.class, Float.class, "floatValue", "0.0f");
         add(double.class, Double.class, "doubleValue", "0.0d");
+    }
+
+    private TransformUtils()
+    {
     }
 
     private static void add(Class primitiveType, Class wrapperType, String unwrapperMethodName,

Modified: tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/util/CollectionFactory.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/util/CollectionFactory.java?view=diff&rev=468472&r1=468471&r2=468472
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/util/CollectionFactory.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/util/CollectionFactory.java Fri Oct 27 10:41:40 2006
@@ -25,8 +25,6 @@
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CopyOnWriteArrayList;
 
-import org.apache.tapestry.internal.annotations.Utility;
-
 /**
  * Static factory methods to ease the creation of new collection types (when using generics). Most
  * of these method leverage the compiler's ability to match generic types by return value. Typical
@@ -42,12 +40,13 @@
  * <pre>
  * Map&lt;Foo, Bar&gt; map = new HashMap&lt;Foo, Bar&gt;();
  * </pre>
- * 
- * 
  */
-@Utility
 public final class CollectionFactory
 {
+    private CollectionFactory()
+    {
+    }
+
     /** Constructs and returns a generic {@link HashMap} instance. */
     public static <K, V> Map<K, V> newMap()
     {

Modified: tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/util/Defense.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/util/Defense.java?view=diff&rev=468472&r1=468471&r2=468472
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/util/Defense.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/util/Defense.java Fri Oct 27 10:41:40 2006
@@ -14,14 +14,14 @@
 
 package org.apache.tapestry.util;
 
-import org.apache.tapestry.internal.annotations.Utility;
-
 /**
  * Static utility methods for defensive programming.
  */
-@Utility
 public final class Defense
 {
+    private Defense()
+    {
+    }
 
     /**
      * Checks that a method parameter value is not null, and returns it. This method is used in

Modified: tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/util/UtilMessages.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/util/UtilMessages.java?view=diff&rev=468472&r1=468471&r2=468472
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/util/UtilMessages.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/java/org/apache/tapestry/util/UtilMessages.java Fri Oct 27 10:41:40 2006
@@ -16,17 +16,17 @@
 
 import org.apache.tapestry.Messages;
 import org.apache.tapestry.internal.MessagesImpl;
-import org.apache.tapestry.internal.annotations.Utility;
 
 /**
  * Static messages
- * 
- * 
  */
-@Utility
-final class UtilMessages
+class UtilMessages
 {
     private static final Messages MESSAGES = MessagesImpl.forClass(UtilMessages.class);
+
+    private UtilMessages()
+    {
+    }
 
     static String parameterWasNull(String parameterName)
     {

Modified: tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/resources/org/apache/tapestry/internal/util/UtilStrings.properties
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/resources/org/apache/tapestry/internal/util/UtilStrings.properties?view=diff&rev=468472&r1=468471&r2=468472
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/resources/org/apache/tapestry/internal/util/UtilStrings.properties (original)
+++ tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/main/resources/org/apache/tapestry/internal/util/UtilStrings.properties Fri Oct 27 10:41:40 2006
@@ -16,3 +16,4 @@
 dependency-cycle=Unable to add '%s' as a dependency of '%s', as that forms a dependency cycle ('%<s' depends on itself via '%1$s'). The dependency has been ignored.
 duplicate-orderer=Could not add object with duplicate id '%s'.  The duplicate object has been ignored.
 constraint-format=Could not parse ordering constraint '%s' (for '%s'). The constraint has been ignored.
+one-shot-lock=Method %s may no longer be invoked.
\ No newline at end of file

Modified: tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/test/java/org/apache/tapestry/internal/TargetMessages.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/test/java/org/apache/tapestry/internal/TargetMessages.java?view=diff&rev=468472&r1=468471&r2=468472
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/test/java/org/apache/tapestry/internal/TargetMessages.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/test/java/org/apache/tapestry/internal/TargetMessages.java Fri Oct 27 10:41:40 2006
@@ -14,14 +14,9 @@
 
 package org.apache.tapestry.internal;
 
-import org.apache.tapestry.internal.annotations.Utility;
-
 /**
  * Used with {@link org.apache.tapestry.internal.MessagesImplTest}.
- * 
- * 
  */
-@Utility
 public class TargetMessages
 {
 

Modified: tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/test/java/org/apache/tapestry/internal/services/TemplateParserImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/test/java/org/apache/tapestry/internal/services/TemplateParserImplTest.java?view=diff&rev=468472&r1=468471&r2=468472
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/test/java/org/apache/tapestry/internal/services/TemplateParserImplTest.java (original)
+++ tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/test/java/org/apache/tapestry/internal/services/TemplateParserImplTest.java Fri Oct 27 10:41:40 2006
@@ -274,7 +274,9 @@
         // start(html), text, body, text, end(html)
         assertEquals(tokens.size(), 5);
 
-        assertTrue(get(tokens, 2) instanceof BodyToken);
+        // javac bug is requires use of isInstance() instead of instanceof
+        // https://bugs.eclipse.org/bugs/show_bug.cgi?id=113218
+        assertTrue(BodyToken.class.isInstance(get(tokens, 2)));
     }
 
     @Test
@@ -306,9 +308,12 @@
 
         assertEquals(tokens.size(), 5);
 
-        assertTrue(get(tokens, 2) instanceof BodyToken);
-        assertTrue(get(tokens, 3) instanceof TextToken);
-        assertTrue(get(tokens, 4) instanceof EndElementToken);
+        // javac bug is requires use of isInstance() instead of instanceof
+        // https://bugs.eclipse.org/bugs/show_bug.cgi?id=113218
+
+        assertTrue(BodyToken.class.isInstance(get(tokens, 2)));
+        assertTrue(TextToken.class.isInstance(get(tokens, 3)));
+        assertTrue(EndElementToken.class.isInstance(get(tokens, 4)));
 
         verify();
     }

Added: tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/test/java/org/apache/tapestry/internal/util/OneShotLockSubject.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/test/java/org/apache/tapestry/internal/util/OneShotLockSubject.java?view=auto&rev=468472
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/test/java/org/apache/tapestry/internal/util/OneShotLockSubject.java (added)
+++ tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/test/java/org/apache/tapestry/internal/util/OneShotLockSubject.java Fri Oct 27 10:41:40 2006
@@ -0,0 +1,25 @@
+/**
+ * 
+ */
+package org.apache.tapestry.internal.util;
+
+import org.apache.tapestry.internal.util.OneShotLock;
+
+/**
+ * Evolved from a test for aspects + annotations to a test of a class that utilizeds OneShotLock as
+ * a utility.
+ */
+public class OneShotLockSubject
+{
+    private final OneShotLock _lock = new OneShotLock();
+
+    public void go()
+    {
+        _lock.check();
+    }
+
+    public void done()
+    {
+        _lock.lock();
+    }
+}
\ No newline at end of file

Added: tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/test/java/org/apache/tapestry/internal/util/OneShotLockTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/test/java/org/apache/tapestry/internal/util/OneShotLockTest.java?view=auto&rev=468472
==============================================================================
--- tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/test/java/org/apache/tapestry/internal/util/OneShotLockTest.java (added)
+++ tapestry/tapestry5/tapestry-core/branches/hlship-20061027-removeaspectj/src/test/java/org/apache/tapestry/internal/util/OneShotLockTest.java Fri Oct 27 10:41:40 2006
@@ -0,0 +1,66 @@
+// Copyright 2006 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.tapestry.internal.util;
+
+import org.apache.tapestry.test.BaseTestCase;
+import org.testng.annotations.Test;
+
+public class OneShotLockTest extends BaseTestCase
+{
+    private static final String CLASS_NAME = OneShotLockSubject.class.getName();
+
+    @Test
+    public void basic_locking()
+    {
+        OneShotLockSubject s = new OneShotLockSubject();
+
+        s.go();
+
+        s.done();
+
+        try
+        {
+            s.go();
+            unreachable();
+        }
+        catch (IllegalStateException ex)
+        {
+            assertTrue(ex.getMessage().contains(CLASS_NAME + ".go"));
+            assertTrue(ex.getMessage().contains("may no longer be invoked."));
+        }
+    }
+
+    @Test
+    public void locking_method_includes_check()
+    {
+        OneShotLockSubject s = new OneShotLockSubject();
+
+        s.go();
+
+        s.done();
+
+        try
+        {
+            s.done();
+            unreachable();
+        }
+        catch (IllegalStateException ex)
+        {
+            assertTrue(ex.getMessage().contains(CLASS_NAME + ".done"));
+            assertTrue(ex.getMessage().contains("may no longer be invoked."));
+        }
+    }
+
+}