1 /*
   2  * Copyright 2008-2009 Sun Microsystems, Inc.  All Rights Reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  * 
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Sun designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Sun in the LICENSE file that accompanied this code.
  10  * 
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  * 
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  * 
  21  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  22  * CA 95054 USA or visit www.sun.com if you need additional information or
  23  * have any questions.
  24  */
  25 
  26 package java.dyn;
  27 
  28 /**
  29  * Syntactic marker interface to request javac to emit an {@code invokedynamic} instruction.
  30  * A language compiler might use this interface to express invokedynamic instructions as follows:
  31  * <blockquote><pre>
  32  * Dynamic.greet("hello world", 123);
  33  * // previous line generates invokedynamic "greet" "(Ljava/lang/String;I)Ljava/lang/Object;"
  34  * Dynamic.<void>println(123);
  35  * // previous line generates invokedynamic "println" "(I)V"
  36  * Dynamic.#"long:strange:name"();
  37  * // previous line generates invokedynamic "long:strange:name" "()Ljava/lang/Object;"
  38  * </pre></blockquote>
  39  * <p>
  40  * This type has no particular meaning as a class or interface supertype, and need never be implemented by any class.
  41  * Logically, it denotes a dynamically typed reference to any object.
  42  * As such it may be viewed as logically containing all methods on any of those types.
  43  * <p>
  44  * This type may be used as a marker interface for arguments to method handles, in order
  45  * to distinguish the static type {@code Object} from a dynamically typed reference.
  46  * @author John Rose, JSR 292 EG
  47  */
  48 public interface Dynamic {
  49     // no methods
  50 }