blob: af0aa80fab0d3320c75715acc60e8374cbeb7848 [file] [log] [blame]
/*
* Copyright 2013-present Facebook, Inc.
*
* 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.facebook.buck.java.abi;
import java.util.Collection;
import java.util.Map;
import java.util.SortedSet;
import java.util.TreeSet;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.AnnotationValue;
import javax.lang.model.element.ExecutableElement;
class Annotations {
public static String printAnnotations(Collection<? extends AnnotationMirror> allAnnotations) {
if (allAnnotations.isEmpty()) {
return "";
}
SortedSet<String> converted = new TreeSet<>();
for (AnnotationMirror annotation : allAnnotations) {
converted.add(convertAnnotation(annotation));
}
return Joiner.on(" ").join(converted) + " ";
}
private static String convertAnnotation(AnnotationMirror mirror) {
final StringBuilder builder = new StringBuilder();
builder.append("@");
builder.append(mirror.getAnnotationType());
if (!mirror.getElementValues().isEmpty()) {
builder.append('(');
SortedSet<String> annotationValues = new TreeSet<>();
for (Map.Entry<? extends ExecutableElement, ? extends AnnotationValue> entry :
mirror.getElementValues().entrySet()) {
AnnotationValue rhs = entry.getValue();
if (rhs != null) {
annotationValues.add(entry.getKey().getSimpleName() + "=" + rhs);
continue;
}
annotationValues.add(entry.getKey().getSimpleName().toString());
}
Joiner.on(", ").appendTo(builder, new TreeSet<>(annotationValues));
builder.append(')');
}
return builder.toString();
}
}