blob: 43729252ec3311fedbc66399a2d52df5ee81f3dd [file]
/*
* 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.internal.codegen.xprocessing;
import static androidx.room.compiler.processing.compat.XConverters.toJavac;
import androidx.room.compiler.processing.XAnnotation;
import com.google.auto.common.AnnotationMirrors;
import com.google.common.base.Equivalence;
import com.squareup.javapoet.AnnotationSpec;
import com.squareup.javapoet.ClassName;
import java.util.Arrays;
// TODO(bcorso): Consider moving these methods into XProcessing library.
/** A utility class for {@link XAnnotation} helper methods. */
public final class XAnnotations {
/** Returns the {@link AnnotationSpec} for the given annotation */
public static AnnotationSpec getAnnotationSpec(XAnnotation annotation) {
return AnnotationSpec.get(toJavac(annotation));
}
/** Returns the string representation of the given annotation. */
public static String toString(XAnnotation annotation) {
return AnnotationMirrors.toString(toJavac(annotation));
}
/** Returns the class name of the given annotation */
public static ClassName getClassName(XAnnotation annotation) {
return annotation.getType().getTypeElement().getClassName();
}
private static final Equivalence<XAnnotation> XANNOTATION_EQUIVALENCE =
new Equivalence<XAnnotation>() {
@Override
protected boolean doEquivalent(XAnnotation left, XAnnotation right) {
return XTypes.equivalence().equivalent(left.getType(), right.getType())
&& XAnnotationValues.equivalence()
.pairwise()
.equivalent(left.getAnnotationValues(), right.getAnnotationValues());
}
@Override
protected int doHash(XAnnotation annotation) {
return Arrays.hashCode(
new int[] {
XTypes.equivalence().hash(annotation.getType()),
XAnnotationValues.equivalence().pairwise().hash(annotation.getAnnotationValues())
});
}
@Override
public String toString() {
return "XAnnotation.equivalence()";
}
};
/**
* Returns an {@link Equivalence} for {@link XAnnotation}.
*
* <p>This equivalence takes into account the order of annotation values.
*/
public static Equivalence<XAnnotation> equivalence() {
return XANNOTATION_EQUIVALENCE;
}
private XAnnotations() {}
}