use of com.google.devtools.j2objc.ast.Annotation in project j2objc by google.
the class ElementUtilTest method testIsRuntimeAnnotation.
public void testIsRuntimeAnnotation() throws IOException {
// SuppressWarnings is a source-level annotation.
CompilationUnit unit = translateType("Example", "@SuppressWarnings(\"test\") class Example {}");
AbstractTypeDeclaration decl = unit.getTypes().get(0);
Annotation annotation = decl.getAnnotations().get(0);
assertFalse(ElementUtil.isRuntimeAnnotation(annotation.getAnnotationMirror()));
// Deprecated is a runtime annotation..
unit = translateType("Example", "@Deprecated class Example {}");
decl = unit.getTypes().get(0);
annotation = decl.getAnnotations().get(0);
assertTrue(ElementUtil.isRuntimeAnnotation(annotation.getAnnotationMirror()));
}
use of com.google.devtools.j2objc.ast.Annotation in project j2objc by google.
the class TreeConverter method convertAnnotation.
private TreeNode convertAnnotation(JCTree.JCAnnotation node) {
List<JCTree.JCExpression> args = node.getArguments();
String annotationName = node.getAnnotationType().toString();
boolean isPropertyAnnotation = annotationName.equals(Property.class.getSimpleName()) || annotationName.equals(Property.class.getName());
Annotation newNode;
if (isPropertyAnnotation) {
newNode = new PropertyAnnotation().setAnnotationMirror(node.attribute);
if (!args.isEmpty()) {
for (String attr : ElementUtil.parsePropertyAttribute(node.attribute)) {
((PropertyAnnotation) newNode).addAttribute(attr);
}
}
} else if (args.isEmpty()) {
newNode = new MarkerAnnotation().setAnnotationMirror(node.attribute);
} else if (args.size() == 1) {
JCTree.JCAssign assign = (JCTree.JCAssign) args.get(0);
newNode = new SingleMemberAnnotation().setValue((Expression) convert(assign.rhs));
} else {
NormalAnnotation normalAnn = new NormalAnnotation();
for (JCTree.JCExpression obj : node.getArguments()) {
JCTree.JCAssign assign = (JCTree.JCAssign) obj;
Symbol sym = ((JCTree.JCIdent) assign.lhs).sym;
MemberValuePair memberPair = new MemberValuePair().setName(convertSimpleName(sym, sym.asType(), getPosition(assign.lhs))).setValue((Expression) convert(assign.rhs));
normalAnn.addValue(memberPair);
}
newNode = normalAnn;
}
return newNode.setAnnotationMirror(node.attribute).setTypeName((Name) convert(node.getAnnotationType()));
}
use of com.google.devtools.j2objc.ast.Annotation in project j2objc by google.
the class TypeDeclarationGenerator method hasDeprecated.
private boolean hasDeprecated(List<Annotation> annotations) {
for (Annotation annotation : annotations) {
Name annotationTypeName = annotation.getTypeName();
String expectedTypeName = annotationTypeName.isQualifiedName() ? "java.lang.Deprecated" : "Deprecated";
if (expectedTypeName.equals(annotationTypeName.getFullyQualifiedName())) {
return true;
}
}
return false;
}
use of com.google.devtools.j2objc.ast.Annotation in project j2objc by google.
the class PackageInfoRewriter method run.
private void run() {
PackageDeclaration pkg = unit.getPackage();
List<Annotation> annotations = pkg.getAnnotations();
List<Annotation> runtimeAnnotations = TreeUtil.getRuntimeAnnotationsList(annotations);
String prefix = getPackagePrefix(pkg);
boolean needsReflection = translationUtil.needsReflection(pkg);
// Remove compile time annotations.
annotations.retainAll(runtimeAnnotations);
if ((annotations.isEmpty() && prefix == null) || !needsReflection) {
return;
}
TypeElement typeElement = GeneratedTypeElement.newPackageInfoClass(pkg.getPackageElement(), typeUtil);
TypeDeclaration typeDecl = new TypeDeclaration(typeElement);
TreeUtil.moveList(pkg.getAnnotations(), typeDecl.getAnnotations());
if (prefix != null) {
typeDecl.addBodyDeclaration(createPrefixMethod(prefix, typeElement));
}
unit.addType(0, typeDecl);
}
use of com.google.devtools.j2objc.ast.Annotation in project j2objc by google.
the class InputFilePreprocessor method extractPackagePrefix.
private void extractPackagePrefix(InputFile file, CompilationUnit unit) {
// We should only reach here if it's a package-info.java file.
assert file.getUnitName().endsWith("package-info.java");
List<Annotation> annotations = (List<Annotation>) unit.getPackage().getAnnotations();
for (Annotation annotation : annotations) {
// getFullyQualifiedName() might not actually return a fully qualified name.
String name = annotation.getTypeName().getFullyQualifiedName();
if (name.endsWith("ObjectiveCName")) {
// Per Eclipse docs, binding resolution can be a resource hog.
if (TypeUtil.getQualifiedName(annotation.getAnnotationMirror().getAnnotationType()).equals(ObjectiveCName.class.getCanonicalName())) {
String key = unit.getPackage().getName().getFullyQualifiedName();
String val = (String) ((SingleMemberAnnotation) annotation).getValue().getConstantValue();
options.getPackagePrefixes().addPrefix(key, val);
}
}
}
}
Aggregations