blob: d3d5eafb464429e38f28a9c935b527211a2ed6a5 [file] [log] [blame]
/*
* Copyright 2008 Google Inc.
*
* Licensed 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 com.google.gwt.core.ext.linker;
import java.io.Serializable;
import java.util.Collection;
import java.util.Comparator;
import java.util.Iterator;
import java.util.SortedSet;
import java.util.TreeSet;
/**
* Provides stable ordering and de-duplication of artifacts.
*/
public final class ArtifactSet implements SortedSet<Artifact<?>>, Serializable {
private final TypeIndexedSet<Artifact<?>> delegate =
new TypeIndexedSet<Artifact<?>>(new TreeSet<Artifact<?>>());
public ArtifactSet() {
}
public ArtifactSet(Collection<? extends Artifact<?>> copyFrom) {
addAll(copyFrom);
}
@Override
public boolean add(Artifact<?> o) {
return delegate.add(o);
}
@Override
public boolean addAll(Collection<? extends Artifact<?>> c) {
return delegate.addAll(c);
}
@Override
public void clear() {
delegate.clear();
}
@Override
public Comparator<? super Artifact<?>> comparator() {
return delegate.comparator();
}
@Override
public boolean contains(Object o) {
return delegate.contains(o);
}
@Override
public boolean containsAll(Collection<?> c) {
return delegate.containsAll(c);
}
@Override
public boolean equals(Object o) {
return delegate.equals(o);
}
/**
* Find all Artifacts assignable to some base type. The returned value will be
* a snapshot of the values in the ArtifactSet. An example of how this could
* be used:
*
* <pre>
* for (EmittedArtifact ea : artifactSet.find(EmittedArtifact.class)) {
* ...
* }
* </pre>
*
* @param <T> the desired type of Artifact
* @param artifactType the desired type of Artifact
* @return all Artifacts in the ArtifactSet assignable to the desired type
*/
public <T extends Artifact<? super T>> SortedSet<T> find(Class<T> artifactType) {
return delegate.getTypeIndex().findAssignableTo(artifactType);
}
@Override
public Artifact<?> first() {
return delegate.first();
}
/**
* Prevent further modification of the ArtifactSet. Any attempts to alter
* the ArtifactSet after invoking this method will result in an
* UnsupportedOperationException.
*/
public void freeze() {
delegate.freeze();
}
@Override
public int hashCode() {
return delegate.hashCode();
}
@Override
public SortedSet<Artifact<?>> headSet(Artifact<?> toElement) {
return delegate.headSet(toElement);
}
@Override
public boolean isEmpty() {
return delegate.isEmpty();
}
@Override
public Iterator<Artifact<?>> iterator() {
return delegate.iterator();
}
@Override
public Artifact<?> last() {
return delegate.last();
}
@Override
public boolean remove(Object o) {
return delegate.remove(o);
}
@Override
public boolean removeAll(Collection<?> c) {
return delegate.removeAll(c);
}
/**
* Possibly replace an existing Artifact.
*
* @param artifact the replacement Artifact
* @return <code>true</code> if an equivalent Artifact was already present.
*/
public boolean replace(Artifact<?> artifact) {
boolean toReturn = delegate.remove(artifact);
delegate.add(artifact);
return toReturn;
}
@Override
public boolean retainAll(Collection<?> c) {
return delegate.retainAll(c);
}
@Override
public int size() {
return delegate.size();
}
@Override
public SortedSet<Artifact<?>> subSet(Artifact<?> fromElement,
Artifact<?> toElement) {
return delegate.subSet(fromElement, toElement);
}
@Override
public SortedSet<Artifact<?>> tailSet(Artifact<?> fromElement) {
return delegate.tailSet(fromElement);
}
@Override
public Object[] toArray() {
return delegate.toArray();
}
@Override
public <T> T[] toArray(T[] a) {
return delegate.toArray(a);
}
@Override
public String toString() {
return delegate.toString();
}
}