Author: bentmann Date: Sat Jun 20 18:56:26 2009 New Revision: 786882 URL: http://svn.apache.org/viewvc?rev=786882&view=rev Log: [MNG-4041] embedder returns stale maven project state Submitted by: Igor Fedorenko
o Committed additional patch with bugfixes including minor modifications: - used LinkedHashSet instead of HashSet/TreeSet - added missing license headers Added: maven/components/trunk/maven-compat/src/test/java/org/apache/maven/artifact/resolver/filter/ (with props) maven/components/trunk/maven-compat/src/test/java/org/apache/maven/artifact/resolver/filter/FilterHashEqualsTest.java (with props) maven/components/trunk/maven-core/src/test/java/org/apache/maven/project/artifact/DefaultMavenMetadataCacheTest.java (with props) Modified: maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/AndArtifactFilter.java maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/ExclusionSetFilter.java maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/IncludesArtifactFilter.java maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/InversionArtifactFilter.java maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/OrArtifactFilter.java maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/ScopeArtifactFilter.java maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/TypeArtifactFilter.java Modified: maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/AndArtifactFilter.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/AndArtifactFilter.java?rev=786882&r1=786881&r2=786882&view=diff ============================================================================== --- maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/AndArtifactFilter.java (original) +++ maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/AndArtifactFilter.java Sat Jun 20 18:56:26 2009 @@ -21,7 +21,9 @@ import java.util.ArrayList; import java.util.Iterator; +import java.util.LinkedHashSet; import java.util.List; +import java.util.Set; import org.apache.maven.artifact.Artifact; @@ -34,7 +36,7 @@ public class AndArtifactFilter implements ArtifactFilter { - private List<ArtifactFilter> filters; + private Set<ArtifactFilter> filters; public AndArtifactFilter() { @@ -42,7 +44,7 @@ public AndArtifactFilter( List<ArtifactFilter> filters ) { - this.filters = filters; + this.filters = new LinkedHashSet<ArtifactFilter>( filters ); } public boolean include( Artifact artifact ) @@ -63,9 +65,40 @@ { if ( filters == null ) { - filters = new ArrayList<ArtifactFilter>(); + filters = new LinkedHashSet<ArtifactFilter>(); } filters.add( artifactFilter ); } + + public List<ArtifactFilter> getFilters() + { + return new ArrayList<ArtifactFilter>( filters ); + } + + @Override + public int hashCode() + { + int hash = 17; + hash = hash * 31 + filters.hashCode(); + return hash; + } + + @Override + public boolean equals( Object obj ) + { + if ( this == obj ) + { + return true; + } + + if ( !( obj instanceof AndArtifactFilter ) ) + { + return false; + } + + AndArtifactFilter other = (AndArtifactFilter) obj; + + return filters.equals( other.filters ); + } } Modified: maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/ExclusionSetFilter.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/ExclusionSetFilter.java?rev=786882&r1=786881&r2=786882&view=diff ============================================================================== --- maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/ExclusionSetFilter.java (original) +++ maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/ExclusionSetFilter.java Sat Jun 20 18:56:26 2009 @@ -20,7 +20,7 @@ */ import java.util.Arrays; -import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.Set; import org.apache.maven.artifact.Artifact; @@ -36,7 +36,7 @@ public ExclusionSetFilter( String[] excludes ) { - this.excludes = new HashSet<String>( Arrays.asList( excludes ) ); + this.excludes = new LinkedHashSet<String>( Arrays.asList( excludes ) ); } public ExclusionSetFilter( Set<String> excludes ) @@ -46,6 +46,32 @@ public boolean include( Artifact artifact ) { - return !excludes.contains(artifact.getArtifactId()); + return !excludes.contains( artifact.getArtifactId() ); + } + + @Override + public int hashCode() + { + int hash = 17; + hash = hash * 31 + excludes.hashCode(); + return hash; + } + + @Override + public boolean equals( Object obj ) + { + if ( this == obj ) + { + return true; + } + + if ( !( obj instanceof ExclusionSetFilter ) ) + { + return false; + } + + ExclusionSetFilter other = (ExclusionSetFilter) obj; + + return excludes.equals( other.excludes ); } } Modified: maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/IncludesArtifactFilter.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/IncludesArtifactFilter.java?rev=786882&r1=786881&r2=786882&view=diff ============================================================================== --- maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/IncludesArtifactFilter.java (original) +++ maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/IncludesArtifactFilter.java Sat Jun 20 18:56:26 2009 @@ -19,8 +19,11 @@ * under the License. */ +import java.util.ArrayList; import java.util.Iterator; +import java.util.LinkedHashSet; import java.util.List; +import java.util.Set; import org.apache.maven.artifact.Artifact; @@ -33,11 +36,11 @@ public class IncludesArtifactFilter implements ArtifactFilter { - private final List<String> patterns; + private final Set<String> patterns; public IncludesArtifactFilter( List<String> patterns ) { - this.patterns = patterns; + this.patterns = new LinkedHashSet<String>( patterns ); } public boolean include( Artifact artifact ) @@ -55,9 +58,37 @@ } return matched; } - + public List<String> getPatterns() { - return patterns; + return new ArrayList<String>( patterns ); + } + + @Override + public int hashCode() + { + int hash = 17; + hash = hash * 31 + patterns.hashCode(); + + return hash; + } + + @Override + public boolean equals( Object obj ) + { + if ( this == obj ) + { + return true; + } + + // make sure IncludesArtifactFilter is not equal ExcludesArtifactFilter! + if ( obj == null || getClass() != obj.getClass() ) + { + return false; + } + + IncludesArtifactFilter other = (IncludesArtifactFilter) obj; + + return patterns.equals( other.patterns ); } } Modified: maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/InversionArtifactFilter.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/InversionArtifactFilter.java?rev=786882&r1=786881&r2=786882&view=diff ============================================================================== --- maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/InversionArtifactFilter.java (original) +++ maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/InversionArtifactFilter.java Sat Jun 20 18:56:26 2009 @@ -35,4 +35,31 @@ { return !toInvert.include( artifact ); } + + @Override + public int hashCode() + { + int hash = 17; + hash = hash * 31 + toInvert.hashCode(); + return hash; + } + + @Override + public boolean equals( Object obj ) + { + if ( this == obj ) + { + return true; + } + + if ( !( obj instanceof InversionArtifactFilter ) ) + { + return false; + } + + InversionArtifactFilter other = (InversionArtifactFilter) obj; + + return toInvert.equals( other.toInvert ); + } + } Modified: maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/OrArtifactFilter.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/OrArtifactFilter.java?rev=786882&r1=786881&r2=786882&view=diff ============================================================================== --- maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/OrArtifactFilter.java (original) +++ maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/OrArtifactFilter.java Sat Jun 20 18:56:26 2009 @@ -19,8 +19,9 @@ * under the License. */ -import java.util.ArrayList; import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.Set; import org.apache.maven.artifact.Artifact; @@ -33,7 +34,7 @@ implements ArtifactFilter { - private Collection<ArtifactFilter> filters; + private Set<ArtifactFilter> filters; public OrArtifactFilter() { @@ -41,7 +42,7 @@ public OrArtifactFilter( Collection<ArtifactFilter> filters ) { - this.filters = filters; + this.filters = new LinkedHashSet<ArtifactFilter>( filters ); } public boolean include( Artifact artifact ) @@ -64,10 +65,36 @@ { if ( filters == null ) { - filters = new ArrayList<ArtifactFilter>(); + filters = new LinkedHashSet<ArtifactFilter>(); } filters.add( artifactFilter ); } + @Override + public int hashCode() + { + int hash = 17; + hash = hash * 31 + filters.hashCode(); + return hash; + } + + @Override + public boolean equals( Object obj ) + { + if ( this == obj ) + { + return true; + } + + if ( !( obj instanceof OrArtifactFilter ) ) + { + return false; + } + + OrArtifactFilter other = (OrArtifactFilter) obj; + + return filters.equals( other.filters ); + } + } Modified: maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/ScopeArtifactFilter.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/ScopeArtifactFilter.java?rev=786882&r1=786881&r2=786882&view=diff ============================================================================== --- maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/ScopeArtifactFilter.java (original) +++ maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/ScopeArtifactFilter.java Sat Jun 20 18:56:26 2009 @@ -120,4 +120,47 @@ { return scope; } + + @Override + public int hashCode() + { + int hash = 17; + hash = hash * 31 + ( compileScope ? 1 : 0 ); + hash = hash * 31 + ( runtimeScope ? 1 : 0 ); + hash = hash * 31 + ( testScope ? 1 : 0 ); + hash = hash * 31 + ( providedScope ? 1 : 0 ); + hash = hash * 31 + ( systemScope ? 1 : 0 ); + + hash = hash * 31 + ( scope != null ? scope.hashCode() : 0); + + return hash; + } + + @Override + public boolean equals( Object obj ) + { + if ( this == obj ) + { + return true; + } + + if ( !( obj instanceof ScopeArtifactFilter ) ) + { + return false; + } + + ScopeArtifactFilter other = (ScopeArtifactFilter) obj; + + return compileScope == other.compileScope + && runtimeScope == other.runtimeScope + && testScope == other.testScope + && providedScope == other.providedScope + && systemScope == other.systemScope + && equals( scope, other.scope ); + } + + private static boolean equals( String str1, String str2 ) + { + return str1 != null ? str1.equals( str2 ) : str2 == null; + } } Modified: maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/TypeArtifactFilter.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/TypeArtifactFilter.java?rev=786882&r1=786881&r2=786882&view=diff ============================================================================== --- maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/TypeArtifactFilter.java (original) +++ maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/TypeArtifactFilter.java Sat Jun 20 18:56:26 2009 @@ -36,4 +36,31 @@ { return type.equals( artifact.getType() ); } + + @Override + public int hashCode() + { + int hash = 17; + hash = hash * 31 + type.hashCode(); + return hash; + } + + @Override + public boolean equals( Object obj ) + { + if ( this == obj ) + { + return true; + } + + if ( !( obj instanceof TypeArtifactFilter ) ) + { + return false; + } + + TypeArtifactFilter other = (TypeArtifactFilter) obj; + + return type.equals( other.type ); + } + } Propchange: maven/components/trunk/maven-compat/src/test/java/org/apache/maven/artifact/resolver/filter/ ------------------------------------------------------------------------------ bugtraq:label = Enter issue ID: Propchange: maven/components/trunk/maven-compat/src/test/java/org/apache/maven/artifact/resolver/filter/ ------------------------------------------------------------------------------ bugtraq:message = Issue id: %BUGID% Propchange: maven/components/trunk/maven-compat/src/test/java/org/apache/maven/artifact/resolver/filter/ ------------------------------------------------------------------------------ bugtraq:number = false Propchange: maven/components/trunk/maven-compat/src/test/java/org/apache/maven/artifact/resolver/filter/ ------------------------------------------------------------------------------ bugtraq:url = http://jira.codehaus.org/browse/%BUGID% Added: maven/components/trunk/maven-compat/src/test/java/org/apache/maven/artifact/resolver/filter/FilterHashEqualsTest.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-compat/src/test/java/org/apache/maven/artifact/resolver/filter/FilterHashEqualsTest.java?rev=786882&view=auto ============================================================================== --- maven/components/trunk/maven-compat/src/test/java/org/apache/maven/artifact/resolver/filter/FilterHashEqualsTest.java (added) +++ maven/components/trunk/maven-compat/src/test/java/org/apache/maven/artifact/resolver/filter/FilterHashEqualsTest.java Sat Jun 20 18:56:26 2009 @@ -0,0 +1,50 @@ +package org.apache.maven.artifact.resolver.filter; + +/* + * 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. + */ + +import java.util.Arrays; +import java.util.List; + +import junit.framework.TestCase; + +/** + * @author Igor Fedorenko + */ +public class FilterHashEqualsTest + extends TestCase +{ + + public void testIncludesExcludesArtifactFilter() + { + List<String> patterns = Arrays.asList( "c", "d", "e" ); + + IncludesArtifactFilter f1 = new IncludesArtifactFilter( patterns ); + + IncludesArtifactFilter f2 = new IncludesArtifactFilter( patterns ); + + assertTrue( f1.equals(f2) ); + assertTrue( f2.equals(f1) ); + assertTrue( f1.hashCode() == f2.hashCode() ); + + IncludesArtifactFilter f3 = new IncludesArtifactFilter( Arrays.asList( "d", "c", "e" ) ); + assertTrue( f1.equals( f3 ) ); + assertTrue( f1.hashCode() == f3.hashCode() ); + } +} Propchange: maven/components/trunk/maven-compat/src/test/java/org/apache/maven/artifact/resolver/filter/FilterHashEqualsTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/components/trunk/maven-compat/src/test/java/org/apache/maven/artifact/resolver/filter/FilterHashEqualsTest.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Added: maven/components/trunk/maven-core/src/test/java/org/apache/maven/project/artifact/DefaultMavenMetadataCacheTest.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/test/java/org/apache/maven/project/artifact/DefaultMavenMetadataCacheTest.java?rev=786882&view=auto ============================================================================== --- maven/components/trunk/maven-core/src/test/java/org/apache/maven/project/artifact/DefaultMavenMetadataCacheTest.java (added) +++ maven/components/trunk/maven-core/src/test/java/org/apache/maven/project/artifact/DefaultMavenMetadataCacheTest.java Sat Jun 20 18:56:26 2009 @@ -0,0 +1,79 @@ +package org.apache.maven.project.artifact; + +/* + * 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. + */ + +import java.util.Arrays; +import java.util.Collections; + +import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.artifact.resolver.filter.ExcludesArtifactFilter; +import org.apache.maven.project.artifact.DefaultMavenMetadataCache.CacheKey; +import org.apache.maven.repository.DelegatingLocalArtifactRepository; +import org.apache.maven.repository.RepositorySystem; +import org.codehaus.plexus.PlexusTestCase; + +/** + * @author Igor Fedorenko + */ +public class DefaultMavenMetadataCacheTest + extends PlexusTestCase +{ + private RepositorySystem repositorySystem; + + protected void setUp() + throws Exception + { + super.setUp(); + repositorySystem = lookup( RepositorySystem.class ); + } + + @Override + protected void tearDown() + throws Exception + { + repositorySystem = null; + super.tearDown(); + } + + public void testCacheKey() + throws Exception + { + Artifact a1 = repositorySystem.createArtifact( "testGroup", "testArtifact", "1.2.3", "jar" ); + ArtifactRepository lr1 = new DelegatingLocalArtifactRepository( repositorySystem.createDefaultLocalRepository() ); + ArtifactRepository rr1 = repositorySystem.createDefaultRemoteRepository(); + a1.setDependencyFilter( new ExcludesArtifactFilter( Arrays.asList( "foo" ) ) ); + + Artifact a2 = repositorySystem.createArtifact( "testGroup", "testArtifact", "1.2.3", "jar" ); + ArtifactRepository lr2 = new DelegatingLocalArtifactRepository( repositorySystem.createDefaultLocalRepository() ); + ArtifactRepository rr2 = repositorySystem.createDefaultRemoteRepository(); + a2.setDependencyFilter( new ExcludesArtifactFilter( Arrays.asList( "foo" ) ) ); + + // sanity checks + assertNotSame( a1, a2 ); + assertNotSame( lr1, lr2 ); + assertNotSame( rr1, rr2 ); + + CacheKey k1 = new CacheKey( a1, lr1, Collections.singletonList( rr1 ) ); + CacheKey k2 = new CacheKey( a2, lr2, Collections.singletonList( rr2 ) ); + + assertEquals(k1.hashCode(), k2.hashCode()); + } +} Propchange: maven/components/trunk/maven-core/src/test/java/org/apache/maven/project/artifact/DefaultMavenMetadataCacheTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/components/trunk/maven-core/src/test/java/org/apache/maven/project/artifact/DefaultMavenMetadataCacheTest.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision