Return-Path: Delivered-To: apmail-felix-commits-archive@www.apache.org Received: (qmail 40258 invoked from network); 6 Feb 2009 15:54:57 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 6 Feb 2009 15:54:57 -0000 Received: (qmail 66646 invoked by uid 500); 6 Feb 2009 15:54:57 -0000 Delivered-To: apmail-felix-commits-archive@felix.apache.org Received: (qmail 66628 invoked by uid 500); 6 Feb 2009 15:54:57 -0000 Mailing-List: contact commits-help@felix.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@felix.apache.org Delivered-To: mailing list commits@felix.apache.org Received: (qmail 66619 invoked by uid 99); 6 Feb 2009 15:54:57 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 06 Feb 2009 07:54:57 -0800 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 06 Feb 2009 15:54:55 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id B79B72388896; Fri, 6 Feb 2009 15:54:34 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r741601 - /felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/ComponentMetadata.java Date: Fri, 06 Feb 2009 15:54:34 -0000 To: commits@felix.apache.org From: fmeschbe@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20090206155434.B79B72388896@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: fmeschbe Date: Fri Feb 6 15:54:34 2009 New Revision: 741601 URL: http://svn.apache.org/viewvc?rev=741601&view=rev Log: Prevent multiple validations (unneeded work) and ensure dependencies may not be added after validation Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/ComponentMetadata.java Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/ComponentMetadata.java URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/ComponentMetadata.java?rev=741601&r1=741600&r2=741601&view=diff ============================================================================== --- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/ComponentMetadata.java (original) +++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/ComponentMetadata.java Fri Feb 6 15:54:34 2009 @@ -21,6 +21,7 @@ import java.util.ArrayList; import java.util.Dictionary; import java.util.Hashtable; +import java.util.HashSet; import java.util.Iterator; import java.util.List; @@ -159,6 +160,9 @@ * @param newReference a new ReferenceMetadata to be added */ public void addDependency(ReferenceMetadata newReference) { + if(m_validated) { + return; + } if(newReference == null) { throw new IllegalArgumentException ("Cannot add a null ReferenceMetadata"); } @@ -267,7 +271,11 @@ */ void validate() { - + // nothing to do if already validated + if (m_validated) { + return; + } + // 112.10 The name of the component is required if ( m_name == null ) { @@ -297,10 +305,18 @@ } // Check that the references are ok + HashSet refs = new HashSet(); Iterator referenceIterator = m_references.iterator(); while ( referenceIterator.hasNext() ) { - ( ( ReferenceMetadata ) referenceIterator.next() ).validate( this ); + ReferenceMetadata refMeta = ( ReferenceMetadata ) referenceIterator.next(); + refMeta.validate( this ); + + // flag duplicates + if ( !refs.add( refMeta.getName() ) ) + { + throw validationFailure( "Detected duplicate reference name: \"" + refMeta.getName() + "\"" ); + } } // verify value of immediate attribute if set