< prev index next >
src/java.base/share/classes/java/lang/invoke/GenerateJLIClassesHelper.java
Print this page
rev 49208 : 8199471: Enable generation of callSiteForms at link time
Reviewed-by: psandoz
@@ -131,32 +131,48 @@
names.toArray(new String[0]),
forms.toArray(new LambdaForm[0]));
}
static byte[] generateInvokersHolderClassBytes(String className,
- MethodType[] methodTypes) {
+ MethodType[] invokerMethodTypes, MethodType[] callSiteMethodTypes) {
HashSet<MethodType> dedupSet = new HashSet<>();
ArrayList<LambdaForm> forms = new ArrayList<>();
ArrayList<String> names = new ArrayList<>();
int[] types = {
MethodTypeForm.LF_EX_LINKER,
MethodTypeForm.LF_EX_INVOKER,
MethodTypeForm.LF_GEN_LINKER,
MethodTypeForm.LF_GEN_INVOKER
};
- for (int i = 0; i < methodTypes.length; i++) {
+
+ for (int i = 0; i < invokerMethodTypes.length; i++) {
// generate methods representing invokers of the specified type
- if (dedupSet.add(methodTypes[i])) {
+ if (dedupSet.add(invokerMethodTypes[i])) {
for (int type : types) {
- LambdaForm invokerForm = Invokers.invokeHandleForm(methodTypes[i],
+ LambdaForm invokerForm = Invokers.invokeHandleForm(invokerMethodTypes[i],
/*customized*/false, type);
forms.add(invokerForm);
names.add(invokerForm.kind.defaultLambdaName);
}
}
}
+
+ dedupSet = new HashSet<>();
+ for (int i = 0; i < callSiteMethodTypes.length; i++) {
+ // generate methods representing invokers of the specified type
+ if (dedupSet.add(callSiteMethodTypes[i])) {
+ LambdaForm callSiteForm = Invokers.callSiteForm(callSiteMethodTypes[i], true);
+ forms.add(callSiteForm);
+ names.add(callSiteForm.kind.defaultLambdaName);
+
+ LambdaForm methodHandleForm = Invokers.callSiteForm(callSiteMethodTypes[i], false);
+ forms.add(methodHandleForm);
+ names.add(methodHandleForm.kind.defaultLambdaName);
+ }
+ }
+
return generateCodeBytesForLFs(className,
names.toArray(new String[0]),
forms.toArray(new LambdaForm[0]));
}
< prev index next >