Bug in javac -- generic extension methods
Brian Goetz
brian.goetz at oracle.com
Thu Feb 3 14:38:31 PST 2011
If you clone the tip of
http://hg.openjdk.java.net/lambda/collections
(which is probably identical to http://hg.openjdk.java.net/lambda/lambda
now, if that's easier), and apply the following two patches:
Patch 1: force -source and -target 8 when building jdk
diff -r bbfd69ea9c15 -r 73ca5d37cf1f make/common/shared/Defs-control.gmk
--- a/make/common/shared/Defs-control.gmk Wed Jan 05 10:24:57 2011
+0000
+++ b/make/common/shared/Defs-control.gmk Thu Feb 03 17:01:04 2011
-0500
@@ -89,9 +89,9 @@
dummy := $(shell $(MKDIR) -p $(TEMP_DIR))
# The language version we want for this jdk build
-SOURCE_LANGUAGE_VERSION=7
+SOURCE_LANGUAGE_VERSION=8
# The class version we want for this jdk build
-TARGET_CLASS_VERSION=7
+TARGET_CLASS_VERSION=8
Patch 2: some extension methods on Collection and List (attached,
modified Collection and List, creates SAM types for Predicate, Mapper,
Reducer, and an implementations class SerialEagerCollections.)
When you build the jdk project, all the implementations of List fail due
to the absence of map(), which is the only generic method of the ones
added to Collection/List:
/opt/jdk160/bin/java -XX:-PrintVMOptions -XX:+UnlockDiagnosticVMOptions
-XX:-LogV
MOutput -client -Xmx896m -Xms128m -XX:PermSize=32m -XX:MaxPermSize=160m
-Xbootcla
sspath/p:/home/brian/work/lambda/lambda-libs/build/linux-i586/langtools/dist/boot
strap/lib/javac.jar -jar
/home/brian/work/lambda/lambda-libs/build/linux-i586/lan
gtools/dist/bootstrap/lib/javac.jar -source 8 -target 8 -encoding ascii
-Xbootcla
sspath:/home/brian/work/lambda/lambda-libs/build/linux-i586/classes
-sourcepath /
home/brian/work/lambda/lambda-libs/build/linux-i586/gensrc:../../../src/solaris/c
lasses:../../../src/share/classes -d
/home/brian/work/lambda/lambda-libs/build/li
nux-i586/classes
@/home/brian/work/lambda/lambda-libs/build/linux-i586/tmp/java/j
ava.lang/java/.classes.list.filtered
../../../src/share/classes/java/util/ArrayList.java:102: ArrayList is
not abstrac
t and does not override abstract method <T>map(Mapper<? super E#2,T>) in
List
public class ArrayList<E> extends AbstractList<E>
^
where T,E#1,E#2 are type-variables:
T extends Object declared in method <T>map(Mapper<? super E#1,T>)
E#1 extends Object declared in interface List
E#2 extends Object declared in class ArrayList
../../../src/share/classes/java/util/ArrayList.java:924:
ArrayList.SubList is not
abstract and does not override abstract method <T>map(Mapper<? super
E#2,T>) in
List
private class SubList extends AbstractList<E> implements RandomAccess {
^
where T,E#1,E#2 are type-variables:
T extends Object declared in method <T>map(Mapper<? super E#1,T>)
E#1 extends Object declared in interface List
E#2 extends Object declared in class ArrayList
../../../src/share/classes/java/util/AbstractList.java:613: SubList is
not abstra
ct and does not override abstract method <T>map(Mapper<? super E#2,T>)
in List
class SubList<E> extends AbstractList<E> {
^
where T,E#1,E#2 are type-variables:
T extends Object declared in method <T>map(Mapper<? super E#1,T>)
E#1 extends Object declared in interface List
E#2 extends Object declared in class SubList
../../../src/share/classes/java/util/Arrays.java:2833: ArrayList is not
abstract
and does not override abstract method <T>map(Mapper<? super E#2,T>) in List
private static class ArrayList<E> extends AbstractList<E>
^
where T,E#1,E#2 are type-variables:
T extends Object declared in method <T>map(Mapper<? super E#1,T>)
E#1 extends Object declared in interface List
E#2 extends Object declared in class ArrayList
../../../src/share/classes/java/util/Collections.java:3178: EmptyList is
not abst
ract and does not override abstract method <T>map(Mapper<? super E#2,T>)
in List
private static class EmptyList<E>
^
where T,E#1,E#2 are type-variables:
T extends Object declared in method <T>map(Mapper<? super E#1,T>)
E#1 extends Object declared in interface List
E#2 extends Object declared in class EmptyList
../../../src/share/classes/java/util/Collections.java:3348:
SingletonList is not
abstract and does not override abstract method <T>map(Mapper<? super
E#2,T>) in L
ist
private static class SingletonList<E>
^
where T,E#1,E#2 are type-variables:
T extends Object declared in method <T>map(Mapper<? super E#1,T>)
E#1 extends Object declared in interface List
E#2 extends Object declared in class SingletonList
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: extn-patch
Url: http://mail.openjdk.java.net/pipermail/lambda-dev/attachments/20110203/457eee4d/attachment-0001.ksh
More information about the lambda-dev
mailing list