/** * Copyright (c) 2012-2016 André Bargull * Alle Rechte vorbehalten / All Rights Reserved. Use is subject to license terms. * * <https://github.com/anba/es6draft> */ package com.github.anba.es6draft.compiler.assembler; import java.lang.invoke.MethodType; /** * Method name descriptor. */ public final class MethodName { public enum Invoke { Interface, Virtual, Special, Static, VirtualInterface, SpecialInterface, StaticInterface } /** * The method invocation type. */ public final MethodName.Invoke invoke; /** * The type descriptor of the declaring class. */ public final Type owner; /** * The method name. */ public final String name; /** * The method type descriptor for the parameters and return value. */ public final MethodTypeDescriptor descriptor; private MethodName(MethodName.Invoke invoke, Type owner, String name, MethodTypeDescriptor descriptor) { this.invoke = invoke; this.owner = owner; this.name = name; this.descriptor = descriptor; } /** * Returns a {@link Handle} object for this method. * * @return a handle for this method */ public Handle toHandle() { return new Handle(this); } /** * Creates a new method name descriptor. * * @param owner * the owner class * @param desc * the method argument and return types * @return the method name descriptor */ public static MethodName findConstructor(Type owner, MethodTypeDescriptor desc) { return new MethodName(Invoke.Special, owner, "<init>", desc); } /** * Creates a new method name descriptor. * * @param owner * the owner class * @param name * the method name * @param desc * the method argument and return types * @return the method name descriptor */ public static MethodName findInterface(Type owner, String name, MethodTypeDescriptor desc) { return new MethodName(Invoke.Interface, owner, name, desc); } /** * Creates a new method name descriptor. * * @param owner * the owner class * @param name * the method name * @param desc * the method argument and return types * @return the method name descriptor */ public static MethodName findSpecial(Type owner, String name, MethodTypeDescriptor desc) { return new MethodName(Invoke.Special, owner, name, desc); } /** * Creates a new method name descriptor. * * @param owner * the owner class * @param name * the method name * @param desc * the method argument and return types * @return the method name descriptor */ public static MethodName findStatic(Type owner, String name, MethodTypeDescriptor desc) { return new MethodName(Invoke.Static, owner, name, desc); } /** * Creates a new method name descriptor. * * @param owner * the owner class * @param name * the method name * @param desc * the method argument and return types * @return the method name descriptor */ public static MethodName findVirtual(Type owner, String name, MethodTypeDescriptor desc) { return new MethodName(Invoke.Virtual, owner, name, desc); } /** * Creates a new method name descriptor. * * @param owner * the owner class * @param methodType * the method argument and return types * @return the method name descriptor */ public static MethodName findConstructor(Class<?> owner, MethodType methodType) { return new MethodName(Invoke.Special, Type.of(owner), "<init>", MethodTypeDescriptor.methodType(methodType)); } /** * Creates a new method name descriptor. * * @param owner * the owner class * @param name * the method name * @param methodType * the method argument and return types * @return the method name descriptor */ public static MethodName findInterface(Class<?> owner, String name, MethodType methodType) { return new MethodName(Invoke.Interface, Type.of(owner), name, MethodTypeDescriptor.methodType(methodType)); } /** * Creates a new method name descriptor. * * @param owner * the owner class * @param name * the method name * @param methodType * the method argument and return types * @return the method name descriptor */ public static MethodName findSpecial(Class<?> owner, String name, MethodType methodType) { return new MethodName(Invoke.Special, Type.of(owner), name, MethodTypeDescriptor.methodType(methodType)); } /** * Creates a new method name descriptor. * * @param owner * the owner class * @param name * the method name * @param methodType * the method argument and return types * @return the method name descriptor */ public static MethodName findStatic(Class<?> owner, String name, MethodType methodType) { return new MethodName(Invoke.Static, Type.of(owner), name, MethodTypeDescriptor.methodType(methodType)); } /** * Creates a new method name descriptor. * * @param owner * the owner class * @param name * the method name * @param methodType * the method argument and return types * @return the method name descriptor */ public static MethodName findVirtual(Class<?> owner, String name, MethodType methodType) { return new MethodName(Invoke.Virtual, Type.of(owner), name, MethodTypeDescriptor.methodType(methodType)); } }