[jboss-cvs] JBossAS SVN: r58417 - projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Nov 15 16:08:34 EST 2006


Author: alesj
Date: 2006-11-15 16:08:28 -0500 (Wed, 15 Nov 2006)
New Revision: 58417

Modified:
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractInjectionValueMetaData.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractParameterMetaData.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractTypeMetaData.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractValueMetaData.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/TypeProvider.java
Log:
type safe TypeProvider cast, pop/push explanation

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractInjectionValueMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractInjectionValueMetaData.java	2006-11-15 20:17:22 UTC (rev 58416)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractInjectionValueMetaData.java	2006-11-15 21:08:28 UTC (rev 58417)
@@ -25,9 +25,9 @@
 import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
 import org.jboss.dependency.spi.ControllerContext;
 import org.jboss.dependency.spi.DependencyItem;
+import org.jboss.kernel.plugins.dependency.ClassContextDependencyItem;
 import org.jboss.kernel.spi.dependency.KernelController;
 import org.jboss.kernel.spi.dependency.KernelControllerContext;
-import org.jboss.kernel.plugins.dependency.ClassContextDependencyItem;
 import org.jboss.reflect.spi.TypeInfo;
 import org.jboss.util.JBossStringBuilder;
 
@@ -40,7 +40,9 @@
 {
    protected InjectionType injectionType = InjectionType.BY_CLASS;
 
-   /** Simplyifies things with InjectionType.BY_NAME */
+   /**
+    * Simplyifies things with InjectionType.BY_NAME
+    */
    protected AbstractPropertyMetaData propertyMetaData;
 
    /**
@@ -124,7 +126,7 @@
             }
             setValue(propertyMetaData.getName());
          }
-         
+
          visitor.initialVisit(this);
       }
       // check if was maybe set with by_name
@@ -142,24 +144,39 @@
          {
             KernelControllerContext context = visitor.getControllerContext();
             controller = (KernelController) context.getController(); // set controller
-            
-            // FIXME this popping and pushing looks broken, should be peek?
+
+            // we pop it so that parent node has the same semantics as this one
+            // meaning that his current peek is also his parent
+            // and all other nodes that cannot determine type follow the same
+            // contract - popping and pushing
+            // maybe the whole thing can be rewritten to LinkedList
+            // or simply using the fact that Stack is also a Vector?
             MetaDataVisitorNode node = visitor.visitorNodeStack().pop();
-            // FIXME Not typesafe
-            TypeProvider typeProvider = (TypeProvider) node;
             try
             {
-               DependencyItem item = new ClassContextDependencyItem(
-                     context.getName(),
-                     typeProvider.getType(visitor, this),
-                     visitor.getContextState(), 
-                     dependentState);
-               visitor.addDependency(item);
+               if (node instanceof TypeProvider)
+               {
+                  TypeProvider typeProvider = (TypeProvider) node;
+                  DependencyItem item = new ClassContextDependencyItem(
+                        context.getName(),
+                        typeProvider.getType(visitor, this),
+                        visitor.getContextState(),
+                        dependentState);
+                  visitor.addDependency(item);
+               }
+               else
+               {
+                  throw new Error(TypeProvider.ERROR_MSG);
+               }
             }
+            catch (Error error)
+            {
+               throw error;
+            }
             catch (Throwable throwable)
             {
                throw new Error(throwable);
-            } 
+            }
             finally
             {
                visitor.visitorNodeStack().push(node);

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractParameterMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractParameterMetaData.java	2006-11-15 20:17:22 UTC (rev 58416)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractParameterMetaData.java	2006-11-15 21:08:28 UTC (rev 58417)
@@ -28,11 +28,11 @@
 import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
 import org.jboss.beans.metadata.spi.ParameterMetaData;
 import org.jboss.beans.metadata.spi.ValueMetaData;
-import org.jboss.util.JBossStringBuilder;
+import org.jboss.kernel.plugins.config.Configurator;
+import org.jboss.kernel.spi.config.KernelConfigurator;
 import org.jboss.kernel.spi.dependency.KernelController;
 import org.jboss.kernel.spi.dependency.KernelControllerContext;
-import org.jboss.kernel.spi.config.KernelConfigurator;
-import org.jboss.kernel.plugins.config.Configurator;
+import org.jboss.util.JBossStringBuilder;
 
 /**
  * Metadata for a parameter.
@@ -173,13 +173,19 @@
       else
       {
          Stack<MetaDataVisitorNode> visitorNodeStack = visitor.visitorNodeStack();
-         // FIXME this popping and pushing looks broken, should be peek?
-         MetaDataVisitorNode node = visitor.visitorNodeStack().pop();
-         // FIXME Not typesafe
-         TypeProvider typeProvider = (TypeProvider) node;
+         // see AbstractInjectionValueMetaData.describeVisit
+         MetaDataVisitorNode node = visitorNodeStack.pop();
          try
          {
-            return typeProvider.getType(visitor, this);
+            if (node instanceof TypeProvider)
+            {
+               TypeProvider typeProvider = (TypeProvider) node;
+               return typeProvider.getType(visitor, this);
+            }
+            else
+            {
+               throw new IllegalArgumentException(TypeProvider.ERROR_MSG);
+            }
          }
          finally
          {

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractTypeMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractTypeMetaData.java	2006-11-15 20:17:22 UTC (rev 58416)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractTypeMetaData.java	2006-11-15 21:08:28 UTC (rev 58417)
@@ -21,6 +21,8 @@
 */
 package org.jboss.beans.metadata.plugins;
 
+import java.util.Stack;
+
 import org.jboss.beans.metadata.spi.BeanMetaData;
 import org.jboss.beans.metadata.spi.MetaDataVisitor;
 import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
@@ -109,14 +111,16 @@
 
    private void preparePreinstantiatedLookup(MetaDataVisitor visitor)
    {
-      MetaDataVisitorNode parent = visitor.visitorNodeStack().pop();
+      Stack<MetaDataVisitorNode> visitorNodes = visitor.visitorNodeStack();
+      // pop it so that we can get to grand parent for more info
+      MetaDataVisitorNode parent = visitorNodes.pop();
       try
       {
          if (parent instanceof PropertyMetaData)
          {
             PropertyMetaData pmd = (PropertyMetaData) parent;
             propertyName = pmd.getName();
-            Object gp = visitor.visitorNodeStack().peek();
+            Object gp = visitorNodes.peek();
             if (gp instanceof BeanMetaData)
             {
                BeanMetaData bmd = (BeanMetaData) gp;
@@ -126,7 +130,7 @@
       }
       finally
       {
-         visitor.visitorNodeStack().push(parent);
+         visitorNodes.push(parent);
       }
    }
 

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractValueMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractValueMetaData.java	2006-11-15 20:17:22 UTC (rev 58416)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractValueMetaData.java	2006-11-15 21:08:28 UTC (rev 58417)
@@ -21,26 +21,28 @@
 */
 package org.jboss.beans.metadata.plugins;
 
+import java.util.Collections;
 import java.util.Iterator;
-import java.util.Collections;
 import java.util.Stack;
 
 import org.jboss.beans.metadata.spi.MetaDataVisitor;
+import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
 import org.jboss.beans.metadata.spi.ValueMetaData;
-import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
 import org.jboss.reflect.spi.TypeInfo;
 import org.jboss.util.JBossObject;
 import org.jboss.util.JBossStringBuilder;
 
 /**
  * Plain value.
- * 
+ *
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
  * @version $Revision$
  */
 public class AbstractValueMetaData extends JBossObject implements ValueMetaData, TypeProvider
 {
-   /** The value */
+   /**
+    * The value
+    */
    protected Object value;
 
    /**
@@ -52,14 +54,14 @@
 
    /**
     * Create a new plain value
-    * 
+    *
     * @param value the value
     */
    public AbstractValueMetaData(Object value)
    {
       this.value = value;
    }
-   
+
    public Object getValue()
    {
       return value;
@@ -75,7 +77,7 @@
    {
       return value;
    }
-   
+
    public Object getValue(TypeInfo info, ClassLoader cl) throws Throwable
    {
       return value;
@@ -94,13 +96,19 @@
    public Class getType(MetaDataVisitor visitor, MetaDataVisitorNode previous) throws Throwable
    {
       Stack<MetaDataVisitorNode> visitorNodeStack = visitor.visitorNodeStack();
-      // FIXME this popping and pushing looks broken, should be peek?
-      MetaDataVisitorNode node = visitor.visitorNodeStack().pop();
-      // FIXME Not typesafe
-      TypeProvider typeProvider = (TypeProvider) node;
+      // see AbstractInjectionValueMetaData.describeVisit
+      MetaDataVisitorNode node = visitorNodeStack.pop();
       try
       {
-         return typeProvider.getType(visitor, this);
+         if (node instanceof TypeProvider)
+         {
+            TypeProvider typeProvider = (TypeProvider) node;
+            return typeProvider.getType(visitor, this);
+         }
+         else
+         {
+            throw new IllegalArgumentException(TypeProvider.ERROR_MSG);
+         }
       }
       finally
       {
@@ -114,12 +122,12 @@
          return Collections.singletonList((MetaDataVisitorNode) value).iterator();
       return null;
    }
-   
+
    public void toString(JBossStringBuilder buffer)
    {
       buffer.append("value=").append(value);
    }
-   
+
    public void toShortString(JBossStringBuilder buffer)
    {
       buffer.append(value);

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/TypeProvider.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/TypeProvider.java	2006-11-15 20:17:22 UTC (rev 58416)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/TypeProvider.java	2006-11-15 21:08:28 UTC (rev 58417)
@@ -30,6 +30,8 @@
 public interface TypeProvider
 {
 
+   static final String ERROR_MSG = "Node not of TypeProvider instance, cannot determine class type."; 
+
    Class getType(MetaDataVisitor visitor, MetaDataVisitorNode previous) throws Throwable;
 
 }




More information about the jboss-cvs-commits mailing list