[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