jaroslav@106: /** jaroslav@106: * Back 2 Browser Bytecode Translator jaroslav@106: * Copyright (C) 2012 Jaroslav Tulach jaroslav@106: * jaroslav@106: * This program is free software: you can redistribute it and/or modify jaroslav@106: * it under the terms of the GNU General Public License as published by jaroslav@106: * the Free Software Foundation, version 2 of the License. jaroslav@106: * jaroslav@106: * This program is distributed in the hope that it will be useful, jaroslav@106: * but WITHOUT ANY WARRANTY; without even the implied warranty of jaroslav@106: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the jaroslav@106: * GNU General Public License for more details. jaroslav@106: * jaroslav@106: * You should have received a copy of the GNU General Public License jaroslav@106: * along with this program. Look for COPYING file in the top folder. jaroslav@106: * If not, see http://opensource.org/licenses/GPL-2.0. jaroslav@94: */ jaroslav@94: package org.apidesign.bck2brwsr.core; jaroslav@94: jaroslav@94: import java.lang.annotation.ElementType; jaroslav@94: import java.lang.annotation.Retention; jaroslav@94: import java.lang.annotation.RetentionPolicy; jaroslav@94: import java.lang.annotation.Target; jaroslav@94: jaroslav@793: /** Put this annotation on a method to provide its special implementation jaroslav@793: * in JavaScript. This is a way to define native methods that jaroslav@793: * interact with the surrounding environment. jaroslav@94: * jaroslav@94: * @author Jaroslav Tulach jaroslav@94: */ jaroslav@94: @Retention(RetentionPolicy.CLASS) jaroslav@94: @Target({ ElementType.METHOD, ElementType.CONSTRUCTOR }) jaroslav@94: public @interface JavaScriptBody { jaroslav@793: /** Names of parameters for the method generated method that can jaroslav@793: * be referenced from {@link #body()}. jaroslav@94: * jaroslav@94: * @return array of the names of parameters for the method jaroslav@94: * in JavaScript jaroslav@94: */ jaroslav@94: public String[] args(); jaroslav@94: jaroslav@94: /** The actual body of the method in JavaScript. This string will be jaroslav@94: * put into generated header (ends with '{') and footer (ends with '}'). jaroslav@793: * The body can reference provided arguments. In case of non-static jaroslav@793: * instance method it may reference this. It can also jaroslav@793: * call methods and access fields - if jaroslav@793: * proper mangling jaroslav@793: * is used. Methods that return some value should end with return jaroslav@793: * statement. jaroslav@94: */ jaroslav@94: public String body(); jaroslav@94: }