-
CSR
-
Resolution: Approved
-
P4
-
None
-
source
-
minimal
-
Changes to preview APIs engender minimal compatibility risk.
-
Java API
-
SE
Summary
Move the maxLocals
and maxStack
accessors from CodeModel
to CodeAttribute
.
Problem
Code
attribute has encoded max locals and stack information, but this is not helpful for in-transform code models that implement CodeModel
; computing these information is costly, and no transformation depends on these APIs.
Solution
Move these 2 APIs to CodeAttribute
.
If transformations wish to access the max stack and locals information, they can create custom transformations in a chain to scan the instructions to detect the max locals, or use CodeStackTracker
to detect the max stacks.
Finally, if these APIs are found necessary to CodeModel
later, they can be added back, which would be a source and binary compatible addition.
Specification
diff --git a/src/java.base/share/classes/java/lang/classfile/CodeModel.java b/src/java.base/share/classes/java/lang/classfile/CodeModel.java
index 45488561c1a..ba816f20805 100644
--- a/src/java.base/share/classes/java/lang/classfile/CodeModel.java
+++ b/src/java.base/share/classes/java/lang/classfile/CodeModel.java
@@ -43,17 +43,7 @@
@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API)
public sealed interface CodeModel
extends CompoundElement<CodeElement>, AttributedElement, MethodElement
- permits CodeAttribute, BufferedCodeBuilder.Model, CodeImpl {
-
- /**
- * {@return the maximum size of the local variable table}
- */
- int maxLocals();
-
- /**
- * {@return the maximum size of the operand stack}
- */
- int maxStack();
+ permits CodeAttribute, BufferedCodeBuilder.Model {
/**
* {@return the enclosing method, if known}
diff --git a/src/java.base/share/classes/java/lang/classfile/attribute/CodeAttribute.java b/src/java.base/share/classes/java/lang/classfile/attribute/CodeAttribute.java
index 02cbcee810f..7a4f5886580 100644
--- a/src/java.base/share/classes/java/lang/classfile/attribute/CodeAttribute.java
+++ b/src/java.base/share/classes/java/lang/classfile/attribute/CodeAttribute.java
@@ -47,6 +47,16 @@
public sealed interface CodeAttribute extends Attribute<CodeAttribute>, CodeModel
permits BoundAttribute.BoundCodeAttribute {
+ /**
+ * {@return the maximum size of the local variable table}
+ */
+ int maxLocals();
+
+ /**
+ * {@return the maximum size of the operand stack}
+ */
+ int maxStack();
+
/**
* {@return The length of the code array in bytes}
*/
- csr of
-
JDK-8337225 Demote maxStack and maxLocals from CodeModel to CodeAttribute
- Resolved
- relates to
-
JDK-8334712 JEP 484: Class-File API
- Completed