[ 
https://issues.apache.org/jira/browse/CALCITE-6393?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17842488#comment-17842488
 ] 

Sergey Nuyanzin commented on CALCITE-6393:
------------------------------------------

Thanks for the info [~MasseGuillaume]
btw, do you happen to have bytecode check test which I assume you usually use 
and which could be integrated into Calcite gradle as well?

I'm asking since probably I found the root cause for all the issues here.

It seems {{Checkerframework}} generates different bytecode for cases where 
annotations are used in second nested parameterized type.

e.g. here {{@Nullable}} is used for first nested type
{code:java}
  private static final ThreadLocal<@Nullable Map<String, AtomicLong>> 
THREAD_SEQUENCES =
      ThreadLocal.withInitial(HashMap::new);
{code}
everything is ok

However with second nested level like here
{code:java}
  private static final Function1<Object[], Enumerable<@Nullable Object[]>> 
ARRAY_CARTESIAN_PRODUCT =
      lists -> {
        final List<Enumerator<@Nullable Object>> enumerators = new 
ArrayList<>();
        for (Object list : lists) {
          enumerators.add(Linq4j.enumerator((List) list));
        }
        final Enumerator<List<@Nullable Object>> product = 
Linq4j.product(enumerators);
        return new AbstractEnumerable<@Nullable Object[]>() {
          @Override public Enumerator<@Nullable Object[]> enumerator() {
            return Linq4j.transform(product, List::toArray);
          }
        };
      };
{code}
there is an issue.

It looks like this const {{ARRAY_CARTESIAN_PRODUCT}} is not used anywhere and 
private. So I've just removed it and all the errors are disappeared.

at the same side it would be great to have test integrated into build system to 
have it always automatically checked

> Byte code of SqlFunctions is invalid
> ------------------------------------
>
>                 Key: CALCITE-6393
>                 URL: https://issues.apache.org/jira/browse/CALCITE-6393
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: Sergey Nuyanzin
>            Priority: Major
>
> The issue is a result of testing of Apache Calcite 1.37.0 rc 4 in this thread 
> [1]
> There is test project andprocedure provided by [~MasseGuillaume] [2] (see 
> also original thread where this was first discussed [3])
> it shows that since Calcite 1.36.0 it starts failing as 
> {noformat}
>     java.lang.ArrayIndexOutOfBoundsException: Index 65536 out of bounds for 
> length 297
>         at org.objectweb.asm.ClassReader.readLabel(ClassReader.java:2695)
>         at org.objectweb.asm.ClassReader.createLabel(ClassReader.java:2711)
>         at 
> org.objectweb.asm.ClassReader.readTypeAnnotations(ClassReader.java:2777)
>         at org.objectweb.asm.ClassReader.readCode(ClassReader.java:1929)
>         at org.objectweb.asm.ClassReader.readMethod(ClassReader.java:1515)
>         at org.objectweb.asm.ClassReader.accept(ClassReader.java:745)
> {noformat}
> Also  since Calcite 1.27.0 it starts failing as 
> {noformat}
>     java.lang.IllegalArgumentException: Invalid end label (must be visited 
> first)
>         at 
> org.objectweb.asm.util.CheckMethodAdapter.checkLabel(CheckMethodAdapter.java:1453)
>         at 
> org.objectweb.asm.util.CheckMethodAdapter.visitLocalVariableAnnotation(CheckMethodAdapter.java:996)
>         at 
> org.objectweb.asm.MethodVisitor.visitLocalVariableAnnotation(MethodVisitor.java:757)
>         at 
> org.objectweb.asm.commons.MethodRemapper.visitLocalVariableAnnotation(MethodRemapper.java:257)
>         at org.objectweb.asm.ClassReader.readCode(ClassReader.java:2614)
>         at org.objectweb.asm.ClassReader.readMethod(ClassReader.java:1515)
> {noformat}
> [1] https://lists.apache.org/thread/n6cs1l86mt6fc5q8pcxr97czs3p6w65f
> [2] https://github.com/MasseGuillaume/asm-remapper-bug
> [3] https://lists.apache.org/thread/o736wz4qnr4l285bj5gv073cy0qll9t0



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to