/* Copyright (C) 2009 Versant Inc. http://www.db4o.com */ package sharpen.core.internal; import org.eclipse.jdt.core.dom.*; import sharpen.core.*; import sharpen.core.Bindings; import sharpen.core.framework.*; import static sharpen.core.framework.Environments.*; public class AnnotationsImpl implements Annotations { private final CompilationUnit _ast = my(CompilationUnit.class); private final Bindings _bindings = my(Bindings.class); public TagElement effectiveAnnotationFor(MethodDeclaration node, String annotation) { TagElement eventTag = javadocTagFor(node, annotation); if (null != eventTag) return eventTag; MethodDeclaration originalMethod = findOriginalMethodDeclaration(node); if (null == originalMethod) return null; return javadocTagFor(originalMethod, annotation); } private TagElement javadocTagFor(MethodDeclaration method, String annotation) { return JavadocUtility.getJavadocTag(method, annotation); } private MethodDeclaration findOriginalMethodDeclaration(MethodDeclaration node) { return findOriginalMethodDeclaration(node.resolveBinding()); } private MethodDeclaration findOriginalMethodDeclaration(IMethodBinding binding) { IMethodBinding definition = BindingUtils.findMethodDefininition(binding, _ast.getAST()); if (null == definition) return null; return _bindings.findDeclaringNode(definition); } public String annotatedPropertyName(MethodDeclaration node) { final TagElement propertyTag = effectiveAnnotationFor(node, SharpenAnnotations.SHARPEN_PROPERTY); if (JavadocUtility.hasSingleTextFragment(propertyTag)) { return JavadocUtility.singleTextFragmentFrom(propertyTag); } return null; } public String annotatedRenaming(BodyDeclaration node) { TagElement renameTag = JavadocUtility.getJavadocTag(node, SharpenAnnotations.SHARPEN_RENAME); if (null == renameTag) return null; return JavadocUtility.singleTextFragmentFrom(renameTag); } }