Hans Sjunnesson created THRIFT-2326:
---------------------------------------

             Summary: Enums generated for Java doesn't work for types in maps
                 Key: THRIFT-2326
                 URL: https://issues.apache.org/jira/browse/THRIFT-2326
             Project: Thrift
          Issue Type: Bug
          Components: Java - Compiler
    Affects Versions: 0.9.1
         Environment: Mac OSX
            Reporter: Hans Sjunnesson


I use the following thrift file to illustrate the bug:

{code:title=test.thrift}
enum TestEnum {
  ONE,
  TWO,
  THREE,
  FOUR,
}

const map<TestEnum,string> TestMap = {
  TestEnum.ONE: "one",
  TestEnum.TWO: "two",
  Testenum.THREE: "three",
  TestEnum.FOUR: "four",
}
{code}

I then run {{thift --gen java test.thrift}} and when I compile the classes I 
get the following errors:

{noformat}
testConstants.java:37: illegal start of expression
    TestMap.put(.TestEnum.ONE, "one");
                ^
testConstants.java:37: ';' expected
    TestMap.put(.TestEnum.ONE, "one");
                 ^
testConstants.java:37: illegal start of expression
    TestMap.put(.TestEnum.ONE, "one");
                         ^
testConstants.java:37: <identifier> expected
    TestMap.put(.TestEnum.ONE, "one");
                              ^
testConstants.java:37: illegal start of expression
    TestMap.put(.TestEnum.ONE, "one");
                                    ^
testConstants.java:38: illegal start of expression
    TestMap.put(.TestEnum.TWO, "two");
                ^
testConstants.java:38: ';' expected
    TestMap.put(.TestEnum.TWO, "two");
                 ^
testConstants.java:38: illegal start of expression
    TestMap.put(.TestEnum.TWO, "two");
                         ^
testConstants.java:38: <identifier> expected
    TestMap.put(.TestEnum.TWO, "two");
                              ^
testConstants.java:38: illegal start of expression
    TestMap.put(.TestEnum.TWO, "two");
                                    ^
testConstants.java:39: illegal start of expression
    TestMap.put(.Testenum.THREE, "three");
                ^
testConstants.java:39: ';' expected
    TestMap.put(.Testenum.THREE, "three");
                 ^
testConstants.java:39: illegal start of expression
    TestMap.put(.Testenum.THREE, "three");
                         ^
testConstants.java:39: <identifier> expected
    TestMap.put(.Testenum.THREE, "three");
                                ^
testConstants.java:39: illegal start of expression
    TestMap.put(.Testenum.THREE, "three");
                                        ^
testConstants.java:40: illegal start of expression
    TestMap.put(.TestEnum.FOUR, "four");
                ^
testConstants.java:40: ';' expected
    TestMap.put(.TestEnum.FOUR, "four");
                 ^
testConstants.java:40: illegal start of expression
    TestMap.put(.TestEnum.FOUR, "four");
                         ^
testConstants.java:40: <identifier> expected
    TestMap.put(.TestEnum.FOUR, "four");
                               ^
testConstants.java:40: illegal start of expression
    TestMap.put(.TestEnum.FOUR, "four");
                                      ^
{noformat}

The offending piece of code is {{testConstants.java}} which looks like this:

{code:title=testConstants.java|borderStyle=solid}
/**
 * Autogenerated by Thrift Compiler (0.9.1)
 *
 * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
 *  @generated
 */
import org.apache.thrift.scheme.IScheme;
import org.apache.thrift.scheme.SchemeFactory;
import org.apache.thrift.scheme.StandardScheme;

import org.apache.thrift.scheme.TupleScheme;
import org.apache.thrift.protocol.TTupleProtocol;
import org.apache.thrift.protocol.TProtocolException;
import org.apache.thrift.EncodingUtils;
import org.apache.thrift.TException;
import org.apache.thrift.async.AsyncMethodCallback;
import org.apache.thrift.server.AbstractNonblockingServer.*;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
import java.util.EnumMap;
import java.util.Set;
import java.util.HashSet;
import java.util.EnumSet;
import java.util.Collections;
import java.util.BitSet;
import java.nio.ByteBuffer;
import java.util.Arrays;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class testConstants {

  public static final Map<TestEnum,String> TestMap = new 
HashMap<TestEnum,String>();
  static {
    TestMap.put(.TestEnum.ONE, "one");
    TestMap.put(.TestEnum.TWO, "two");
    TestMap.put(.Testenum.THREE, "three");
    TestMap.put(.TestEnum.FOUR, "four");
  }

}
{code}




--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

Reply via email to