8338700: AttributeMapper type parameter should be bounded by Attribute
Reviewed-by: asotona
This commit is contained in:
parent
916f1aa04f
commit
a461369f16
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2022, 2024, 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
|
||||
@ -40,7 +40,7 @@ import jdk.internal.javac.PreviewFeature;
|
||||
* @since 22
|
||||
*/
|
||||
@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API)
|
||||
public interface AttributeMapper<A> {
|
||||
public interface AttributeMapper<A extends Attribute<A>> {
|
||||
|
||||
/**
|
||||
* Attribute stability indicator
|
||||
|
@ -147,7 +147,7 @@
|
||||
* ClassReader, int)} method for mapping from the classfile format
|
||||
* to an attribute instance, and the
|
||||
* {@link java.lang.classfile.AttributeMapper#writeAttribute(java.lang.classfile.BufWriter,
|
||||
* java.lang.Object)} method for mapping back to the classfile format. It also
|
||||
* java.lang.classfile.Attribute)} method for mapping back to the classfile format. It also
|
||||
* contains metadata including the attribute name, the set of classfile entities
|
||||
* where the attribute is applicable, and whether multiple attributes of the
|
||||
* same kind are allowed on a single entity.
|
||||
|
@ -54,7 +54,7 @@ public class AttributeHolder {
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
<A> A get(AttributeMapper<A> am) {
|
||||
<A extends Attribute<A>> A get(AttributeMapper<A> am) {
|
||||
for (Attribute<?> a : attributes)
|
||||
if (a.attributeMapper() == am)
|
||||
return (A)a;
|
||||
|
@ -148,7 +148,7 @@ public abstract sealed class BoundAttribute<T extends Attribute<T>>
|
||||
mapper = customAttributes.apply(name);
|
||||
}
|
||||
if (mapper != null) {
|
||||
filled.add((Attribute<?>) Objects.requireNonNull(mapper.readAttribute(enclosing, reader, p)));
|
||||
filled.add(Objects.requireNonNull(mapper.readAttribute(enclosing, reader, p)));
|
||||
} else {
|
||||
AttributeMapper<UnknownAttribute> fakeMapper = new AttributeMapper<>() {
|
||||
@Override
|
||||
|
@ -224,7 +224,7 @@ public class Util {
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private static <T> void writeAttribute(BufWriterImpl writer, Attribute<?> attr) {
|
||||
private static <T extends Attribute<T>> void writeAttribute(BufWriterImpl writer, Attribute<?> attr) {
|
||||
if (attr instanceof CustomAttribute<?> ca) {
|
||||
var mapper = (AttributeMapper<T>) ca.attributeMapper();
|
||||
mapper.writeAttribute(writer, (T) ca);
|
||||
|
Loading…
x
Reference in New Issue
Block a user