[webbeans-commits] Webbeans SVN: r397 - in ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans: bean and 4 other directories.

webbeans-commits at lists.jboss.org webbeans-commits at lists.jboss.org
Wed Dec 3 17:49:55 EST 2008


Author: nickarls
Date: 2008-12-03 17:49:55 -0500 (Wed, 03 Dec 2008)
New Revision: 397

Modified:
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/MetaDataCache.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/Resolver.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/AbstractBean.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/AbstractClassBean.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/MergedStereotypes.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ejb/EjbMetaData.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedItem.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedMember.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedType.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedAnnotationImpl.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedClassImpl.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedConstructorImpl.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedFieldImpl.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedItemImpl.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedMethodImpl.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedParameterImpl.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/BindingTypeModel.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/StereotypeModel.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/Strings.java
Log:
toString caching + simplifications. Output needs tuning, though

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java	2008-12-03 19:26:10 UTC (rev 396)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java	2008-12-03 22:49:55 UTC (rev 397)
@@ -59,6 +59,7 @@
 import org.jboss.webbeans.introspector.AnnotatedMethod;
 import org.jboss.webbeans.introspector.jlr.AnnotatedClassImpl;
 import org.jboss.webbeans.util.Reflections;
+import org.jboss.webbeans.util.Strings;
 
 /**
  * Implementation of the Web Beans Manager.
@@ -656,39 +657,15 @@
    public String toString()
    {
       StringBuffer buffer = new StringBuffer();
-
-      buffer.append("Enabled deployment types: " + enabledDeploymentTypes.size() + "\n");
-      int i = 0;
-      for (Class<? extends Annotation> deploymentType : enabledDeploymentTypes)
-      {
-         buffer.append(++i + " - " + deploymentType.getName() + "\n");
-      }
+      buffer.append(Strings.collectionToString("Enabled deployment types: ", getEnabledDeploymentTypes()));
       buffer.append(eventManager.toString() + "\n");
       buffer.append(metaDataCache.toString() + "\n");
       buffer.append(resolver.toString() + "\n");
       buffer.append(contextMap.toString() + "\n");
       buffer.append(proxyPool.toString() + "\n");
-      buffer.append("Registered beans: " + beans.size() + "\n");
-      i = 0;
-      for (Bean<?> bean : beans)
-      {
-         buffer.append(++i + " - " + bean.toString() + "\n");
-      }
-
-      buffer.append("Registered decorators: " + decorators.size() + "\n");
-      i = 0;
-      for (Decorator decorator : decorators)
-      {
-         buffer.append(++i + " - " + decorator.toString() + "\n");
-      }
-
-      buffer.append("Registered interceptors: " + interceptors.size() + "\n");
-      i = 0;
-      for (Interceptor interceptor : interceptors)
-      {
-         buffer.append(++i + " - " + interceptor.toString() + "\n");
-      }
-
+      buffer.append(Strings.collectionToString("Registered beans: ", getBeans()));
+      buffer.append(Strings.collectionToString("Registered decorators: ", decorators));
+      buffer.append(Strings.collectionToString("Registered interceptors: ", interceptors));
       return buffer.toString();
    }
 

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/MetaDataCache.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/MetaDataCache.java	2008-12-03 19:26:10 UTC (rev 396)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/MetaDataCache.java	2008-12-03 22:49:55 UTC (rev 397)
@@ -198,12 +198,7 @@
       buffer.append(bindingTypes.toString() + "\n");
       buffer.append(ejbMetaDataMap.toString() + "\n");
       buffer.append(scopes.toString() + "\n");
-      buffer.append("Stereotypes: " + stereotypes.size() + "\n");
-      int i = 0;
-      for (Entry<Class<? extends Annotation>, StereotypeModel<?>> entry : stereotypes.entrySet())
-      {
-         buffer.append(++i + " - " + entry.getKey().getName() + ": " + entry.getValue().toString() + "\n");
-      }
+      buffer.append(Strings.mapToString("Stereotypes: ", stereotypes));
       buffer.append("====================\n");
       return buffer.toString();
    }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/Resolver.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/Resolver.java	2008-12-03 19:26:10 UTC (rev 396)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/Resolver.java	2008-12-03 22:49:55 UTC (rev 397)
@@ -27,7 +27,6 @@
 import java.util.Set;
 import java.util.SortedSet;
 import java.util.TreeSet;
-import java.util.Map.Entry;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ExecutionException;
@@ -95,7 +94,6 @@
 
    }
 
-
    /**
     * Type safe map for caching annotation metadata
     */
@@ -116,16 +114,16 @@
       }
 
       @Override
-      protected Map<AnnotatedItem<?, ?>, Future > delegate()
+      protected Map<AnnotatedItem<?, ?>, Future> delegate()
       {
          return delegate;
       }
-      
+
       @Override
       public String toString()
       {
          return Strings.mapToString("AnnotatedItemMap (annotated item -> bean set): ", delegate);
-      }      
+      }
 
    }
 
@@ -151,7 +149,7 @@
    {
       injectionPoints.addAll(elements);
    }
-   
+
    private void registerName(final String name)
    {
       FutureTask<Set<Bean<?>>> task = new FutureTask<Set<Bean<?>>>(new Callable<Set<Bean<?>>>()
@@ -169,13 +167,13 @@
             }
             return retainHighestPrecedenceBeans(beans, manager.getEnabledDeploymentTypes());
          }
-   
+
       });
       resolvedNames.put(name, task);
-      
+
       task.run();
    }
-   
+
    private <T, S> void registerInjectionPoint(final AnnotatedItem<T, S> element)
    {
       FutureTask<Set<Bean<?>>> task = new FutureTask<Set<Bean<?>>>(new Callable<Set<Bean<?>>>()
@@ -196,9 +194,9 @@
             }
             return beans;
          }
-         
+
       });
-      
+
       resolvedInjectionPoints.put(new ResolvableAnnotatedItem<T, S>()
       {
 
@@ -209,7 +207,7 @@
          }
 
       }, task);
-      
+
       task.run();
    }
 
@@ -265,7 +263,7 @@
          {
             registerInjectionPoint(element);
          }
-         
+
          boolean interupted = false;
          try
          {
@@ -316,7 +314,7 @@
       {
          registerName(name);
       }
-      
+
       boolean interupted = false;
       try
       {
@@ -446,18 +444,8 @@
       StringBuffer buffer = new StringBuffer();
       buffer.append("Resolver\n");
       buffer.append(resolvedInjectionPoints.toString() + "\n");
-      buffer.append("Injection points: " + injectionPoints.size() + "\n");
-      int i = 0;
-      for (AnnotatedItem<?, ?> injectionPoint : injectionPoints)
-      {
-         buffer.append(++i + " - " + injectionPoint.toString() + "\n");
-      }
-      buffer.append("Resolved names: " + resolvedNames.size() + "\n");
-      i = 0;
-      for (Entry<String, Future<Set<Bean<?>>>> entry : resolvedNames.entrySet())
-      {
-         buffer.append(++i + " - " + entry + ": " + entry.getValue().toString() + "\n");
-      }
+      buffer.append(Strings.collectionToString("Injection points: ", injectionPoints));
+      buffer.append(Strings.mapToString("Resolved names: ", resolvedNames));
       return buffer.toString();
    }
 

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/AbstractBean.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/AbstractBean.java	2008-12-03 19:26:10 UTC (rev 396)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/AbstractBean.java	2008-12-03 22:49:55 UTC (rev 397)
@@ -48,6 +48,7 @@
 import org.jboss.webbeans.log.LogProvider;
 import org.jboss.webbeans.log.Logging;
 import org.jboss.webbeans.util.Reflections;
+import org.jboss.webbeans.util.Strings;
 
 /**
  * An abstract bean representation common for all beans
@@ -66,9 +67,9 @@
    /**
     * Helper class for getting deployment type
     * 
-    * Loops through the enabled deployment types (backwards) and returns the first one
-    * present in the possible deployments type, resulting in the deployment type of 
-    * highest priority
+    * Loops through the enabled deployment types (backwards) and returns the
+    * first one present in the possible deployments type, resulting in the
+    * deployment type of highest priority
     * 
     * @param enabledDeploymentTypes The currently enabled deployment types
     * @param possibleDeploymentTypes The possible deployment types
@@ -198,7 +199,7 @@
          Set<Annotation> xmlDeploymentTypes = null;
          if (xmlDeploymentTypes.size() > 1)
          {
-            throw new DefinitionException ("At most one deployment type may be specified (" + xmlDeploymentTypes + " are specified)");
+            throw new DefinitionException("At most one deployment type may be specified (" + xmlDeploymentTypes + " are specified)");
          }
 
          if (xmlDeploymentTypes.size() == 1)
@@ -366,7 +367,7 @@
       }
       else if (getMergedStereotypes().getPossibleScopeTypes().size() > 1)
       {
-         throw new DefinitionException ("All stereotypes must specify the same scope OR a scope must be specified on the bean");
+         throw new DefinitionException("All stereotypes must specify the same scope OR a scope must be specified on the bean");
       }
       this.scopeType = Dependent.class;
       log.trace("Using default @Dependent scope");
@@ -384,7 +385,7 @@
    {
       if (deploymentType == null)
       {
-         throw new DefinitionException ("type: " + getType() + " must specify a deployment type");
+         throw new DefinitionException("type: " + getType() + " must specify a deployment type");
       }
       else if (deploymentType.equals(Standard.class) && !STANDARD_WEB_BEAN_CLASSES.contains(getAnnotatedItem().getType()))
       {
@@ -650,25 +651,10 @@
       buffer.append("Primitive : " + primitive + "\n");
       buffer.append("Declared bean type: " + (declaredBeanType == null ? "null" : declaredBeanType.toString()) + "\n");
       buffer.append("Remove method: " + (removeMethod == null ? "null" : removeMethod.toString()) + "\n");
-      buffer.append("Binding types: " + bindingTypes.size() + "\n");
-      int i = 0;
-      for (Annotation bindingType : bindingTypes)
-      {
-         buffer.append(++i + " - " + bindingType.toString() + "\n");
-      }
-      buffer.append("API types: " + apiTypes.size() + "\n");
-      i = 0;
-      for (Class<?> apiType : apiTypes)
-      {
-         buffer.append(++i + " - " + apiType.getName() + "\n");
-      }
+      buffer.append(Strings.collectionToString("Binding types: ", getBindingTypes()));
+      buffer.append(Strings.collectionToString("API types: ", getTypes()));
+      buffer.append(Strings.collectionToString("Injection points: ", getInjectionPoints()));
       buffer.append(mergedStereotypes.toString() + "\n");
-      buffer.append("Injection points: " + injectionPoints.size() + "\n");
-      i = 0;
-      for (AnnotatedItem<?, ?> injectionPoint : injectionPoints)
-      {
-         buffer.append(++i + " - " + injectionPoint.toString() + "\n");
-      }
       return buffer.toString();
    }
 }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/AbstractClassBean.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/AbstractClassBean.java	2008-12-03 19:26:10 UTC (rev 396)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/AbstractClassBean.java	2008-12-03 22:49:55 UTC (rev 397)
@@ -278,18 +278,9 @@
       buffer.append("AbstractClassBean:\n");
       buffer.append(super.toString() + "\n");
       buffer.append("Annotated item: " + annotatedItem.toString() + "\n");
-      buffer.append("Initializer methods: " + initializerMethods.size() + "\n");
-      int i = 0;
-      for (AnnotatedMethod<?> initializerMethod : initializerMethods)
-      {
-         buffer.append(++i + " - " + initializerMethod.toString() + "\n");
-      }
-      i = 0;
-      buffer.append("Injectable fields " + injectableFields.size() + "\n");
-      for (AnnotatedField<?> injectableField : injectableFields)
-      {
-         buffer.append(++i + " - " + injectableField.toString() + "\n");
-      }
+      buffer.append(Strings.collectionToString("Initializer methods: ", getInitializerMethods()));
+      buffer.append(Strings.collectionToString("Injectable fields: ", getInjectableFields()));
+      buffer.append(Strings.collectionToString("Producer methods: ", getProducerMethods()));
       return buffer.toString();
    }
 }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/MergedStereotypes.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/MergedStereotypes.java	2008-12-03 19:26:10 UTC (rev 396)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/MergedStereotypes.java	2008-12-03 22:49:55 UTC (rev 397)
@@ -25,6 +25,7 @@
 import org.jboss.webbeans.ManagerImpl;
 import org.jboss.webbeans.introspector.jlr.AbstractAnnotatedItem.AnnotationMap;
 import org.jboss.webbeans.model.StereotypeModel;
+import org.jboss.webbeans.util.Strings;
 
 /**
  * Meta model for the merged stereotype for a bean
@@ -163,30 +164,10 @@
       StringBuffer buffer = new StringBuffer();
       buffer.append("Merged stereotypes:\n");
       buffer.append("Bean name defaulted: " + beanNameDefaulted + "\n");
-      buffer.append("Possible deployment types: " + possibleDeploymentTypes.size() + "\n");
-      int i = 0;
-      for (Entry<Class<? extends Annotation>, Annotation> entry : possibleDeploymentTypes.entrySet())
-      {
-         buffer.append(++i + " - " + entry.getKey().getName() + ": " + entry.getValue().toString() + "\n");
-      }
-      buffer.append("Possible scope types: " + possibleScopeTypes.size() + "\n");
-      i = 0;
-      for (Annotation scopeType : possibleScopeTypes)
-      {
-         buffer.append(++i + " - " + scopeType.toString());
-      }
-      buffer.append("Required types: " + requiredTypes.size() + "\n");
-      i = 0;
-      for (Class<?> requiredType : requiredTypes)
-      {
-         buffer.append(++i + " - " + requiredType.getName() + "\n");
-      }
-      buffer.append("Supported scopes: " + supportedScopes.size() + "\n");
-      i = 0;
-      for (Class<?> supportedScope : supportedScopes)
-      {
-         buffer.append(++i + " - " + supportedScope.getName() + "\n");
-      }
+      buffer.append("Possible deployment types: " + getPossibleDeploymentTypes().toString());
+      buffer.append(Strings.collectionToString("Possible scope types: ", getPossibleScopeTypes()));
+      buffer.append(Strings.collectionToString("Required types: ", getRequiredTypes()));
+      buffer.append(Strings.collectionToString("Supported scopes: ", getSupportedScopes()));
       return buffer.toString();
    }
 

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ejb/EjbMetaData.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ejb/EjbMetaData.java	2008-12-03 19:26:10 UTC (rev 396)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ejb/EjbMetaData.java	2008-12-03 22:49:55 UTC (rev 397)
@@ -36,6 +36,7 @@
 import org.jboss.webbeans.introspector.AnnotatedClass;
 import org.jboss.webbeans.introspector.AnnotatedMethod;
 import org.jboss.webbeans.introspector.jlr.AnnotatedClassImpl;
+import org.jboss.webbeans.util.Strings;
 
 /**
  * EJB metadata
@@ -265,24 +266,9 @@
       buffer.append("EJB link JNDI name " + ejbLinkJndiName + "\n");
       buffer.append("Default JNDI name: " + defaultJndiName + "\n");
       buffer.append("Type: " + type.toString() + "\n");
-      buffer.append("Desctructor methods: " + destructorMethods.size() + "\n");
-      int i = 0;
-      for (AnnotatedMethod<?> method : destructorMethods)
-      {
-         buffer.append(++i + " - " + method.toString() + "\n");
-      }
-      i = 0;
-      buffer.append("Remove methods: " + removeMethods.size() + "\n");
-      for (AnnotatedMethod<?> method : removeMethods)
-      {
-         buffer.append(++i + " - " + method.toString() + "\n");
-      }
-      i = 0;
-      buffer.append("No-args remove methods: " + noArgsRemoveMethods.size() + "\n");
-      for (AnnotatedMethod<?> method : noArgsRemoveMethods)
-      {
-         buffer.append(++i + " - " + method.toString() + "\n");
-      }
+      buffer.append(Strings.collectionToString("Desctructor methods: ", getDestructorMethods()));
+      buffer.append(Strings.collectionToString("Remove methods: ", getRemoveMethods()));
+      buffer.append(Strings.collectionToString("No-args remove methods: ", getNoArgsRemoveMethods()));
       return buffer.toString();
    }
 

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedItem.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedItem.java	2008-12-03 19:26:10 UTC (rev 396)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedItem.java	2008-12-03 22:49:55 UTC (rev 397)
@@ -161,10 +161,14 @@
    private static final Annotation[] DEFAULT_BINDING_ARRAY = { new CurrentAnnotationLiteral() };
    // The set of default binding types
    private static final Set<Annotation> DEFAULT_BINDING = new HashSet<Annotation>(Arrays.asList(DEFAULT_BINDING_ARRAY));
-   
+
    // The set of meta-annotations to map
+   @SuppressWarnings("unchecked")
    private static final Set<Class<? extends Annotation>> MAPPED_METAANNOTATIONS = new HashSet<Class<? extends Annotation>>(Arrays.asList(BindingType.class, DeploymentType.class, Stereotype.class, ScopeType.class));
-   
+
+   // Cached string representation
+   private String toString;
+
    /**
     * Static helper method for building annotation map from an annotated element
     * 
@@ -191,7 +195,7 @@
       }
       return annotationMap;
    }
-   
+
    /**
     * Static helper method for getting the current parameter values from a list
     * of annotated parameters.
@@ -294,7 +298,7 @@
     */
    public Annotation[] getMetaAnnotationsAsArray(Class<? extends Annotation> metaAnnotationType)
    {
-       return getMetaAnnotations(metaAnnotationType).toArray(new Annotation[0]);
+      return getMetaAnnotations(metaAnnotationType).toArray(new Annotation[0]);
    }
 
    /**
@@ -416,19 +420,17 @@
    @Override
    public String toString()
    {
+      if (toString != null)
+      {
+         return toString;
+      }
       StringBuffer buffer = new StringBuffer();
-      // buffer.append("AbstractAnnotatedItem:\n");
-      // buffer.append("Annotations: " + getAnnotations().size() + "\n");
-      // int i = 0;
-      // for (Annotation annotation : getAnnotations())
-      // {
-      // buffer.append(++i + " - " + annotation.toString() + "\n");
-      // }
-      // buffer.append(annotationMap == null ? "" : (annotationMap.toString() +
-      // "\n"));
-      // buffer.append(metaAnnotationMap == null ? "" :
-      // (metaAnnotationMap.toString()) + "\n");
-      return buffer.toString();
+      buffer.append("AbstractAnnotatedItem:\n");
+      buffer.append(Strings.collectionToString("Annotations: ", getAnnotations()));
+      buffer.append(annotationMap == null ? "" : (annotationMap.toString() + "\n"));
+      buffer.append(metaAnnotationMap == null ? "" : (metaAnnotationMap.toString()) + "\n");
+      toString = buffer.toString();
+      return toString;
    }
 
    /**
@@ -505,7 +507,7 @@
          return true;
       }
    }
-   
+
    protected abstract S getDelegate();
 
 }
\ No newline at end of file

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedMember.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedMember.java	2008-12-03 19:26:10 UTC (rev 396)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedMember.java	2008-12-03 22:49:55 UTC (rev 397)
@@ -91,6 +91,9 @@
    // The name of the member
    private final String name;
 
+   // Cached string representation
+   private String toString;
+
    /**
     * Constructor
     * 
@@ -156,13 +159,18 @@
     */
    public String toString()
    {
+      if (toString != null)
+      {
+         return toString;
+      }
       StringBuffer buffer = new StringBuffer();
-      // buffer.append("AbstractAnnotatedMember:\n");
-      // buffer.append(super.toString() + "\n");
-      // buffer.append("Final: " + isFinal() + "\n");
-      // buffer.append("Static: " + isStatic() + "\n");
-      // buffer.append("Name: " + getName() + "\n");
-      return buffer.toString();
+      buffer.append("AbstractAnnotatedMember:\n");
+      buffer.append(super.toString() + "\n");
+      buffer.append("Final: " + isFinal() + "\n");
+      buffer.append("Static: " + isStatic() + "\n");
+      buffer.append("Name: " + getName() + "\n");
+      toString = buffer.toString();
+      return toString;
    }
 
 }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedType.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedType.java	2008-12-03 19:26:10 UTC (rev 396)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AbstractAnnotatedType.java	2008-12-03 22:49:55 UTC (rev 397)
@@ -23,7 +23,7 @@
 /**
  * Represents an abstract annotated type
  * 
- * This class is immutable, and therefore threadsage
+ * This class is immutable, and therefore threadsafe
  * 
  * @author Pete Muir
  * 
@@ -33,7 +33,11 @@
 {
    // The superclass abstraction of the type
    private final AnnotatedClass<Object> superclass;
+   // The name of the type
    private final String name;
+   
+   // Cached string representation
+   private String toString;
 
    /**
     * Constructor
@@ -96,7 +100,6 @@
     * 
     * @return The superclass abstraction
     */
-   @SuppressWarnings("unchecked")
    public AnnotatedClass<Object> getSuperclass()
    {
       return superclass;
@@ -109,14 +112,19 @@
     */
    public String toString()
    {
+      if (toString != null)
+      {
+         return toString;
+      }
       StringBuffer buffer = new StringBuffer();
-//      buffer.append("AbstractAnnotatedType:\n");
-//      buffer.append(super.toString() + "\n");
-//      buffer.append("Superclass: " + (superclass == null ? "" : superclass.toString()) + "\n");
-//      buffer.append("Name: " + getName() + "\n");
-//      buffer.append("Final: " + isFinal() + "\n");
-//      buffer.append("Static: " + isStatic() + "\n");
-      return buffer.toString();
+      buffer.append("AbstractAnnotatedType:\n");
+      buffer.append(super.toString() + "\n");
+      buffer.append("Superclass: " + (superclass == null ? "" : superclass.toString()) + "\n");
+      buffer.append("Name: " + getName() + "\n");
+      buffer.append("Final: " + isFinal() + "\n");
+      buffer.append("Static: " + isStatic() + "\n");
+      toString = buffer.toString();
+      return toString;
    }
 
 }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedAnnotationImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedAnnotationImpl.java	2008-12-03 19:26:10 UTC (rev 396)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedAnnotationImpl.java	2008-12-03 22:49:55 UTC (rev 397)
@@ -94,6 +94,9 @@
    // The set of abstracted members
    private final Set<AnnotatedMethod<?>> members;
 
+   // Cached string representation
+   private String toString;
+
    /**
     * Constructor
     * 
@@ -177,20 +180,18 @@
     */
    public String toString()
    {
+      if (toString != null)
+      {
+         return toString;
+      }
       StringBuffer buffer = new StringBuffer();
-      // buffer.append("AnnotatedConstructorImpl:\n");
-      // buffer.append(super.toString() + "\n");
-      // buffer.append("Class: " + clazz.toString() + "\n");
-      //
-      // buffer.append("Members: " + getMembers().size() + "\n");
-      // int i = 0;
-      // for (AnnotatedMethod<?> member : getMembers())
-      // {
-      // buffer.append(++i + " - " + member.toString());
-      // }
-      // buffer.append(annotatedMembers == null ? "" :
-      // (annotatedMembers.toString() + "\n"));
-      return buffer.toString();
+      buffer.append("AnnotatedConstructorImpl:\n");
+      buffer.append(super.toString() + "\n");
+      buffer.append("Class: " + clazz.toString() + "\n");
+      buffer.append(Strings.collectionToString("Members: ", getMembers()));
+      buffer.append(annotatedMembers == null ? "" : (annotatedMembers.toString() + "\n"));
+      toString = buffer.toString();
+      return toString;
    }
 
    protected Class<T> getDelegate()

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedClassImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedClassImpl.java	2008-12-03 19:26:10 UTC (rev 396)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedClassImpl.java	2008-12-03 22:49:55 UTC (rev 397)
@@ -42,7 +42,7 @@
 /**
  * Represents an annotated class
  * 
- * This class is immutable, and thus threadsafe
+ * This class is immutable, and therefore threadsafe
  * 
  * @author Pete Muir
  * 
@@ -204,14 +204,7 @@
       @Override
       public String toString()
       {
-         StringBuffer buffer = new StringBuffer();
-         buffer.append("Annotation type -> constructor by arguments mappings: " + super.size() + "\n");
-         int i = 0;
-         for (Entry<List<Class<?>>, AnnotatedConstructor<T>> entry : delegate.entrySet())
-         {
-            buffer.append(++i + " - " + entry.getKey().toString() + ": " + entry.getValue().toString() + "\n");
-         }
-         return buffer.toString();
+         return Strings.mapToString("Annotation type -> constructor by arguments mappings: ", delegate);
       }
    }
 
@@ -239,6 +232,9 @@
    // The map from class list to abstracted constructor
    private final ConstructorsByArgumentMap constructorsByArgumentMap;
 
+   // Cached string representation
+   private String toString;
+
    /**
     * Constructor
     * 
@@ -249,6 +245,7 @@
     * @param type The type of the class
     * @param annotations The array of annotations on the class
     */
+   @SuppressWarnings("unchecked")
    public AnnotatedClassImpl(Class<T> rawType, Type type, Annotation[] annotations)
    {
       super(buildAnnotationMap(annotations), rawType);
@@ -261,7 +258,7 @@
       {
          actualTypeArguments = new Type[0];
       }
-      
+
       this.fields = new HashSet<AnnotatedField<Object>>();
       this.annotatedFields = new AnnotatedFieldMap();
       this.metaAnnotatedFields = new AnnotatedFieldMap();
@@ -273,7 +270,7 @@
             {
                field.setAccessible(true);
             }
-            AnnotatedField<Object> annotatedField = new AnnotatedFieldImpl<Object>(field, this); 
+            AnnotatedField<Object> annotatedField = new AnnotatedFieldImpl<Object>(field, this);
             this.fields.add(annotatedField);
             for (Annotation annotation : annotatedField.getAnnotations())
             {
@@ -283,10 +280,10 @@
                   this.metaAnnotatedFields.put(metaAnnotation.annotationType(), annotatedField);
                }
             }
-            
+
          }
       }
-      
+
       this.constructors = new HashSet<AnnotatedConstructor<T>>();
       this.constructorsByArgumentMap = new ConstructorsByArgumentMap();
       this.annotatedConstructors = new AnnotatedConstructorMap();
@@ -299,7 +296,7 @@
          }
          this.constructors.add(annotatedConstructor);
          this.constructorsByArgumentMap.put(Arrays.asList(constructor.getParameterTypes()), annotatedConstructor);
-         
+
          for (Annotation annotation : annotatedConstructor.getAnnotations())
          {
             if (!annotatedConstructors.containsKey(annotation.annotationType()))
@@ -309,7 +306,7 @@
             annotatedConstructors.get(annotation.annotationType()).add(annotatedConstructor);
          }
       }
-      
+
       this.methods = new HashSet<AnnotatedMethod<Object>>();
       this.annotatedMethods = new AnnotatedMethodMap();
       for (Class<?> c = clazz; c != Object.class && c != null; c = c.getSuperclass())
@@ -320,7 +317,7 @@
             {
                method.setAccessible(true);
             }
-            
+
             AnnotatedMethod<Object> annotatedMethod = new AnnotatedMethodImpl<Object>(method, this);
             this.methods.add(annotatedMethod);
             for (Annotation annotation : annotatedMethod.getAnnotations())
@@ -496,46 +493,25 @@
     */
    public String toString()
    {
+      if (toString != null)
+      {
+         return toString;
+      }
       StringBuffer buffer = new StringBuffer();
-      // buffer.append("AnnotatedConstructorImpl:\n");
-      // buffer.append(super.toString() + "\n");
-      // buffer.append("Actual type arguments: " + actualTypeArguments.length +
-      // "\n");
-      // int i = 0;
-      // for (Type actualTypeArgument : actualTypeArguments)
-      // {
-      // buffer.append(++i + " - " + actualTypeArgument.toString());
-      // }
-      // buffer.append("Class: " + clazz.toString() + "\n");
-      // buffer.append("Fields: " + getFields().size() + "\n");
-      // i = 0;
-      // for (AnnotatedField<Object> field : getFields())
-      // {
-      // buffer.append(++i + " - " + field.toString());
-      // }
-      // buffer.append("Methods: " + methods.size() + "\n");
-      // i = 0;
-      // for (AnnotatedMethod<Object> method : methods)
-      // {
-      // buffer.append(++i + " - " + method.toString());
-      // }
-      // buffer.append("Constructors: " + methods.size() + "\n");
-      // i = 0;
-      // for (AnnotatedConstructor<T> constructor : getConstructors())
-      // {
-      // buffer.append(++i + " - " + constructor.toString());
-      // }
-      // buffer.append(annotatedConstructors == null ? "" :
-      // (annotatedConstructors.toString() + "\n"));
-      // buffer.append(annotatedFields == null ? "" :
-      // (annotatedFields.toString() + "\n"));
-      // buffer.append(annotatedMethods == null ? "" :
-      // (annotatedMethods.toString() + "\n"));
-      // buffer.append(constructorsByArgumentMap == null ? "" :
-      // (constructorsByArgumentMap.toString() + "\n"));
-      // buffer.append(metaAnnotatedFields == null ? "" :
-      // (metaAnnotatedFields.toString() + "\n"));
-      return buffer.toString();
+      buffer.append("AnnotatedConstructorImpl:\n");
+      buffer.append(super.toString() + "\n");
+      buffer.append(Strings.collectionToString("Actual type arguments: ", Arrays.asList(getActualTypeArguments())));
+      buffer.append("Class: " + clazz.toString() + "\n");
+      buffer.append(Strings.collectionToString("Fields: ", getFields()));
+      buffer.append(Strings.collectionToString("Methods: ", methods));
+      buffer.append(Strings.collectionToString("Constructors: ", getConstructors()));
+      buffer.append(annotatedConstructors == null ? "" : (annotatedConstructors.toString() + "\n"));
+      buffer.append(annotatedFields == null ? "" : (annotatedFields.toString() + "\n"));
+      buffer.append(annotatedMethods == null ? "" : (annotatedMethods.toString() + "\n"));
+      buffer.append(constructorsByArgumentMap == null ? "" : (constructorsByArgumentMap.toString() + "\n"));
+      buffer.append(metaAnnotatedFields == null ? "" : (metaAnnotatedFields.toString() + "\n"));
+      toString = buffer.toString();
+      return toString;
    }
 
 }
\ No newline at end of file

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedConstructorImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedConstructorImpl.java	2008-12-03 19:26:10 UTC (rev 396)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedConstructorImpl.java	2008-12-03 22:49:55 UTC (rev 397)
@@ -22,6 +22,7 @@
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Type;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
@@ -31,10 +32,13 @@
 import org.jboss.webbeans.introspector.AnnotatedConstructor;
 import org.jboss.webbeans.introspector.AnnotatedParameter;
 import org.jboss.webbeans.introspector.AnnotatedType;
+import org.jboss.webbeans.util.Strings;
 
 /**
  * Represents an annotated constructor
  * 
+ * This class is immutable, and therefore threadsafe
+ * 
  * @author Pete Muir
  * 
  * @param <T>
@@ -54,6 +58,9 @@
    // The declaring class abstraction
    private final AnnotatedType<T> declaringClass;
 
+   // Cached string representation
+   private String toString;
+
    /**
     * Constructor
     * 
@@ -62,12 +69,13 @@
     * @param constructor The constructor method
     * @param declaringClass The declaring class
     */
+   @SuppressWarnings("unchecked")
    public AnnotatedConstructorImpl(Constructor<T> constructor, AnnotatedType<T> declaringClass)
    {
       super(buildAnnotationMap(constructor), constructor);
       this.constructor = constructor;
       this.declaringClass = declaringClass;
-      
+
       this.parameters = new ArrayList<AnnotatedParameter<Object>>();
       annotatedParameters = new AnnotatedParameterMap();
       for (int i = 0; i < constructor.getParameterTypes().length; i++)
@@ -77,7 +85,7 @@
             Class<? extends Object> clazz = constructor.getParameterTypes()[i];
             AnnotatedParameter<Object> parameter = new AnnotatedParameterImpl<Object>(constructor.getParameterAnnotations()[i], (Class<Object>) clazz);
             parameters.add(parameter);
-            
+
             for (Annotation annotation : parameter.getAnnotations())
             {
                annotatedParameters.put(annotation.annotationType(), parameter);
@@ -88,7 +96,7 @@
             Class<? extends Object> clazz = constructor.getParameterTypes()[i];
             AnnotatedParameter<Object> parameter = new AnnotatedParameterImpl<Object>(new Annotation[0], (Class<Object>) clazz);
             parameters.add(parameter);
-            
+
             for (Annotation annotation : parameter.getAnnotations())
             {
                annotatedParameters.put(annotation.annotationType(), parameter);
@@ -264,28 +272,22 @@
     */
    public String toString()
    {
+      if (toString != null)
+      {
+         return toString;
+      }
       StringBuffer buffer = new StringBuffer();
-      // buffer.append("AnnotatedConstructorImpl:\n");
-      // buffer.append(super.toString() + "\n");
-      // buffer.append("Actual type arguments: " + actualTypeArguments.length +
-      // "\n");
-      // int i = 0;
-      // for (Type actualTypeArgument : actualTypeArguments)
-      // {
-      // buffer.append(++i + " - " + actualTypeArgument.toString());
-      // }
-      // buffer.append("Declaring class:\n");
-      // buffer.append(declaringClass.toString() + "\n");
-      // buffer.append("Constructor:\n");
-      // buffer.append(constructor.toString() + "\n");
-      // buffer.append("Parameters: " + getParameters().size() + "\n");
-      // i = 0;
-      // for (AnnotatedParameter<?> parameter : getParameters())
-      // {
-      // buffer.append(++i + " - " + parameter.toString());
-      // }
-      // buffer.append(annotatedParameters.toString() + "\n");
-      return buffer.toString();
+      buffer.append("AnnotatedConstructorImpl:\n");
+      buffer.append(super.toString() + "\n");
+      buffer.append(Strings.collectionToString("Actual type arguments: ", Arrays.asList(getActualTypeArguments())));
+      buffer.append("Declaring class:\n");
+      buffer.append(declaringClass.getName() + "[ " + declaringClass.getType() + "]" + "\n");
+      buffer.append("Constructor:\n");
+      buffer.append(constructor.toString() + "\n");
+      buffer.append(Strings.collectionToString("Parameters: ", getParameters()));
+      buffer.append(annotatedParameters.toString() + "\n");
+      toString = buffer.toString();
+      return toString;
    }
 
 }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedFieldImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedFieldImpl.java	2008-12-03 19:26:10 UTC (rev 396)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedFieldImpl.java	2008-12-03 22:49:55 UTC (rev 397)
@@ -20,16 +20,18 @@
 import java.lang.reflect.Field;
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
+import java.util.Arrays;
 
 import org.jboss.webbeans.ManagerImpl;
 import org.jboss.webbeans.introspector.AnnotatedField;
 import org.jboss.webbeans.introspector.AnnotatedType;
 import org.jboss.webbeans.util.Reflections;
+import org.jboss.webbeans.util.Strings;
 
 /**
  * Represents an annotated field
  * 
- * This class is immutable, and thus threadsafe
+ * This class is immutable, and therefore threadsafe
  * 
  * @author Pete Muir
  * 
@@ -44,6 +46,9 @@
    // The abstraction of the declaring class
    private final AnnotatedType<?> declaringClass;
 
+   // Cached string representation
+   private String toString;
+
    /**
     * Constructor
     * 
@@ -113,7 +118,8 @@
     * @param instance The instance to inject into
     * @param manager The Web Beans manager
     * 
-    * @see org.jboss.webbeans.introspector.AnnotatedField#inject(Object, ManagerImpl)
+    * @see org.jboss.webbeans.introspector.AnnotatedField#inject(Object,
+    *      ManagerImpl)
     */
    public void inject(Object instance, ManagerImpl manager)
    {
@@ -151,19 +157,19 @@
     */
    public String toString()
    {
+      if (toString != null)
+      {
+         return toString;
+      }
       StringBuffer buffer = new StringBuffer();
-//      buffer.append("AnnotatedFieldImpl:\n");
-//      buffer.append(super.toString() + "\n");
-//      buffer.append("Actual type arguments: " + actualTypeArguments.length + "\n");
-//      int i = 0;
-//      for (Type actualTypeArgument : actualTypeArguments)
-//      {
-//         buffer.append(++i + " - " + actualTypeArgument.toString());
-//      }
-//      buffer.append("Declaring class:\n");
-//      buffer.append(declaringClass.toString() + "\n");
-//      buffer.append("Field: " + field + "\n");
-      return buffer.toString();
+      buffer.append("AnnotatedFieldImpl:\n");
+      buffer.append(super.toString() + "\n");
+      buffer.append(Strings.collectionToString("Actual type arguments: ", Arrays.asList(getActualTypeArguments())));
+      buffer.append("Declaring class:\n");
+      buffer.append(declaringClass.getName() + "[ " + declaringClass.getType() + "]" + "\n");
+      buffer.append("Field: " + field + "\n");
+      toString = buffer.toString();
+      return toString;
    }
 
 }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedItemImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedItemImpl.java	2008-12-03 19:26:10 UTC (rev 396)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedItemImpl.java	2008-12-03 22:49:55 UTC (rev 397)
@@ -19,11 +19,14 @@
 
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
+import java.util.Arrays;
 
+import org.jboss.webbeans.util.Strings;
+
 /**
  * Represents an annotated item
  * 
- * This class is immutable, and thus threadsafe
+ * This class is immutable, and therefore threadsafe
  * 
  * @author Pete Muir
  * 
@@ -39,6 +42,9 @@
    // The actual annotations
    private final Annotation[] actualAnnotations;
 
+   // Cached string representation
+   private String toString;
+
    /**
     * Constructor
     * 
@@ -143,22 +149,17 @@
     */
    public String toString()
    {
+      if (toString != null)
+      {
+         return toString;
+      }
       StringBuffer buffer = new StringBuffer();
-//      buffer.append("AnnotatedItemImpl:\n");
-//      buffer.append(super.toString() + "\n");
-//      buffer.append("Actual type arguments: " + actualTypeArguments.length + "\n");
-//      int i = 0;
-//      for (Type actualTypeArgument : actualTypeArguments)
-//      {
-//         buffer.append(++i + " - " + actualTypeArgument.toString());
-//      }
-//      buffer.append("Actual annotations: " + actualAnnotations.length + "\n");
-//      i = 0;
-//      for (Annotation actualAnnotation : actualAnnotations)
-//      {
-//         buffer.append(++i + " - " + actualAnnotation.toString());
-//      }
-      return buffer.toString();
+      buffer.append("AnnotatedItemImpl:\n");
+      buffer.append(super.toString() + "\n");
+      buffer.append(Strings.collectionToString("Actual type arguments: ", Arrays.asList(getActualTypeArguments())));
+      buffer.append(Strings.collectionToString("Actual annotations: ", Arrays.asList(getActualAnnotations())));
+      toString = buffer.toString();
+      return toString;
    }
 
 }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedMethodImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedMethodImpl.java	2008-12-03 19:26:10 UTC (rev 396)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedMethodImpl.java	2008-12-03 22:49:55 UTC (rev 397)
@@ -22,6 +22,7 @@
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
@@ -30,11 +31,12 @@
 import org.jboss.webbeans.introspector.AnnotatedParameter;
 import org.jboss.webbeans.introspector.AnnotatedType;
 import org.jboss.webbeans.util.Reflections;
+import org.jboss.webbeans.util.Strings;
 
 /**
  * Represents an annotated method
  * 
- * This class is immutable and thus threadsafe
+ * This class is immutable and therefore threadsafe
  * 
  * @author Pete Muir
  * 
@@ -59,6 +61,9 @@
    // The abstracted declaring class
    private final AnnotatedType<?> declaringClass;
 
+   // Cached string representation
+   private String toString;
+
    /**
     * Constructor
     * 
@@ -68,6 +73,7 @@
     * @param method The underlying method
     * @param declaringClass The declaring class abstraction
     */
+   @SuppressWarnings("unchecked")
    public AnnotatedMethodImpl(Method method, AnnotatedType<?> declaringClass)
    {
       super(buildAnnotationMap(method), method);
@@ -81,7 +87,7 @@
       {
          this.actualTypeArguments = new Type[0];
       }
-      
+
       this.parameters = new ArrayList<AnnotatedParameter<Object>>();
       this.annotatedParameters = new AnnotatedParameterMap();
       for (int i = 0; i < method.getParameterTypes().length; i++)
@@ -107,7 +113,7 @@
             }
          }
       }
-      
+
       String propertyName = Reflections.getPropertyName(getDelegate());
       if (propertyName == null)
       {
@@ -281,30 +287,23 @@
     */
    public String toString()
    {
+      if (toString != null)
+      {
+         return toString;
+      }
       StringBuffer buffer = new StringBuffer();
-      // buffer.append("AnnotatedMethodImpl:\n");
-      // buffer.append(super.toString() + "\n");
-      // buffer.append("Actual type arguments: " + actualTypeArguments.length +
-      // "\n");
-      // int i = 0;
-      // for (Type actualTypeArgument : actualTypeArguments)
-      // {
-      // buffer.append(++i + " - " + actualTypeArgument.toString());
-      // }
-      // buffer.append(annotatedParameters == null ? "" :
-      // (annotatedParameters.toString() + "\n"));
-      // buffer.append("Declaring class:\n");
-      // buffer.append(declaringClass.toString());
-      // buffer.append("Method:\n");
-      // buffer.append(method.toString());
-      // buffer.append("Property name: " + propertyName + "\n");
-      // i = 0;
-      // buffer.append("Parameters: " + getParameters().size() + "\n");
-      // for (AnnotatedParameter<?> parameter : parameters)
-      // {
-      // buffer.append(++i + " - " + parameter.toString() + "\n");
-      // }
-      return buffer.toString();
+      buffer.append("AnnotatedMethodImpl:\n");
+      buffer.append(super.toString() + "\n");
+      buffer.append(Strings.collectionToString("Actual type arguments: ", Arrays.asList(getActualTypeArguments())));
+      buffer.append(annotatedParameters == null ? "" : (annotatedParameters.toString() + "\n"));
+      buffer.append("Declaring class:\n");
+      buffer.append(declaringClass.getName() + "[ " + declaringClass.getType() + "]" + "\n");
+      buffer.append("Method:\n");
+      buffer.append(method.toString());
+      buffer.append("Property name: " + propertyName + "\n");
+      buffer.append(Strings.collectionToString("Parameters: ", getParameters()));
+      toString = buffer.toString();
+      return toString;
    }
 
 }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedParameterImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedParameterImpl.java	2008-12-03 19:26:10 UTC (rev 396)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedParameterImpl.java	2008-12-03 22:49:55 UTC (rev 397)
@@ -19,16 +19,18 @@
 
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
+import java.util.Arrays;
 
 import javax.webbeans.BindingType;
 
 import org.jboss.webbeans.ManagerImpl;
 import org.jboss.webbeans.introspector.AnnotatedParameter;
+import org.jboss.webbeans.util.Strings;
 
 /**
  * Represents a parameter
  * 
- * This class is immutable and thus threadsafe
+ * This class is immutable and therefore threadsafe
  * 
  * @author Pete Muir
  * 
@@ -45,6 +47,9 @@
    // The static state
    private final boolean _static = false;
 
+   // Cached string representation
+   private String toString;
+
    /**
     * Constructor
     * 
@@ -149,19 +154,19 @@
     */
    public String toString()
    {
+      if (toString != null)
+      {
+         return toString;
+      }
       StringBuffer buffer = new StringBuffer();
-//      buffer.append("AnnotatedParameterImpl:\n");
-//      buffer.append(super.toString() + "\n");
-//      buffer.append("Type: " + type.toString() + "\n");
-//      buffer.append("Final: " + _final + "\n");
-//      buffer.append("Static: " + _static + "\n");
-//      buffer.append("Actual type arguments: " + actualTypeArguments.length + "\n");
-//      int i = 0;
-//      for (Type actualTypeArgument : actualTypeArguments)
-//      {
-//         buffer.append(++i + " - " + actualTypeArgument.toString() + "\n");
-//      }
-      return buffer.toString();
+      buffer.append("AnnotatedParameterImpl:\n");
+      buffer.append(super.toString() + "\n");
+      buffer.append("Type: " + type.toString() + "\n");
+      buffer.append("Final: " + _final + "\n");
+      buffer.append("Static: " + _static + "\n");
+      buffer.append(Strings.collectionToString("Actual type arguments: ", Arrays.asList(getActualTypeArguments())));
+      toString = buffer.toString();
+      return toString;
    }
 
 }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/BindingTypeModel.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/BindingTypeModel.java	2008-12-03 19:26:10 UTC (rev 396)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/BindingTypeModel.java	2008-12-03 22:49:55 UTC (rev 397)
@@ -26,6 +26,7 @@
 
 import org.jboss.webbeans.introspector.AnnotatedMethod;
 import org.jboss.webbeans.util.Reflections;
+import org.jboss.webbeans.util.Strings;
 
 /**
  * 
@@ -157,12 +158,7 @@
       buffer.append("BindingTypeModel:\n");
       buffer.append(super.toString());
       buffer.append("Hash code: " + hashCode);
-      buffer.append("Non-binding types: " + nonBindingTypes.size());
-      int i = 0;
-      for (AnnotatedMethod<?> nonBindingType : getNonBindingTypes())
-      {
-         buffer.append(++i + " - " + nonBindingType.toString());
-      }
+      buffer.append(Strings.collectionToString("Non-binding types: ", getNonBindingTypes()));
       return buffer.toString();
    }
 

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/StereotypeModel.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/StereotypeModel.java	2008-12-03 19:26:10 UTC (rev 396)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/StereotypeModel.java	2008-12-03 22:49:55 UTC (rev 397)
@@ -30,6 +30,8 @@
 import javax.webbeans.ScopeType;
 import javax.webbeans.Stereotype;
 
+import org.jboss.webbeans.util.Strings;
+
 /**
  * A meta model for a stereotype, allows us to cache a stereotype and to
  * validate it
@@ -248,24 +250,9 @@
       buffer.append("Default deployment type: " + getDefaultDeploymentType());
       buffer.append("Default scope type: " + getDefaultScopeType());
       buffer.append("Meta-annotation: " + getMetaAnnotation().toString());
-      buffer.append("Interceptor bindings: " + getInterceptorBindings().size());
-      int i = 0;
-      for (Annotation annotation : getInterceptorBindings())
-      {
-         buffer.append(++i + " - " + annotation.toString());
-      }
-      buffer.append("Required types: " + getRequiredTypes().size());
-      i = 0;
-      for (Class<?> requiredType : getRequiredTypes())
-      {
-         buffer.append(++i + " - " + requiredType.toString());
-      }
-      buffer.append("Supported scopes: " + getSupportedScopes().size());
-      i = 0;
-      for (Class<?> supportedScope : getSupportedScopes())
-      {
-         buffer.append(++i + " - " + supportedScope.toString());
-      }
+      buffer.append(Strings.collectionToString("Interceptor bindings: ", getInterceptorBindings()));
+      buffer.append(Strings.collectionToString("Required types: ", getRequiredTypes()));
+      buffer.append(Strings.collectionToString("Supported scopes: ", getSupportedScopes()));
       return buffer.toString();
    }
 

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/Strings.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/Strings.java	2008-12-03 19:26:10 UTC (rev 396)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/Strings.java	2008-12-03 22:49:55 UTC (rev 397)
@@ -80,12 +80,17 @@
    public static String mapToString(String header, Map<?, ?> map)
    {
       StringBuffer buffer = new StringBuffer();
+      if (map == null)
+      {
+         buffer.append(header + "null\n");
+         return buffer.toString();
+      }
       buffer.append(header + "[" + map.size() + " entries]\n");
       int i = 0;
       for (Object key : map.keySet())
       {
          Object value = map.get(key);
-         buffer.append("  #" + ++i + ": " + key.toString() + "->");
+         buffer.append("  #" + ++i + ": " + key.toString() + " -> ");
          if (value instanceof Iterable)
          {
             buffer.append("\n");
@@ -102,6 +107,23 @@
       return buffer.toString();
    }
 
+   public static String collectionToString(String header, Collection<?> collection)
+   {
+      StringBuffer buffer = new StringBuffer();
+      if (collection == null)
+      {
+         buffer.append(header + "null\n");
+         return buffer.toString();
+      }
+      buffer.append(header + "[" + collection.size() + " entries]\n");
+      int i = 0;
+      for (Object item : collection)
+      {
+         buffer.append("  #" + ++i + ": " + item.toString() + "\n");
+      }
+      return buffer.toString();
+   }
+
    public static void main(String[] args)
    {
       Map map = new HashMap<String, Collection<?>>();




More information about the weld-commits mailing list