/* * Copyright (C) 2021 The Dagger Authors. * * 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 dagger.hilt.processor.internal; import static dagger.internal.codegen.extension.DaggerStreams.toImmutableSet; import com.google.auto.common.MoreElements; import com.google.common.collect.ImmutableSet; import com.squareup.javapoet.ClassName; import javax.lang.model.element.PackageElement; import javax.lang.model.element.TypeElement; import javax.lang.model.util.Elements; /** Utility class for aggregating metadata. */ public final class AggregatedElements { /** Returns all aggregated elements in the aggregating package after validating them. */ public static ImmutableSet from( String aggregatingPackage, ClassName aggregatingAnnotation, Elements elements) { PackageElement packageElement = elements.getPackageElement(aggregatingPackage); if (packageElement == null) { return ImmutableSet.of(); } ImmutableSet aggregatedElements = packageElement.getEnclosedElements().stream() .map(MoreElements::asType) .collect(toImmutableSet()); ProcessorErrors.checkState( !aggregatedElements.isEmpty(), packageElement, "No dependencies found. Did you remove code in package %s?", packageElement); for (TypeElement aggregatedElement : aggregatedElements) { ProcessorErrors.checkState( Processors.hasAnnotation(aggregatedElement, aggregatingAnnotation), aggregatedElement, "Expected element, %s, to be annotated with @%s, but only found: %s.", aggregatedElement.getSimpleName(), aggregatingAnnotation, aggregatedElement.getAnnotationMirrors()); } return aggregatedElements; } private AggregatedElements() {} }