/*
* Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved.
* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*/
package java.lang.invoke;
import static java.lang.invoke.
LambdaForm.
BasicType.*;
import static java.lang.invoke.
MethodHandleStatics.*;
/**
* A method handle whose behavior is determined only by its LambdaForm.
* @author jrose
*/
final class
SimpleMethodHandle extends
BoundMethodHandle {
private
SimpleMethodHandle(
MethodType type,
LambdaForm form) {
super(
type,
form);
}
/*non-public*/ static
BoundMethodHandle make(
MethodType type,
LambdaForm form) {
return new
SimpleMethodHandle(
type,
form);
}
/*non-public*/ static final
SpeciesData SPECIES_DATA =
SpeciesData.
EMPTY;
/*non-public*/ public
SpeciesData speciesData() {
return
SPECIES_DATA;
}
@
Override
/*non-public*/
BoundMethodHandle copyWith(
MethodType mt,
LambdaForm lf) {
return
make(
mt,
lf);
}
@
Override
String internalProperties() {
return "\n& Class="+
getClass().
getSimpleName();
}
@
Override
/*non-public*/ public int
fieldCount() {
return 0;
}
@
Override
/*non-public*/ final
BoundMethodHandle copyWithExtendL(
MethodType mt,
LambdaForm lf,
Object narg) {
return
BoundMethodHandle.
bindSingle(
mt,
lf,
narg); // Use known fast path.
}
@
Override
/*non-public*/ final
BoundMethodHandle copyWithExtendI(
MethodType mt,
LambdaForm lf, int
narg) {
try {
return (
BoundMethodHandle)
SPECIES_DATA.
extendWith(
I_TYPE).
constructor().
invokeBasic(
mt,
lf,
narg);
} catch (
Throwable ex) {
throw
uncaughtException(
ex);
}
}
@
Override
/*non-public*/ final
BoundMethodHandle copyWithExtendJ(
MethodType mt,
LambdaForm lf, long
narg) {
try {
return (
BoundMethodHandle)
SPECIES_DATA.
extendWith(
J_TYPE).
constructor().
invokeBasic(
mt,
lf,
narg);
} catch (
Throwable ex) {
throw
uncaughtException(
ex);
}
}
@
Override
/*non-public*/ final
BoundMethodHandle copyWithExtendF(
MethodType mt,
LambdaForm lf, float
narg) {
try {
return (
BoundMethodHandle)
SPECIES_DATA.
extendWith(
F_TYPE).
constructor().
invokeBasic(
mt,
lf,
narg);
} catch (
Throwable ex) {
throw
uncaughtException(
ex);
}
}
@
Override
/*non-public*/ final
BoundMethodHandle copyWithExtendD(
MethodType mt,
LambdaForm lf, double
narg) {
try {
return (
BoundMethodHandle)
SPECIES_DATA.
extendWith(
D_TYPE).
constructor().
invokeBasic(
mt,
lf,
narg);
} catch (
Throwable ex) {
throw
uncaughtException(
ex);
}
}
}