From 7dbab81d3c06efb1225c4d57ad3eb4960fcf5cc6 Mon Sep 17 00:00:00 2001 From: Chen Liang Date: Thu, 16 Mar 2023 12:31:01 +0000 Subject: [PATCH] 8304161: Add TypeKind.from to derive from TypeDescriptor.OfField Reviewed-by: jvernee --- .../classes/jdk/internal/classfile/TypeKind.java | 12 +++++++++++- .../classfile/components/CodeLocalsShifter.java | 2 +- .../classfile/components/CodeStackTracker.java | 4 ++-- .../components/snippet-files/PackageSnippets.java | 2 +- .../classfile/snippet-files/PackageSnippets.java | 2 +- .../jdk/classfile/AdvancedTransformationsTest.java | 2 +- 6 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/java.base/share/classes/jdk/internal/classfile/TypeKind.java b/src/java.base/share/classes/jdk/internal/classfile/TypeKind.java index 39a9b656e16..cc61c840dac 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/TypeKind.java +++ b/src/java.base/share/classes/jdk/internal/classfile/TypeKind.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,8 @@ package jdk.internal.classfile; +import java.lang.invoke.TypeDescriptor; + /** * Describes the types that can be part of a field or method descriptor. */ @@ -132,4 +134,12 @@ public enum TypeKind { default -> throw new IllegalArgumentException("Bad type: " + s); }; } + + /** + * {@return the type kind associated with the specified field descriptor} + * @param descriptor the field descriptor + */ + public static TypeKind from(TypeDescriptor.OfField descriptor) { + return fromDescriptor(descriptor.descriptorString()); + } } diff --git a/src/java.base/share/classes/jdk/internal/classfile/components/CodeLocalsShifter.java b/src/java.base/share/classes/jdk/internal/classfile/components/CodeLocalsShifter.java index b246258c8a4..715b018abe8 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/components/CodeLocalsShifter.java +++ b/src/java.base/share/classes/jdk/internal/classfile/components/CodeLocalsShifter.java @@ -57,7 +57,7 @@ public sealed interface CodeLocalsShifter extends CodeTransform { static CodeLocalsShifter of(AccessFlags methodFlags, MethodTypeDesc methodDescriptor) { int fixed = methodFlags.has(AccessFlag.STATIC) ? 0 : 1; for (var param : methodDescriptor.parameterList()) - fixed += TypeKind.fromDescriptor(param.descriptorString()).slotSize(); + fixed += TypeKind.from(param).slotSize(); return new CodeLocalsShifterImpl(fixed); } diff --git a/src/java.base/share/classes/jdk/internal/classfile/components/CodeStackTracker.java b/src/java.base/share/classes/jdk/internal/classfile/components/CodeStackTracker.java index 646826f3252..296ba636bbf 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/components/CodeStackTracker.java +++ b/src/java.base/share/classes/jdk/internal/classfile/components/CodeStackTracker.java @@ -235,13 +235,13 @@ public sealed interface CodeStackTracker extends CodeTransform { case InvokeDynamicInstruction i -> { var type = i.typeSymbol(); pop(type.parameterCount()); - push(TypeKind.fromDescriptor(type.returnType().descriptorString())); + push(TypeKind.from(type.returnType())); } case InvokeInstruction i -> { var type = i.typeSymbol(); pop(type.parameterCount()); if (i.opcode() != Opcode.INVOKESTATIC) pop(1); - push(TypeKind.fromDescriptor(type.returnType().descriptorString())); + push(TypeKind.from(type.returnType())); } case LoadInstruction i -> push(i.typeKind()); diff --git a/src/java.base/share/classes/jdk/internal/classfile/components/snippet-files/PackageSnippets.java b/src/java.base/share/classes/jdk/internal/classfile/components/snippet-files/PackageSnippets.java index a31ccacd7e2..7ea16a3d9fd 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/components/snippet-files/PackageSnippets.java +++ b/src/java.base/share/classes/jdk/internal/classfile/components/snippet-files/PackageSnippets.java @@ -173,7 +173,7 @@ class PackageSnippets { if (!mm.flags().has(AccessFlag.STATIC)) storeStack.push(StoreInstruction.of(TypeKind.ReferenceType, slot++)); for (var pt : mm.methodTypeSymbol().parameterList()) { - var tk = TypeKind.fromDescriptor(pt.descriptorString()); + var tk = TypeKind.from(pt); storeStack.push(StoreInstruction.of(tk, slot)); slot += tk.slotSize(); } diff --git a/src/java.base/share/classes/jdk/internal/classfile/snippet-files/PackageSnippets.java b/src/java.base/share/classes/jdk/internal/classfile/snippet-files/PackageSnippets.java index b26e9e3b887..1814412556c 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/snippet-files/PackageSnippets.java +++ b/src/java.base/share/classes/jdk/internal/classfile/snippet-files/PackageSnippets.java @@ -267,7 +267,7 @@ class PackageSnippets { if (!mm.flags().has(AccessFlag.STATIC)) storeStack.add(StoreInstruction.of(TypeKind.ReferenceType, slot++)); for (var pt : mm.methodTypeSymbol().parameterList()) { - var tk = TypeKind.fromDescriptor(pt.descriptorString()); + var tk = TypeKind.from(pt); storeStack.addFirst(StoreInstruction.of(tk, slot)); slot += tk.slotSize(); } diff --git a/test/jdk/jdk/classfile/AdvancedTransformationsTest.java b/test/jdk/jdk/classfile/AdvancedTransformationsTest.java index f963a00e80c..931b0825a7f 100644 --- a/test/jdk/jdk/classfile/AdvancedTransformationsTest.java +++ b/test/jdk/jdk/classfile/AdvancedTransformationsTest.java @@ -319,7 +319,7 @@ class AdvancedTransformationsTest { if (!mm.flags().has(AccessFlag.STATIC)) storeStack.push(StoreInstruction.of(TypeKind.ReferenceType, slot++)); for (var pt : mm.methodTypeSymbol().parameterList()) { - var tk = TypeKind.fromDescriptor(pt.descriptorString()); + var tk = TypeKind.from(pt); storeStack.push(StoreInstruction.of(tk, slot)); slot += tk.slotSize(); }