[
https://issues.apache.org/jira/browse/AVRO-3116?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Ismaël Mejía updated AVRO-3116:
-------------------------------
Resolution: Fixed
Status: Resolved (was: Patch Available)
> Avro compiler(s) should produce valid code when using reserved identifiers
> like 'record' in names
> -------------------------------------------------------------------------------------------------
>
> Key: AVRO-3116
> URL: https://issues.apache.org/jira/browse/AVRO-3116
> Project: Apache Avro
> Issue Type: Improvement
> Components: java
> Affects Versions: 1.10.2
> Reporter: Ismaël Mejía
> Assignee: Ryan Skraba
> Priority: Major
> Labels: backwards-incompatible
> Fix For: 1.11.0
>
>
> Java 14 introduced 'record' as a restricted type name and cannot be used for
> type declarations. So Avro should not generate code that uses this in its
> name for example classes based on a schema with name 'record'. It is probably
> a good idea that we reject uses of [Java keywords including reserved
> identifiers|https://en.wikipedia.org/wiki/List_of_Java_keywords].
> This can be reproduced easily in Avro's current codebase running the
> `TestSpecificCompiler` test with JDK 16.
> [https://github.com/apache/avro/blob/bfe1d03d683d67cdb9a984c02c6b1eb75ffe7689/lang/java/compiler/src/test/java/org/apache/avro/compiler/specific/TestSpecificCompiler.java#L201]
> {quote}public class record extends
> org.apache.avro.specific.SpecificRecordBase implements
> org.apache.avro.specific.SpecificRecord {
> ^
> as of release 14, 'record' is a restricted type name and cannot be used for
> type declarations
> [main] ERROR org.apache.avro.compiler.specific.TestSpecificCompiler -
> /tmp/junit6626196665903310578/testInvalidParameterCounts1/sample/record.java:23:
> error: 'record' is not allowed here
> private static final BinaryMessageEncoder<record> ENCODER =
> ^
> [main] ERROR org.apache.avro.compiler.specific.TestSpecificCompiler -
> /tmp/junit6626196665903310578/testInvalidParameterCounts1/sample/record.java:24:
> error: 'record' is not allowed here
> new BinaryMessageEncoder<record>(MODEL$, SCHEMA$);
> ^
> [main] ERROR org.apache.avro.compiler.specific.TestSpecificCompiler -
> /tmp/junit6626196665903310578/testInvalidParameterCounts1/sample/record.java:26:
> error: 'record' is not allowed here
> private static final BinaryMessageDecoder<record> DECODER =
> ^
> [main] ERROR org.apache.avro.compiler.specific.TestSpecificCompiler -
> /tmp/junit6626196665903310578/testInvalidParameterCounts1/sample/record.java:27:
> error: 'record' is not allowed here
> new BinaryMessageDecoder<record>(MODEL$, SCHEMA$);
> ^
> [main] ERROR org.apache.avro.compiler.specific.TestSpecificCompiler -
> /tmp/junit6626196665903310578/testInvalidParameterCounts1/sample/record.java:33:
> error: 'record' is not allowed here
> public static BinaryMessageEncoder<record> getEncoder() {
> ^
> [main] ERROR org.apache.avro.compiler.specific.TestSpecificCompiler -
> /tmp/junit6626196665903310578/testInvalidParameterCounts1/sample/record.java:41:
> error: 'record' is not allowed here
> public static BinaryMessageDecoder<record> getDecoder() {
> ^
> [main] ERROR org.apache.avro.compiler.specific.TestSpecificCompiler -
> /tmp/junit6626196665903310578/testInvalidParameterCounts1/sample/record.java:50:
> error: 'record' is not allowed here
> public static BinaryMessageDecoder<record> createDecoder(SchemaStore
> resolver) {
> ^
> [main] ERROR org.apache.avro.compiler.specific.TestSpecificCompiler -
> /tmp/junit6626196665903310578/testInvalidParameterCounts1/sample/record.java:51:
> error: 'record' is not allowed here
> return new BinaryMessageDecoder<record>(MODEL$, SCHEMA$, resolver);
> {quote}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)