You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2007/03/28 18:03:04 UTC

svn commit: r523381 [1/4] - in /incubator/tuscany/java/sca/kernel: core/src/main/java/org/apache/tuscany/core/bootstrap/ core/src/main/java/org/apache/tuscany/core/builder/ core/src/main/java/org/apache/tuscany/core/deployer/ core/src/main/java/org/apa...

Author: rfeng
Date: Wed Mar 28 09:03:01 2007
New Revision: 523381

URL: http://svn.apache.org/viewvc?view=rev&rev=523381
Log:
Improve the java introspection by consolidating the constructor parameter processing and fix a few inconsistencies against the spec

Added:
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/processor/AbstractPropertyProcessor.java   (with props)
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/processor/AbstractConstructorProcessorTest.java   (with props)
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/processor/AbstractPropertyProcessorTestCase.java   (with props)
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/implementation/java/JavaElement.java   (with props)
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/implementation/java/Parameter.java   (with props)
Removed:
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/processor/ImplementationProcessorServiceImpl.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/processor/ConstructorProcessorExtensibilityTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/processor/ImplementationProcessorServiceTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/processor/ImplementationProcessorServiceUniqueTestCase.java
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/implementation/java/AbstractPropertyProcessor.java
    incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/implementation/java/AbstractPropertyProcessorTestCase.java
Modified:
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/Bootstrapper.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/IntrospectionRegistryImpl.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoAtomicComponent.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaComponentBuilder.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/processor/ConstructorProcessor.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/processor/HeuristicPojoProcessor.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/processor/MonitorProcessor.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/processor/PropertyProcessor.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/processor/ReferenceProcessor.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/processor/ResourceProcessor.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/processor/ServiceProcessor.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemComponentBuilder.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/deployment/AssemblyServiceImpl.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/util/JavaIntrospectionHelper.java
    incubator/tuscany/java/sca/kernel/core/src/main/resources/org/apache/tuscany/core/implementation.scdl
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/processor/AllowsPassByReferenceProcessorTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/processor/ConstructorProcessorTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/processor/ConstructorPropertyTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/processor/ConstructorReferenceTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/processor/ConstructorResourceTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/processor/HeuristicAndPropertyTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/processor/HeuristicConstructorTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/processor/HeuristicPojoProcessorTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/processor/HeutisticExtensibleConstructorTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/processor/MonitorProcessorTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/processor/PropertyProcessorTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/processor/ReferenceProcessorTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/processor/ServiceCallbackTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/processor/ServiceProcessorTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/system/loader/SystemComponentTypeLoaderTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/integration/implementation/IntrospectionRegistryIntegrationTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/services/deployment/contribution/JavaContributionProcessorTestCase.java
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/implementation/java/ConstructorDefinition.java
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/implementation/java/ImplementationProcessor.java
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/implementation/java/ImplementationProcessorExtension.java
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/implementation/java/ImplementationProcessorService.java
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/implementation/java/JavaMappedComponentType.java
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/implementation/java/PojoComponentType.java

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/Bootstrapper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/Bootstrapper.java?view=diff&rev=523381&r1=523380&r2=523381
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/Bootstrapper.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/Bootstrapper.java Wed Mar 28 09:03:01 2007
@@ -18,16 +18,14 @@
  */
 package org.apache.tuscany.core.bootstrap;
 
+import org.apache.tuscany.core.resolver.AutowireResolver;
+import org.apache.tuscany.host.MonitorFactory;
 import org.apache.tuscany.spi.builder.Connector;
 import org.apache.tuscany.spi.component.ScopeRegistry;
-import org.apache.tuscany.spi.component.WorkContext;
 import org.apache.tuscany.spi.deployer.Deployer;
 import org.apache.tuscany.spi.implementation.java.Introspector;
 import org.apache.tuscany.spi.loader.Loader;
 import org.apache.tuscany.spi.loader.PropertyObjectFactory;
-
-import org.apache.tuscany.core.resolver.AutowireResolver;
-import org.apache.tuscany.host.MonitorFactory;
 
 /**
  * Interface that abstracts the process used to create a running Tuscany system. Implementation of this may provide

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java?view=diff&rev=523381&r1=523380&r2=523381
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java Wed Mar 28 09:03:01 2007
@@ -20,25 +20,12 @@
 
 import javax.xml.stream.XMLInputFactory;
 
-import org.apache.tuscany.spi.builder.Builder;
-import org.apache.tuscany.spi.builder.Connector;
-import org.apache.tuscany.spi.component.ComponentManager;
-import org.apache.tuscany.spi.component.ScopeContainerMonitor;
-import org.apache.tuscany.spi.component.ScopeRegistry;
-import org.apache.tuscany.spi.deployer.Deployer;
-import org.apache.tuscany.spi.extension.LoaderExtension;
-import org.apache.tuscany.spi.idl.java.JavaInterfaceProcessorRegistry;
-import org.apache.tuscany.spi.implementation.java.ImplementationProcessorService;
-import org.apache.tuscany.spi.implementation.java.Introspector;
-import org.apache.tuscany.spi.loader.LoaderRegistry;
-import org.apache.tuscany.spi.loader.PropertyObjectFactory;
-
 import org.apache.tuscany.core.binding.local.LocalBindingBuilder;
 import org.apache.tuscany.core.binding.local.LocalBindingDefinition;
 import org.apache.tuscany.core.binding.local.LocalBindingLoader;
 import org.apache.tuscany.core.builder.BuilderRegistryImpl;
-import org.apache.tuscany.core.component.scope.ScopeRegistryImpl;
 import org.apache.tuscany.core.component.scope.CompositeScopeContainer;
+import org.apache.tuscany.core.component.scope.ScopeRegistryImpl;
 import org.apache.tuscany.core.deployer.DeployerImpl;
 import org.apache.tuscany.core.idl.java.InterfaceJavaLoader;
 import org.apache.tuscany.core.idl.java.JavaInterfaceProcessorRegistryImpl;
@@ -49,7 +36,6 @@
 import org.apache.tuscany.core.implementation.processor.DestroyProcessor;
 import org.apache.tuscany.core.implementation.processor.EagerInitProcessor;
 import org.apache.tuscany.core.implementation.processor.HeuristicPojoProcessor;
-import org.apache.tuscany.core.implementation.processor.ImplementationProcessorServiceImpl;
 import org.apache.tuscany.core.implementation.processor.InitProcessor;
 import org.apache.tuscany.core.implementation.processor.MonitorProcessor;
 import org.apache.tuscany.core.implementation.processor.PropertyProcessor;
@@ -73,6 +59,18 @@
 import org.apache.tuscany.core.property.PropertyObjectFactoryImpl;
 import org.apache.tuscany.core.resolver.AutowireResolver;
 import org.apache.tuscany.host.MonitorFactory;
+import org.apache.tuscany.spi.builder.Builder;
+import org.apache.tuscany.spi.builder.Connector;
+import org.apache.tuscany.spi.component.ComponentManager;
+import org.apache.tuscany.spi.component.ScopeContainerMonitor;
+import org.apache.tuscany.spi.component.ScopeRegistry;
+import org.apache.tuscany.spi.deployer.Deployer;
+import org.apache.tuscany.spi.extension.LoaderExtension;
+import org.apache.tuscany.spi.idl.java.JavaInterfaceProcessorRegistry;
+import org.apache.tuscany.spi.implementation.java.ImplementationProcessorExtension;
+import org.apache.tuscany.spi.implementation.java.Introspector;
+import org.apache.tuscany.spi.loader.LoaderRegistry;
+import org.apache.tuscany.spi.loader.PropertyObjectFactory;
 
 /**
  * A default implementation of a Bootstrapper. Please see the documentation on the individual methods for how the
@@ -195,20 +193,28 @@
      * @return a new Introspector
      */
     public Introspector createIntrospector(JavaInterfaceProcessorRegistry registry) {
-        ImplementationProcessorService service = new ImplementationProcessorServiceImpl(registry);
         IntrospectionRegistryImpl.Monitor monitor = monitorFactory.getMonitor(IntrospectionRegistryImpl.Monitor.class);
         IntrospectionRegistryImpl introspectionRegistry = new IntrospectionRegistryImpl(monitor);
-        introspectionRegistry.registerProcessor(new ConstructorProcessor(service));
+        introspectionRegistry.registerProcessor(new ConstructorProcessor());
         introspectionRegistry.registerProcessor(new DestroyProcessor());
         introspectionRegistry.registerProcessor(new InitProcessor());
         introspectionRegistry.registerProcessor(new EagerInitProcessor());
         introspectionRegistry.registerProcessor(new ScopeProcessor());
-        introspectionRegistry.registerProcessor(new PropertyProcessor(service));
-        introspectionRegistry.registerProcessor(new ReferenceProcessor(registry));
+        introspectionRegistry.registerProcessor(new PropertyProcessor());
+        ImplementationProcessorExtension processor = new ReferenceProcessor();
+        processor.setInterfaceProcessorRegistry(registry);
+        processor.setRegistry(introspectionRegistry);
+        introspectionRegistry.registerProcessor(processor);
         introspectionRegistry.registerProcessor(new ResourceProcessor());
-        introspectionRegistry.registerProcessor(new ServiceProcessor(service));
-        introspectionRegistry.registerProcessor(new HeuristicPojoProcessor(service));
-        introspectionRegistry.registerProcessor(new MonitorProcessor(monitorFactory, service));
+        processor = new ServiceProcessor();
+        processor.setInterfaceProcessorRegistry(registry);
+        processor.setRegistry(introspectionRegistry);
+        introspectionRegistry.registerProcessor(processor);
+        processor = new HeuristicPojoProcessor();
+        processor.setInterfaceProcessorRegistry(registry);
+        processor.setRegistry(introspectionRegistry);
+        introspectionRegistry.registerProcessor(processor);
+        introspectionRegistry.registerProcessor(new MonitorProcessor(monitorFactory));
         return introspectionRegistry;
     }
 

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java?view=diff&rev=523381&r1=523380&r2=523381
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java Wed Mar 28 09:03:01 2007
@@ -301,6 +301,7 @@
     protected Wire createWire(URI sourceURI, URI targetUri, ServiceContract<?> contract, QName bindingType) {
         Wire wire = new WireImpl(bindingType);
         wire.setSourceContract(contract);
+        wire.setTargetContract(contract);
         wire.setSourceUri(sourceURI);
         wire.setTargetUri(targetUri);
         for (Operation<?> operation : contract.getOperations().values()) {
@@ -381,4 +382,4 @@
                 return pReferrer == Scope.COMPOSITE && pReferee == Scope.SYSTEM;
             }
     }
-}
\ No newline at end of file
+}

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java?view=diff&rev=523381&r1=523380&r2=523381
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java Wed Mar 28 09:03:01 2007
@@ -22,6 +22,7 @@
 import java.util.Collection;
 import javax.xml.stream.XMLInputFactory;
 
+import org.osoa.sca.annotations.Constructor;
 import org.osoa.sca.annotations.Reference;
 
 import org.apache.tuscany.api.annotation.Monitor;
@@ -77,6 +78,7 @@
         this.connector = connector;
     }
 
+    @Constructor
     public DeployerImpl() {
         xmlFactory = XMLInputFactory.newInstance("javax.xml.stream.XMLInputFactory", getClass().getClassLoader());
     }

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/IntrospectionRegistryImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/IntrospectionRegistryImpl.java?view=diff&rev=523381&r1=523380&r2=523381
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/IntrospectionRegistryImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/IntrospectionRegistryImpl.java Wed Mar 28 09:03:01 2007
@@ -18,6 +18,9 @@
  */
 package org.apache.tuscany.core.implementation;
 
+import static org.apache.tuscany.core.util.JavaIntrospectionHelper.getAllPublicAndProtectedFields;
+import static org.apache.tuscany.core.util.JavaIntrospectionHelper.getAllUniquePublicProtectedMethods;
+
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
@@ -26,11 +29,13 @@
 import java.util.Set;
 
 import org.apache.tuscany.spi.deployer.DeploymentContext;
+import org.apache.tuscany.spi.implementation.java.ConstructorDefinition;
 import org.apache.tuscany.spi.implementation.java.ImplementationProcessor;
 import org.apache.tuscany.spi.implementation.java.IntrospectionRegistry;
 import org.apache.tuscany.spi.implementation.java.JavaMappedProperty;
 import org.apache.tuscany.spi.implementation.java.JavaMappedReference;
 import org.apache.tuscany.spi.implementation.java.JavaMappedService;
+import org.apache.tuscany.spi.implementation.java.Parameter;
 import org.apache.tuscany.spi.implementation.java.PojoComponentType;
 import org.apache.tuscany.spi.implementation.java.ProcessingException;
 
@@ -38,13 +43,13 @@
 
 /**
  * Default implementation of the <code>IntrospectionRegistry</code>
- *
+ * 
  * @version $Rev$ $Date$
  */
 public class IntrospectionRegistryImpl implements IntrospectionRegistry {
 
     private Monitor monitor;
-    private List<ImplementationProcessor> cache = new ArrayList<ImplementationProcessor>();
+    private List<ImplementationProcessor> processors = new ArrayList<ImplementationProcessor>();
 
     public IntrospectionRegistryImpl() {
     }
@@ -60,39 +65,44 @@
 
     public void registerProcessor(ImplementationProcessor processor) {
         monitor.register(processor);
-        cache.add(processor);
+        processors.add(processor);
     }
 
     public void unregisterProcessor(ImplementationProcessor processor) {
         monitor.unregister(processor);
-        cache.remove(processor);
+        processors.remove(processor);
     }
 
     public PojoComponentType introspect(Class<?> clazz,
-                                        PojoComponentType<JavaMappedService, JavaMappedReference,
-                                            JavaMappedProperty<?>> type,
-                                        DeploymentContext context)
-        throws ProcessingException {
-        for (ImplementationProcessor processor : cache) {
+                                        PojoComponentType<JavaMappedService, JavaMappedReference, JavaMappedProperty<?>> type,
+                                        DeploymentContext context) throws ProcessingException {
+        for (ImplementationProcessor processor : processors) {
             processor.visitClass(clazz, type, context);
         }
 
         for (Constructor<?> constructor : clazz.getConstructors()) {
-            for (ImplementationProcessor processor : cache) {
+            for (ImplementationProcessor processor : processors) {
                 processor.visitConstructor(constructor, type, context);
+                // Assuming the visitClass or visitConstructor will populate the type.getConstructors
+                ConstructorDefinition<?> definition = type.getConstructors().get(constructor);
+                if (definition != null) {
+                    for (Parameter p : definition.getParameters()) {
+                        processor.visitConstructorParameter(p, type, context);
+                    }
+                }
             }
         }
 
-        Set<Method> methods = JavaIntrospectionHelper.getAllUniquePublicProtectedMethods(clazz);
+        Set<Method> methods = getAllUniquePublicProtectedMethods(clazz);
         for (Method method : methods) {
-            for (ImplementationProcessor processor : cache) {
+            for (ImplementationProcessor processor : processors) {
                 processor.visitMethod(method, type, context);
             }
         }
 
-        Set<Field> fields = JavaIntrospectionHelper.getAllPublicAndProtectedFields(clazz);
+        Set<Field> fields = getAllPublicAndProtectedFields(clazz);
         for (Field field : fields) {
-            for (ImplementationProcessor processor : cache) {
+            for (ImplementationProcessor processor : processors) {
                 processor.visitField(field, type, context);
             }
         }
@@ -102,7 +112,7 @@
             visitSuperClass(superClass, type, context);
         }
 
-        for (ImplementationProcessor processor : cache) {
+        for (ImplementationProcessor processor : processors) {
             processor.visitEnd(clazz, type, context);
         }
         return type;
@@ -110,10 +120,9 @@
 
     private void visitSuperClass(Class<?> clazz,
                                  PojoComponentType<JavaMappedService, JavaMappedReference, JavaMappedProperty<?>> type,
-                                 DeploymentContext context)
-        throws ProcessingException {
+                                 DeploymentContext context) throws ProcessingException {
         if (!Object.class.equals(clazz)) {
-            for (ImplementationProcessor processor : cache) {
+            for (ImplementationProcessor processor : processors) {
                 processor.visitSuperClass(clazz, type, context);
             }
             clazz = clazz.getSuperclass();

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoAtomicComponent.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoAtomicComponent.java?view=diff&rev=523381&r1=523380&r2=523381
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoAtomicComponent.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoAtomicComponent.java Wed Mar 28 09:03:01 2007
@@ -18,6 +18,7 @@
  */
 package org.apache.tuscany.core.implementation;
 
+import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
 import java.lang.reflect.Member;
 import java.lang.reflect.Method;
@@ -61,9 +62,12 @@
 import org.apache.tuscany.core.injection.PojoObjectFactory;
 
 /**
- * Base implementation of an {@link org.apache.tuscany.spi.component.AtomicComponent} whose type is a Java class
- *
- * @version $$Rev$$ $$Date$$
+ * Base implementation of an
+ * {@link org.apache.tuscany.spi.component.AtomicComponent} whose type is a Java
+ * class
+ * 
+ * @version $$Rev$$ $$Date: 2007-03-19 22:08:36 -0700 (Mon, 19 Mar
+ *          2007) $$
  */
 public abstract class PojoAtomicComponent extends AtomicComponentExtension implements ComponentContextProvider {
     protected EventInvoker<Object> initInvoker;
@@ -85,13 +89,8 @@
     private List<Class<?>> constructorParamTypes = new ArrayList<Class<?>>();
 
     public PojoAtomicComponent(PojoConfiguration configuration) {
-        super(configuration.getName(),
-            configuration.getProxyService(),
-            configuration.getWorkContext(),
-            configuration.getGroupId(),
-            configuration.getInitLevel(),
-            configuration.getMaxIdleTime(),
-            configuration.getMaxAge());
+        super(configuration.getName(), configuration.getProxyService(), configuration.getWorkContext(), configuration
+            .getGroupId(), configuration.getInitLevel(), configuration.getMaxIdleTime(), configuration.getMaxAge());
         assert configuration.getInstanceFactory() != null : "Object factory was null";
         initInvoker = configuration.getInitInvoker();
         destroyInvoker = configuration.getDestroyInvoker();
@@ -101,13 +100,13 @@
         constructorParamTypes = configuration.getConstructorParamTypes();
         injectors = new ArrayList<Injector<Object>>();
         referenceSites = configuration.getReferenceSite() != null ? configuration.getReferenceSite()
-            : new HashMap<String, Member>();
+                                                                 : new HashMap<String, Member>();
         propertySites = configuration.getPropertySites() != null ? configuration.getPropertySites()
-            : new HashMap<String, Member>();
+                                                                : new HashMap<String, Member>();
         resourceSites = configuration.getResourceSites() != null ? configuration.getResourceSites()
-            : new HashMap<String, Member>();
+                                                                : new HashMap<String, Member>();
         callbackSites = configuration.getCallbackSites() != null ? configuration.getCallbackSites()
-            : new HashMap<String, Member>();
+                                                                : new HashMap<String, Member>();
         implementationClass = configuration.getImplementationClass();
 
         componentContext = new ComponentContextImpl(this);
@@ -124,7 +123,8 @@
     }
 
     public boolean isOptimizable() {
-        // stateless implementations that require a destroy callback cannot be optimized since the callback is
+        // stateless implementations that require a destroy callback cannot be
+        // optimized since the callback is
         // performed by the JavaTargetInvoker
         return !(getScope() == Scope.STATELESS && destroyInvoker != null);
     }
@@ -147,9 +147,9 @@
     }
 
     public InstanceWrapper<?> createInstanceWrapper() throws ObjectCreationException {
-/* FIXME make this work
-        return instanceFactory2.newInstance();
-*/
+        /*
+         * FIXME make this work return instanceFactory2.newInstance();
+         */
         Object instance = createInstance();
         return new ReflectiveInstanceWrapper<Object>(instance, initInvoker, destroyInvoker);
     }
@@ -168,7 +168,7 @@
         }
         wireList.add(wire);
         Member member = referenceSites.get(referenceName);
-        if (member != null) {
+        if (member != null && !(member instanceof Constructor)) {
             injectors.add(createInjector(member, wire));
         }
         // cycle through constructor param names as well
@@ -179,7 +179,7 @@
                 break;
             }
         }
-        //TODO error if ref not set on constructor or ref site
+        // TODO error if ref not set on constructor or ref site
 
     }
 
@@ -228,16 +228,17 @@
             for (Map.Entry<String, Member> entry : callbackSites.entrySet()) {
                 List<Wire> wires = callBackwires.get(entry.getKey());
                 if (wires == null) {
-                    // this can happen when there are no client wires to a component that has a callback  
+                    // this can happen when there are no client wires to a
+                    // component that has a callback
                     continue;
                 }
                 Member member = entry.getValue();
                 if (member instanceof Field) {
-                    Field field = (Field) member;
+                    Field field = (Field)member;
                     ObjectFactory<?> factory = new CallbackWireObjectFactory(field.getType(), proxyService, wires);
                     injectors.add(new FieldInjector<Object>(field, factory));
                 } else if (member instanceof Method) {
-                    Method method = (Method) member;
+                    Method method = (Method)member;
                     Class<?> type = method.getParameterTypes()[0];
                     ObjectFactory<?> factory = new CallbackWireObjectFactory(type, proxyService, wires);
                     injectors.add(new MethodInjector<Object>(method, factory));
@@ -253,9 +254,9 @@
     public void addPropertyFactory(String name, ObjectFactory<?> factory) {
         Member member = propertySites.get(name);
         if (member instanceof Field) {
-            injectors.add(new FieldInjector<Object>((Field) member, factory));
+            injectors.add(new FieldInjector<Object>((Field)member, factory));
         } else if (member instanceof Method) {
-            injectors.add(new MethodInjector<Object>((Method) member, factory));
+            injectors.add(new MethodInjector<Object>((Method)member, factory));
         }
         // cycle through constructor param names as well
         for (int i = 0; i < constructorParamNames.size(); i++) {
@@ -265,7 +266,7 @@
                 break;
             }
         }
-        //FIXME throw an error if no injection site found
+        // FIXME throw an error if no injection site found
 
         propertyFactories.put(name, factory);
     }
@@ -273,9 +274,9 @@
     public void addResourceFactory(String name, ObjectFactory<?> factory) {
         Member member = resourceSites.get(name);
         if (member instanceof Field) {
-            injectors.add(new FieldInjector<Object>((Field) member, factory));
+            injectors.add(new FieldInjector<Object>((Field)member, factory));
         } else if (member instanceof Method) {
-            injectors.add(new MethodInjector<Object>((Method) member, factory));
+            injectors.add(new MethodInjector<Object>((Method)member, factory));
         }
         // cycle through constructor param names as well
         for (int i = 0; i < constructorParamNames.size(); i++) {
@@ -285,15 +286,15 @@
                 break;
             }
         }
-        //FIXME throw an error if no injection site found
+        // FIXME throw an error if no injection site found
     }
 
     public void addConversationIDFactory(Member member) {
         ObjectFactory<String> convIDObjectFactory = new ConversationIDObjectFactory(workContext);
         if (member instanceof Field) {
-            injectors.add(new FieldInjector<Object>((Field) member, convIDObjectFactory));
+            injectors.add(new FieldInjector<Object>((Field)member, convIDObjectFactory));
         } else if (member instanceof Method) {
-            injectors.add(new MethodInjector<Object>((Method) member, convIDObjectFactory));
+            injectors.add(new MethodInjector<Object>((Method)member, convIDObjectFactory));
         } else {
             throw new InvalidAccessorException("Member must be a field or method", member.getName());
         }
@@ -312,13 +313,15 @@
 
     protected Injector<Object> createInjector(Member member, Wire wire) {
         if (member instanceof Field) {
-            Class<?> type = ((Field) member).getType();
+            Class<?> type = ((Field)member).getType();
             ObjectFactory<?> factory = createWireFactory(type, wire);
-            return new FieldInjector<Object>((Field) member, factory);
+            return new FieldInjector<Object>((Field)member, factory);
         } else if (member instanceof Method) {
-            Class<?> type = ((Method) member).getParameterTypes()[0];
+            Class<?> type = ((Method)member).getParameterTypes()[0];
             ObjectFactory<?> factory = createWireFactory(type, wire);
-            return new MethodInjector<Object>((Method) member, factory);
+            return new MethodInjector<Object>((Method)member, factory);
+        } else if (member instanceof Constructor) {
+            return null;
         } else {
             throw new InvalidAccessorException("Member must be a field or method", member.getName());
         }
@@ -332,14 +335,14 @@
             factories.add(createWireFactory(interfaceType, wire));
         }
         if (member instanceof Field) {
-            Field field = (Field) member;
+            Field field = (Field)member;
             if (field.getType().isArray()) {
                 return new FieldInjector<Object>(field, new ArrayMultiplicityObjectFactory(interfaceType, factories));
             } else {
                 return new FieldInjector<Object>(field, new ListMultiplicityObjectFactory(factories));
             }
         } else if (member instanceof Method) {
-            Method method = (Method) member;
+            Method method = (Method)member;
             if (method.getParameterTypes()[0].isArray()) {
                 return new MethodInjector<Object>(method, new ArrayMultiplicityObjectFactory(interfaceType, factories));
             } else {
@@ -389,7 +392,7 @@
     }
 
     public <B, R extends CallableReference<B>> R cast(B target) {
-        return (R) proxyService.cast(target);
+        return (R)proxyService.cast(target);
     }
 
     protected abstract <B> ObjectFactory<B> createWireFactory(Class<B> interfaze, Wire wire);

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaComponentBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaComponentBuilder.java?view=diff&rev=523381&r1=523380&r2=523381
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaComponentBuilder.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaComponentBuilder.java Wed Mar 28 09:03:01 2007
@@ -35,6 +35,7 @@
 import org.apache.tuscany.spi.implementation.java.JavaMappedProperty;
 import org.apache.tuscany.spi.implementation.java.JavaMappedReference;
 import org.apache.tuscany.spi.implementation.java.JavaMappedService;
+import org.apache.tuscany.spi.implementation.java.Parameter;
 import org.apache.tuscany.spi.implementation.java.PojoComponentType;
 import org.apache.tuscany.spi.implementation.java.Resource;
 import org.apache.tuscany.spi.model.ComponentDefinition;
@@ -118,10 +119,11 @@
         Constructor<?> constr = ctorDef.getConstructor();
         PojoObjectFactory<?> instanceFactory = new PojoObjectFactory(constr);
         configuration.setInstanceFactory(instanceFactory);
-        configuration.getConstructorParamNames().addAll(ctorDef.getInjectionNames());
-        for (Class<?> clazz : constr.getParameterTypes()) {
-            configuration.addConstructorParamType(clazz);
+        for (Parameter param : ctorDef.getParameters()) {
+            configuration.getConstructorParamNames().add(param.getName());
+            configuration.addConstructorParamType(param.getType());
         }
+
         configuration.setName(definition.getUri());
         handleCallbackSites(componentType, configuration);
 

Added: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/processor/AbstractPropertyProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/processor/AbstractPropertyProcessor.java?view=auto&rev=523381
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/processor/AbstractPropertyProcessor.java (added)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/processor/AbstractPropertyProcessor.java Wed Mar 28 09:03:01 2007
@@ -0,0 +1,182 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.tuscany.core.implementation.processor;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.lang.reflect.Member;
+import java.lang.reflect.Method;
+import java.util.Collection;
+import java.util.Map;
+
+import org.apache.tuscany.api.annotation.DataType;
+import org.apache.tuscany.core.util.JavaIntrospectionHelper;
+import org.apache.tuscany.spi.deployer.DeploymentContext;
+import org.apache.tuscany.spi.implementation.java.DuplicatePropertyException;
+import org.apache.tuscany.spi.implementation.java.IllegalPropertyException;
+import org.apache.tuscany.spi.implementation.java.ImplementationProcessorExtension;
+import org.apache.tuscany.spi.implementation.java.JavaElement;
+import org.apache.tuscany.spi.implementation.java.JavaMappedProperty;
+import org.apache.tuscany.spi.implementation.java.JavaMappedReference;
+import org.apache.tuscany.spi.implementation.java.JavaMappedService;
+import org.apache.tuscany.spi.implementation.java.Parameter;
+import org.apache.tuscany.spi.implementation.java.PojoComponentType;
+import org.apache.tuscany.spi.implementation.java.ProcessingException;
+
+/**
+ * Base class for ImplementationProcessors that handle annotations that add
+ * Properties.
+ * 
+ * @version $Rev$ $Date$
+ */
+public abstract class AbstractPropertyProcessor<A extends Annotation> extends ImplementationProcessorExtension {
+    private final Class<A> annotationClass;
+
+    protected AbstractPropertyProcessor(Class<A> annotationClass) {
+        this.annotationClass = annotationClass;
+    }
+
+    public void visitMethod(Method method,
+                            PojoComponentType<JavaMappedService, JavaMappedReference, JavaMappedProperty<?>> type,
+                            DeploymentContext context) throws ProcessingException {
+        A annotation = method.getAnnotation(annotationClass);
+        if (annotation == null) {
+            return;
+        }
+
+        if (!Void.TYPE.equals(method.getReturnType())) {
+            throw new IllegalPropertyException("Method does not have void return type", method.toString());
+        }
+        Class[] paramTypes = method.getParameterTypes();
+        if (paramTypes.length != 1) {
+            throw new IllegalPropertyException("Method must have a single parameter", method.toString());
+        }
+
+        String name = getName(annotation);
+        if (name == null || "".equals(name)) {
+            name = method.getName();
+            if (name.startsWith("set")) {
+                name = JavaIntrospectionHelper.toPropertyName(method.getName());
+            }
+        }
+
+        Map<String, JavaMappedProperty<?>> properties = type.getProperties();
+        if (properties.containsKey(name)) {
+            throw new DuplicatePropertyException(name);
+        }
+
+        JavaElement element = new JavaElement(method, 0);
+        JavaMappedProperty<?> property = createProperty(name, element);
+
+        // add databinding available as annotations, as extensions
+        DataType propertyDataBinding = method.getAnnotation(DataType.class);
+        if (propertyDataBinding != null) {
+            property.getExtensions().put("databinding", propertyDataBinding.name());
+        }
+        initProperty(property, annotation, context);
+        properties.put(name, property);
+    }
+
+    public void visitField(Field field,
+                           PojoComponentType<JavaMappedService, JavaMappedReference, JavaMappedProperty<?>> type,
+                           DeploymentContext context) throws ProcessingException {
+
+        A annotation = field.getAnnotation(annotationClass);
+        if (annotation == null) {
+            return;
+        }
+
+        String name = getName(annotation);
+        if (name == null) {
+            name = "";
+        }
+        if ("".equals(name) || name.equals(field.getType().getName())) {
+            name = field.getName();
+        }
+
+        Map<String, JavaMappedProperty<?>> properties = type.getProperties();
+        if (properties.containsKey(name)) {
+            throw new DuplicatePropertyException(name);
+        }
+
+        JavaElement element = new JavaElement(field);
+        JavaMappedProperty<?> property = createProperty(name, element);
+
+        // add databinding available as annotations, as extensions
+        DataType propertyDataBinding = field.getAnnotation(DataType.class);
+        if (propertyDataBinding != null) {
+            property.getExtensions().put("databinding", propertyDataBinding.name());
+        }
+
+        initProperty(property, annotation, context);
+        properties.put(name, property);
+    }
+
+    public void visitConstructorParameter(Parameter parameter,
+                                          PojoComponentType<JavaMappedService, JavaMappedReference, JavaMappedProperty<?>> type,
+                                          DeploymentContext context) throws ProcessingException {
+
+        Map<String, JavaMappedProperty<?>> properties = type.getProperties();
+        A annotation = parameter.getAnnotation(annotationClass);
+        if (annotation != null) {
+            String name = getName(annotation);
+            if (name == null) {
+                name = parameter.getType().getName();
+            }
+            if (!"".equals(name) && !"".equals(parameter.getName()) && !name.equals(parameter.getName())) {
+                throw new InvalidConstructorException("Mismatched property name: " + parameter);
+            }
+            if ("".equals(name) && "".equals(parameter.getName())) {
+                throw new InvalidPropertyException("Missing property name: " + parameter);
+            }
+            if ("".equals(name)) {
+                name = parameter.getName();
+            }
+
+            if (properties.containsKey(name)) {
+                throw new DuplicatePropertyException("Duplication property: " + name);
+            }
+            parameter.setName(name);
+            JavaMappedProperty<?> property = createProperty(name, parameter);
+            initProperty(property, annotation, context);
+            properties.put(name, property);
+        }
+    }
+
+    protected abstract String getName(A annotation);
+
+    protected <T> void initProperty(JavaMappedProperty<T> property, A annotation, DeploymentContext context)
+        throws ProcessingException {
+    }
+
+    @SuppressWarnings("unchecked")
+    protected <T> JavaMappedProperty<T> createProperty(String name, JavaElement element) throws ProcessingException {
+
+        Class<?> baseType = getBaseType(element.getType(), element.getGenericType());
+        JavaMappedProperty<T> property = new JavaMappedProperty<T>(name, null, (Class<T>)baseType, (Member)element
+            .getAnchor());
+        Class<?> javaType = element.getType();
+        if (javaType.isArray() || Collection.class.isAssignableFrom(javaType)) {
+            property.setMany(true);
+        }
+        return property;
+
+    }
+
+}

Propchange: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/processor/AbstractPropertyProcessor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/processor/AbstractPropertyProcessor.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/processor/ConstructorProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/processor/ConstructorProcessor.java?view=diff&rev=523381&r1=523380&r2=523381
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/processor/ConstructorProcessor.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/processor/ConstructorProcessor.java Wed Mar 28 09:03:01 2007
@@ -18,35 +18,35 @@
  */
 package org.apache.tuscany.core.implementation.processor;
 
-import java.lang.annotation.Annotation;
 import java.lang.reflect.Constructor;
+import java.util.ArrayList;
 import java.util.List;
 
-import org.osoa.sca.annotations.Reference;
-
 import org.apache.tuscany.spi.deployer.DeploymentContext;
 import org.apache.tuscany.spi.implementation.java.ConstructorDefinition;
 import org.apache.tuscany.spi.implementation.java.ImplementationProcessorExtension;
-import org.apache.tuscany.spi.implementation.java.ImplementationProcessorService;
 import org.apache.tuscany.spi.implementation.java.JavaMappedProperty;
 import org.apache.tuscany.spi.implementation.java.JavaMappedReference;
 import org.apache.tuscany.spi.implementation.java.JavaMappedService;
+import org.apache.tuscany.spi.implementation.java.Parameter;
 import org.apache.tuscany.spi.implementation.java.PojoComponentType;
 import org.apache.tuscany.spi.implementation.java.ProcessingException;
 
-
 /**
- * Handles processing of a constructor decorated with {@link org.osoa.sca.annotations.Constructor}
- *
+ * Handles processing of a constructor decorated with
+ * {@link org.osoa.sca.annotations.Constructor}
+ * 
  * @version $Rev$ $Date$
  */
 @SuppressWarnings("unchecked")
 public class ConstructorProcessor extends ImplementationProcessorExtension {
+    // private List<ImplementationProcessorExtension> paramProcessors = new
+    // ArrayList<ImplementationProcessorExtension>();
 
-    private ImplementationProcessorService service;
-
-    public ConstructorProcessor(@Reference ImplementationProcessorService service) {
-        this.service = service;
+    public ConstructorProcessor() {
+        // paramProcessors.add(new ReferenceProcessor());
+        // paramProcessors.add(new PropertyProcessor());
+        // paramProcessors.add(new ResourceProcessor());
     }
 
     public <T> void visitClass(Class<T> clazz,
@@ -55,58 +55,46 @@
         Constructor[] ctors = clazz.getConstructors();
         boolean found = false;
         for (Constructor constructor : ctors) {
+            ConstructorDefinition<?> definition = new ConstructorDefinition(constructor);
+            type.getConstructors().put(constructor, definition);
             if (constructor.getAnnotation(org.osoa.sca.annotations.Constructor.class) != null) {
                 if (found) {
                     String name = constructor.getDeclaringClass().getName();
                     throw new DuplicateConstructorException("Multiple constructors marked with @Constructor", name);
                 }
                 found = true;
+                type.setConstructorDefinition(definition);
             }
         }
     }
 
     public <T> void visitConstructor(Constructor<T> constructor,
-                                     PojoComponentType<JavaMappedService, JavaMappedReference,
-                                         JavaMappedProperty<?>> type,
+                                     PojoComponentType<JavaMappedService, JavaMappedReference, JavaMappedProperty<?>> type,
                                      DeploymentContext context) throws ProcessingException {
-        org.osoa.sca.annotations.Constructor annotation =
-            constructor.getAnnotation(org.osoa.sca.annotations.Constructor.class);
+        org.osoa.sca.annotations.Constructor annotation = constructor
+            .getAnnotation(org.osoa.sca.annotations.Constructor.class);
         if (annotation == null) {
             return;
         }
         ConstructorDefinition<?> definition = type.getConstructorDefinition();
-        if (definition != null && !definition.getConstructor().equals(constructor)) {
-            String name = constructor.getDeclaringClass().getName();
-            throw new DuplicateConstructorException("Multiple constructor definitions found", name);
-        } else if (definition == null) {
+        if (definition == null) {
             definition = new ConstructorDefinition(constructor);
+            type.setConstructorDefinition(definition);
         }
-        Class<?>[] params = constructor.getParameterTypes();
-        String[] names = annotation.value();
-        Annotation[][] annotations = constructor.getParameterAnnotations();
-        List<String> injectionNames = definition.getInjectionNames();
-        for (int i = 0; i < params.length; i++) {
-            Class<?> param = params[i];
-            Annotation[] paramAnnotations = annotations[i];
-            try {
-                if (!service.processParam(param,
-                    constructor.getGenericParameterTypes()[i],
-                    paramAnnotations,
-                    names,
-                    i,
-                    type,
-                    injectionNames)) {
-                    String name = (i < names.length) ? names[i] : "";
-                    service.addName(injectionNames, i, name);
-                }
-            } catch (ProcessingException e) {
-                e.setMember(constructor);
-                throw e;
-            }
+        Parameter[] parameters = definition.getParameters();
+        String[] value = annotation.value();
+        boolean isDefault = value.length == 0 || (value.length == 1 && "".equals(value[0]));
+        if (!isDefault && value.length != parameters.length) {
+            throw new InvalidConstructorException("Nubmer of names in @Constructor doesn't match the actual parameters");
         }
-        if (names.length != 0 && names[0].length() != 0 && names.length != params.length) {
-            throw new InvalidConstructorException("Names in @Constructor do not match number of parameters");
+        for (int i = 0; i < parameters.length; i++) {
+            parameters[i].setName(i < value.length ? value[i] : "");
         }
         type.setConstructorDefinition(definition);
+        // for (ImplementationProcessorExtension processor : paramProcessors) {
+        // processor.setInterfaceProcessorRegistry(interfaceProcessorRegistry);
+        // processor.setRegistry(registry);
+        // processor.visitConstructor(constructor, type, context);
+        // }
     }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org