- changed status to resolved
Broken bytecode when iterating over String array via polymorphic data type
Issue #278
resolved
ExtendJ 8.1.0-27-gcd7effa Java SE 5
The following program is not executable when compiled with ExtendJ:
// Test using an enhanced-for loop to iterate elements of an // array stored in a polymorphic container type. // .result: EXEC_PASS public class Test { public static void main(String[] args) { System.out.println(join( new Container<String[]>( new String[] { "x", " marks", " the spot" }))); } static String join(Container<String[]> values) { StringBuilder message = new StringBuilder(); for (String part : values.get()) { message.append(part); } return message.toString(); } } class Container<T> { private final T value; public Container(T value) { this.value = value; } T get() { return value; } }
Expected result: the program should be runnable and give the output x marks the spot
.
Actual result: the program fails to run with this error:
[junit] [FAIL] runTest[run/generics/container_06](tests.extendj.TestJava7) [junit] Error output files differ expected:<[]> but was:<[Exception in thread "main" java.lang.IncompatibleClassChangeError: Class [Ljava.lang.String; does not implement the requested interface java.lang.Iterable
Comments (1)
-
reporter - Log in to comment
Fix enhanced-for code generation issue
Array types could incorrectly be treated as non-array types due to type erasure handling in enhanced-for statement code generation.
fixes
#278(bitbucket)→ <<cset 8af0e3f022bb>>