You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by le...@apache.org on 2003/09/29 23:17:08 UTC

cvs commit: jakarta-commons-sandbox/attributes/unittest/src/test/org/apache/commons/attributes/test AttributesTestCase.java SuperSample.java

leosutic    2003/09/29 14:17:08

  Modified:    attributes/api/src/java/org/apache/commons/attributes
                        Attributes.java CachedRepository.java
                        DefaultCachedRepository.java
               attributes/compiler/src/java/org/apache/commons/attributes/compiler
                        AttributeCompiler.java
               attributes/unittest/src/test/org/apache/commons/attributes/test
                        AttributesTestCase.java SuperSample.java
  Log:
  Added the ability to add attributes to the parameters of a constructor
  (a fairly obvious complement to the ability to add attributes to method
  parameters that was somehow forgotten).
  
  Revision  Changes    Path
  1.5       +31 -0     jakarta-commons-sandbox/attributes/api/src/java/org/apache/commons/attributes/Attributes.java
  
  Index: Attributes.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/attributes/api/src/java/org/apache/commons/attributes/Attributes.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- Attributes.java	20 Sep 2003 15:11:34 -0000	1.4
  +++ Attributes.java	29 Sep 2003 21:17:08 -0000	1.5
  @@ -153,6 +153,13 @@
       }
       
       /**
  +     * Gets all attributes for a parameter of a constructor.
  +     */
  +    public static Collection getParameterAttributes (Constructor constructor, int parameter) {
  +        return getCachedRepository (constructor.getDeclaringClass()).getParameterAttributes (constructor, parameter);
  +    }
  +    
  +    /**
        * Gets all attributes for the return value of a method.
        */
       public static Collection getReturnAttributes (Method method) {
  @@ -230,6 +237,14 @@
       }
       
       /**
  +     * Get all attributes of a given type from a method's parameter. For all objects o in the returned 
  +     * collection, <code>o.getClass() == attributeClass</code>.
  +     */
  +    public static Collection getParameterAttributes (Constructor constructor, int parameter, Class attributeClass) {
  +        return getAttributes (getParameterAttributes (constructor, parameter), attributeClass);
  +    }
  +    
  +    /**
        * Get all attributes of a given type from a method's return value. For all objects o in the returned 
        * collection, <code>o.getClass() == attributeClass</code>.
        */
  @@ -292,6 +307,14 @@
       public static boolean hasParameterAttributeType (Method method, int parameter, Class attributeClass) {
           return hasAttributeType (getParameterAttributes (method, parameter), attributeClass);
       }
  +
  +    /**
  +     * Tests if a constructor's parameter has an attribute of a given type. That is, is there any attribute
  +     * <code>attr</code> such that <code>attr.getClass() == attributeClass</code>?
  +     */
  +    public static boolean hasParameterAttributeType (Constructor constructor, int parameter, Class attributeClass) {
  +        return hasAttributeType (getParameterAttributes (constructor, parameter), attributeClass);
  +    }
       
       /**
        * Tests if a method's return value has an attribute of a given type. That is, is there any attribute
  @@ -347,6 +370,14 @@
        */
       public static boolean hasParameterAttribute (Method method, int parameter, Object attribute) {
           return hasAttribute (getParameterAttributes (method, parameter), attribute);
  +    }
  +    
  +    /**
  +     * Tests if a constructor's parameter has an attribute. That is, is there any attribute
  +     * <code>attr</code> such that <code>attr.equals(attribute)</code>?
  +     */
  +    public static boolean hasParameterAttribute (Constructor constructor, int parameter, Object attribute) {
  +        return hasAttribute (getParameterAttributes (constructor, parameter), attribute);
       }
       
       /**
  
  
  
  1.5       +1 -0      jakarta-commons-sandbox/attributes/api/src/java/org/apache/commons/attributes/CachedRepository.java
  
  Index: CachedRepository.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/attributes/api/src/java/org/apache/commons/attributes/CachedRepository.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- CachedRepository.java	20 Sep 2003 15:11:34 -0000	1.4
  +++ CachedRepository.java	29 Sep 2003 21:17:08 -0000	1.5
  @@ -73,6 +73,7 @@
       public Collection getAttributes (Field f);
       public Collection getAttributes (Method m);
       public Collection getParameterAttributes (Method m, int parameter);
  +    public Collection getParameterAttributes (Constructor c, int parameter);
       public Collection getReturnAttributes (Method m);
       public Collection getAttributes (Constructor c);
   }
  
  
  
  1.5       +20 -2     jakarta-commons-sandbox/attributes/api/src/java/org/apache/commons/attributes/DefaultCachedRepository.java
  
  Index: DefaultCachedRepository.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/attributes/api/src/java/org/apache/commons/attributes/DefaultCachedRepository.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- DefaultCachedRepository.java	20 Sep 2003 15:11:34 -0000	1.4
  +++ DefaultCachedRepository.java	29 Sep 2003 21:17:08 -0000	1.5
  @@ -188,7 +188,17 @@
               String key = Util.getSignature (ctor);
               
               if (repo.getConstructorAttributes ().containsKey (key)) {
  -                this.constructors.put (ctor, Collections.unmodifiableCollection ((Collection) repo.getConstructorAttributes ().get (key)));
  +                List attributeBundle = null;
  +                attributeBundle = (List) repo.getConstructorAttributes ().get (key);
  +                MethodAttributeBundle bundle = new MethodAttributeBundle ();
  +                
  +                bundle.setAttributes ((Collection) attributeBundle.get (0));
  +                // ---- Parameter attributes
  +                int numParameters = ctor.getParameterTypes().length;
  +                for (int k = 0; k < numParameters; k++) {
  +                    bundle.addParameterAttributes ((Collection) attributeBundle.get (k + 1));
  +                }
  +                this.constructors.put (ctor, bundle);
               }
           }        
           
  @@ -341,6 +351,14 @@
           }
       }
       
  +    public Collection getParameterAttributes (Constructor c, int parameter) {
  +        if (constructors.containsKey (c)) {
  +            return ((MethodAttributeBundle) constructors.get (c)).getParameterAttributes (parameter);
  +        } else {
  +            return EMPTY_COLLECTION;
  +        }
  +    }
  +    
       public Collection getParameterAttributes (Method m, int parameter) {
           if (methods.containsKey (m)) {
               return ((MethodAttributeBundle) methods.get (m)).getParameterAttributes (parameter);
  @@ -359,7 +377,7 @@
       
       public Collection getAttributes (Constructor c) {
           if (constructors.containsKey (c)) {
  -            return (Collection) constructors.get (c);
  +            return ((MethodAttributeBundle) constructors.get (c)).getAttributes ();
           } else {
               return EMPTY_COLLECTION;
           }
  
  
  
  1.5       +15 -2     jakarta-commons-sandbox/attributes/compiler/src/java/org/apache/commons/attributes/compiler/AttributeCompiler.java
  
  Index: AttributeCompiler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/attributes/compiler/src/java/org/apache/commons/attributes/compiler/AttributeCompiler.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- AttributeCompiler.java	20 Sep 2003 15:11:34 -0000	1.4
  +++ AttributeCompiler.java	29 Sep 2003 21:17:08 -0000	1.5
  @@ -367,6 +367,7 @@
               
               pw.println ("    private static void initConstructorAttributes () {");
               pw.println ("        java.util.Set attrs = null;");
  +            pw.println ("        java.util.List bundle = null;");
               for (Iterator iter = xClass.getConstructors ().iterator (); iter.hasNext ();) {
                   XConstructor member = (XConstructor) iter.next ();
                   if (member.getDoc ().getTags ().size () > 0) {
  @@ -376,10 +377,22 @@
                       sb.append (")");
                       String key = sb.toString ();
                       
  +                    pw.println ("        bundle = new java.util.ArrayList ();");
                       pw.println ("        attrs = new java.util.HashSet ();");
  -                    addExpressions (member.getDoc ().getTags (), pw, "attrs", sourceFile.getPath ());
  -                    pw.println ("        constructorAttributes.put (\"" + key + "\", attrs);");
  +                    addExpressions (member.getDoc ().getTags (), null, pw, "attrs", sourceFile.getPath ());
  +                    pw.println ("        bundle.add (attrs);");
                       pw.println ("        attrs = null;");
  +                    
  +                    for (Iterator parameters = member.getParameters ().iterator (); parameters.hasNext ();) {
  +                        XParameter parameter = (XParameter) parameters.next ();
  +                        pw.println ("        attrs = new java.util.HashSet ();");
  +                        addExpressions (member.getDoc ().getTags (), parameter.getName (), pw, "attrs", sourceFile.getPath ());
  +                        pw.println ("        bundle.add (attrs);");
  +                        pw.println ("        attrs = null;");
  +                    }
  +                    
  +                    pw.println ("        constructorAttributes.put (\"" + key + "\", bundle);");
  +                    pw.println ("        bundle = null;");
                       pw.println ();
                   }
               }
  
  
  
  1.4       +5 -0      jakarta-commons-sandbox/attributes/unittest/src/test/org/apache/commons/attributes/test/AttributesTestCase.java
  
  Index: AttributesTestCase.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/attributes/unittest/src/test/org/apache/commons/attributes/test/AttributesTestCase.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- AttributesTestCase.java	20 Sep 2003 15:11:34 -0000	1.3
  +++ AttributesTestCase.java	29 Sep 2003 21:17:08 -0000	1.4
  @@ -75,6 +75,11 @@
           assertEquals (1, Attributes.getAttributes (c, Dependency.class).size ());
           assertTrue (Attributes.hasAttributeType (c, Dependency.class));
           assertTrue (Attributes.hasAttribute (c, new Dependency ( SampleService.class, "sample-ctor2" )));
  +        
  +        assertEquals (1, Attributes.getParameterAttributes (c, 1).size ());
  +        assertEquals (1, Attributes.getParameterAttributes (c, 1, ThreadSafe.class).size ());
  +        assertTrue (Attributes.hasParameterAttributeType (c, 1, ThreadSafe.class));
  +        assertTrue (Attributes.hasParameterAttribute (c, 1, new ThreadSafe ()));
       }
       
       public void testClassInheritance () throws Exception {
  
  
  
  1.2       +1 -0      jakarta-commons-sandbox/attributes/unittest/src/test/org/apache/commons/attributes/test/SuperSample.java
  
  Index: SuperSample.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/attributes/unittest/src/test/org/apache/commons/attributes/test/SuperSample.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- SuperSample.java	20 Aug 2003 23:16:16 -0000	1.1
  +++ SuperSample.java	29 Sep 2003 21:17:08 -0000	1.2
  @@ -25,6 +25,7 @@
       
       /**
        * @Dependency ( SampleService.class, "sample-ctor2" )
  +     * @@.array ThreadSafe()
        */
       public SuperSample (String input, String[][] array) {