diff -r c7841bbe1227 -r 7ae6c0fd479b src/share/classes/com/sun/tools/javac/code/Type.java --- a/src/share/classes/com/sun/tools/javac/code/Type.java Thu Apr 28 08:46:06 2011 -0700 +++ b/src/share/classes/com/sun/tools/javac/code/Type.java Thu Apr 28 15:05:36 2011 -0700 @@ -25,6 +25,8 @@ package com.sun.tools.javac.code; +import java.util.Collections; + import com.sun.tools.javac.util.*; import com.sun.tools.javac.code.Symbol.*; @@ -741,6 +743,38 @@ } } + // a clone of a ClassType that knows about the alternatives of a union type. + public static class UnionClassType extends ClassType implements UnionType { + final List alternatives_field; + + public UnionClassType(ClassType ct, List alternatives) { + super(ct.outer_field, ct.typarams_field, ct.tsym); + allparams_field = ct.allparams_field; + supertype_field = ct.supertype_field; + interfaces_field = ct.interfaces_field; + all_interfaces_field = ct.interfaces_field; + alternatives_field = alternatives; + } + + public Type getLub() { + return tsym.type; + } + + public java.util.List getAlternatives() { + return Collections.unmodifiableList(alternatives_field); + } + + @Override + public TypeKind getKind() { + return TypeKind.UNION; + } + + @Override + public R accept(TypeVisitor v, P p) { + return v.visitUnion(this, p); + } + } + public static class ArrayType extends Type implements javax.lang.model.type.ArrayType {