/* * Copyright 2021 Google LLC * * 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 tests; import com.google.auto.factory.AutoFactory; import com.google.auto.factory.Provided; class Generics { interface Bar {} interface Foo {} interface FooFactory { Foo create(); } // The generated FooImplFactory should also have an type parameter, so we can // have FooImplFactory implements FooFactory. @AutoFactory(implementing = FooFactory.class) static final class FooImpl implements Foo { FooImpl() {} } // The generated ExplicitFooImplFactory should have an type parameter, which // serves both for FooFactory and for Provider in the constructor. @AutoFactory(implementing = FooFactory.class) static final class ExplicitFooImpl implements Foo { ExplicitFooImpl(@Provided M unused) {} } abstract static class FooFactoryClass { abstract Foo create(); } @AutoFactory(extending = FooFactoryClass.class) static final class FooImplWithClass implements Foo {} }