diff -r ed0c92c81ea4 -r 2e2e6f946208 emul/src/main/java/java/lang/reflect/Method.java --- a/emul/src/main/java/java/lang/reflect/Method.java Wed Dec 05 09:28:31 2012 +0100 +++ b/emul/src/main/java/java/lang/reflect/Method.java Wed Dec 05 10:03:58 2012 +0100 @@ -27,6 +27,7 @@ import java.lang.annotation.Annotation; import org.apidesign.bck2brwsr.core.JavaScriptBody; +import org.apidesign.bck2brwsr.emul.AnnotationImpl; /** * A {@code Method} provides information about, and access to, a single method @@ -535,15 +536,23 @@ return Modifier.isSynthetic(getModifiers()); } + @JavaScriptBody(args = { "self", "ac" }, + body = + "if (self.fld_data.anno) {" + + " return self.fld_data.anno['L' + ac.jvmName + ';'];" + + "} else return null;" + ) + private Object getAnnotationData(Class annotationClass) { + throw new UnsupportedOperationException(); + } + /** * @throws NullPointerException {@inheritDoc} * @since 1.5 */ public T getAnnotation(Class annotationClass) { - if (annotationClass == null) - throw new NullPointerException(); - - throw new UnsupportedOperationException(); + Object data = getAnnotationData(annotationClass); + return data == null ? null : AnnotationImpl.create(annotationClass, data); } /**