You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avro.apache.org by "Ivan Sopov (JIRA)" <ji...@apache.org> on 2018/01/27 12:04:01 UTC

[jira] [Created] (AVRO-2135) ResolvingGrammarGenerator.LitS2 equals method violates contract

Ivan Sopov created AVRO-2135:
--------------------------------

             Summary: ResolvingGrammarGenerator.LitS2 equals method violates contract
                 Key: AVRO-2135
                 URL: https://issues.apache.org/jira/browse/AVRO-2135
             Project: Avro
          Issue Type: Bug
          Components: java
    Affects Versions: 1.8.2
            Reporter: Ivan Sopov


In comments this class is called "Clever trick", however its equals method does violates the equals contract, as demonstrated by this small program:

{code:java}
package org.apache.avro.io.parsing;

import org.apache.avro.Schema;
import org.apache.avro.Schema.Type;
import org.apache.avro.io.parsing.ResolvingGrammarGenerator.LitS2;
import org.apache.avro.io.parsing.ValidatingGrammarGenerator.LitS;

public class LitSTest {
    public static void main(String[] args) {
        Schema schema = Schema.create(Type.BOOLEAN);
        LitS parent = new ValidatingGrammarGenerator.LitS(schema);
        LitS2 child = new ResolvingGrammarGenerator.LitS2(schema,schema);

        System.out.println(parent.equals(child));
        System.out.println(child.equals(parent));
    }
}{code}

Behavior is dependent on internal non-standardized behavior of the HashMap and may broke with update or switch to other java vendor.

Moreover, without LitS2 there is no sense in LitS class if IdentityHashMap is used.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)