// 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; /** * Compile order {@code NestedSet} factory. */ final class CompileOrderNestedSetFactory implements NestedSetFactory { @Override public NestedSet onlyDirects(Object[] directs) { return new CompileOnlyDirectsNestedSet<>(directs); } @Override public NestedSet onlyDirects(ImmutableList directs) { return new CompileOrderImmutableListDirectsNestedSet<>(directs); } @Override public NestedSet oneDirectOneTransitive(E direct, NestedSet transitive) { return new CompileOneDirectOneTransitiveNestedSet<>(direct, transitive); } @Override public NestedSet manyDirectsOneTransitive(Object[] direct, NestedSet transitive) { return new CompileManyDirectOneTransitiveNestedSet<>(direct, transitive); } @Override public NestedSet onlyOneTransitive(NestedSet transitive) { return new CompileOnlyOneTransitiveNestedSet<>(transitive); } @Override public NestedSet onlyManyTransitives(NestedSet[] transitives) { return new CompileOnlyTransitivesNestedSet<>(transitives); } @Override public NestedSet oneDirectManyTransitive(Object direct, NestedSet[] transitives) { return new CompileOneDirectManyTransitive<>(direct, transitives); } @Override public NestedSet manyDirectManyTransitive(Object[] directs, NestedSet[] transitives) { return new CompileManyDirectManyTransitive<>(directs, transitives); } @Override public NestedSet oneDirect(E element) { return new CompileSingleDirectNestedSet<>(element); } private static class CompileOnlyDirectsNestedSet extends OnlyDirectsNestedSet { CompileOnlyDirectsNestedSet(Object[] directs) { super(directs); } @Override public Order getOrder() { return Order.COMPILE_ORDER; } } private static class CompileOneDirectOneTransitiveNestedSet extends OneDirectOneTransitiveNestedSet { private CompileOneDirectOneTransitiveNestedSet(E direct, NestedSet transitive) { super(direct, transitive); } @Override public Order getOrder() { return Order.COMPILE_ORDER; } } private static class CompileOneDirectManyTransitive extends OneDirectManyTransitive { private CompileOneDirectManyTransitive(Object direct, NestedSet[] transitive) { super(direct, transitive); } @Override public Order getOrder() { return Order.COMPILE_ORDER; } } private static class CompileManyDirectManyTransitive extends ManyDirectManyTransitive { private CompileManyDirectManyTransitive(Object[] directs, NestedSet[] transitives) { super(directs, transitives); } @Override public Order getOrder() { return Order.COMPILE_ORDER; } } private static class CompileOnlyOneTransitiveNestedSet extends OnlyOneTransitiveNestedSet { private CompileOnlyOneTransitiveNestedSet(NestedSet transitive) { super(transitive); } @Override public Order getOrder() { return Order.COMPILE_ORDER; } } private static class CompileManyDirectOneTransitiveNestedSet extends ManyDirectOneTransitiveNestedSet { private CompileManyDirectOneTransitiveNestedSet(Object[] direct, NestedSet transitive) { super(direct, transitive); } @Override public Order getOrder() { return Order.COMPILE_ORDER; } } private static class CompileOnlyTransitivesNestedSet extends OnlyTransitivesNestedSet { private CompileOnlyTransitivesNestedSet(NestedSet[] transitives) { super(transitives); } @Override public Order getOrder() { return Order.COMPILE_ORDER; } } private static class CompileOrderImmutableListDirectsNestedSet extends ImmutableListDirectsNestedSet { private CompileOrderImmutableListDirectsNestedSet(ImmutableList directs) { super(directs); } @Override public Order getOrder() { return Order.COMPILE_ORDER; } } private static class CompileSingleDirectNestedSet extends SingleDirectNestedSet { private CompileSingleDirectNestedSet(E element) { super(element); } @Override public Order getOrder() { return Order.COMPILE_ORDER; } } }