// Copyright 2014 The Bazel Authors. All rights reserved. // // 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.devtools.build.lib.collect.nestedset; import com.google.common.collect.ImmutableList; /** * NaiveLink order {@code NestedSet} factory. */ final class NaiveLinkOrderNestedSetFactory implements NestedSetFactory { @Override public NestedSet onlyDirects(Object[] directs) { return new NaiveLinkOnlyDirectsNestedSet<>(directs); } @Override public NestedSet onlyDirects(ImmutableList directs) { return new NaiveLinkImmutableListDirectsNestedSet<>(directs); } @Override public NestedSet oneDirectOneTransitive(E direct, NestedSet transitive) { return new NaiveLinkOneDirectOneTransitiveNestedSet<>(direct, transitive); } @Override public NestedSet manyDirectsOneTransitive(Object[] direct, NestedSet transitive) { return new NaiveLinkManyDirectOneTransitiveNestedSet<>(direct, transitive); } @Override public NestedSet onlyOneTransitive(NestedSet transitive) { return new NaiveLinkOnlyOneTransitiveNestedSet<>(transitive); } @Override public NestedSet onlyManyTransitives(NestedSet[] transitives) { return new NaiveLinkOnlyTransitivesNestedSet<>(transitives); } @Override public NestedSet oneDirectManyTransitive(Object direct, NestedSet[] transitives) { return new NaiveLinkOneDirectManyTransitive<>(direct, transitives); } @Override public NestedSet manyDirectManyTransitive(Object[] directs, NestedSet[] transitives) { return new NaiveLinkManyDirectManyTransitive<>(directs, transitives); } @Override public NestedSet oneDirect(final E element) { return new NaiveLinkSingleDirectNestedSet<>(element); } private static class NaiveLinkOnlyDirectsNestedSet extends OnlyDirectsNestedSet { NaiveLinkOnlyDirectsNestedSet(Object[] directs) { super(directs); } @Override public Order getOrder() { return Order.NAIVE_LINK_ORDER; } } private static class NaiveLinkOneDirectOneTransitiveNestedSet extends OneDirectOneTransitiveNestedSet { private NaiveLinkOneDirectOneTransitiveNestedSet(E direct, NestedSet transitive) { super(direct, transitive); } @Override public Order getOrder() { return Order.NAIVE_LINK_ORDER; } } private static class NaiveLinkOneDirectManyTransitive extends OneDirectManyTransitive { private NaiveLinkOneDirectManyTransitive(Object direct, NestedSet[] transitive) { super(direct, transitive); } @Override public Order getOrder() { return Order.NAIVE_LINK_ORDER; } } private static class NaiveLinkManyDirectManyTransitive extends ManyDirectManyTransitive { private NaiveLinkManyDirectManyTransitive(Object[] directs, NestedSet[] transitives) { super(directs, transitives); } @Override public Order getOrder() { return Order.NAIVE_LINK_ORDER; } } private static class NaiveLinkOnlyOneTransitiveNestedSet extends OnlyOneTransitiveNestedSet { private NaiveLinkOnlyOneTransitiveNestedSet(NestedSet transitive) { super(transitive); } @Override public Order getOrder() { return Order.NAIVE_LINK_ORDER; } } private static class NaiveLinkManyDirectOneTransitiveNestedSet extends ManyDirectOneTransitiveNestedSet { private NaiveLinkManyDirectOneTransitiveNestedSet(Object[] direct, NestedSet transitive) { super(direct, transitive); } @Override public Order getOrder() { return Order.NAIVE_LINK_ORDER; } } private static class NaiveLinkOnlyTransitivesNestedSet extends OnlyTransitivesNestedSet { private NaiveLinkOnlyTransitivesNestedSet(NestedSet[] transitives) { super(transitives); } @Override public Order getOrder() { return Order.NAIVE_LINK_ORDER; } } private static class NaiveLinkImmutableListDirectsNestedSet extends ImmutableListDirectsNestedSet { private NaiveLinkImmutableListDirectsNestedSet(ImmutableList directs) { super(directs); } @Override public Order getOrder() { return Order.NAIVE_LINK_ORDER; } } private static class NaiveLinkSingleDirectNestedSet extends SingleDirectNestedSet { private NaiveLinkSingleDirectNestedSet(E element) { super(element); } @Override public Order getOrder() { return Order.NAIVE_LINK_ORDER; } } }