From 6e6c7a41f7a58d5b9b3854c216cd9f280ca3af42 Mon Sep 17 00:00:00 2001 From: antelder Date: Wed, 11 Nov 2009 11:35:50 +0000 Subject: svn commit: r834808 - /tuscany/java/sca/modules/implementation-java/src/main/java/org/apache/tuscany/sca/implementation/java/introspect/impl/HeuristicPojoProcessor.java git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@834842 13f79535-47bb-0310-9956-ffa450edef68 --- .../introspect/impl/HeuristicPojoProcessor.java | 32 +++++++++++++++++----- 1 file changed, 25 insertions(+), 7 deletions(-) (limited to 'java') diff --git a/java/sca/modules/implementation-java/src/main/java/org/apache/tuscany/sca/implementation/java/introspect/impl/HeuristicPojoProcessor.java b/java/sca/modules/implementation-java/src/main/java/org/apache/tuscany/sca/implementation/java/introspect/impl/HeuristicPojoProcessor.java index 845500941d..fc7c87a624 100644 --- a/java/sca/modules/implementation-java/src/main/java/org/apache/tuscany/sca/implementation/java/introspect/impl/HeuristicPojoProcessor.java +++ b/java/sca/modules/implementation-java/src/main/java/org/apache/tuscany/sca/implementation/java/introspect/impl/HeuristicPojoProcessor.java @@ -260,16 +260,23 @@ public class HeuristicPojoProcessor extends BaseJavaClassVisitor { // Only one constructor, take it constructor = constructors[0]; } else { - // FIXME multiple constructors, none yet done Constructor selected = null; - int sites = type.getPropertyMembers().size() + type.getReferenceMembers().size(); for (Constructor ctor : constructors) { - if (ctor.getParameterTypes().length == 0) { + if (allArgsAnnotated(ctor)) { selected = ctor; + for (Constructor ctor2 : constructors) { + if (selected != ctor2 && allArgsAnnotated(ctor2)) { + throw new InvalidConstructorException("Multiple annotated constructors"); + } + } } - if (ctor.getParameterTypes().length == sites) { - selected = ctor; - break; + } + if (selected == null) { + for (Constructor ctor : constructors) { + if (ctor.getParameterTypes().length == 0) { + selected = ctor; + break; + } } } if (selected == null) { @@ -278,7 +285,6 @@ public class HeuristicPojoProcessor extends BaseJavaClassVisitor { constructor = selected; definition = type.getConstructors().get(selected); type.setConstructor(definition); - // return; } definition = type.getConstructors().get(constructor); type.setConstructor(definition); @@ -320,6 +326,18 @@ public class HeuristicPojoProcessor extends BaseJavaClassVisitor { } } } + + private boolean allArgsAnnotated(Constructor ctor) { + if (ctor.getParameterTypes().length < 1) { + return false; + } + for (Annotation[] as : ctor.getParameterAnnotations()) { + if (as.length < 1) { + return false; + } + } + return true; + } private void calcParamNames(JavaParameterImpl[] parameters, Map props, -- cgit v1.2.3