1.1 --- a/src/share/classes/com/sun/tools/javac/code/Type.java Thu Apr 28 08:46:06 2011 -0700 1.2 +++ b/src/share/classes/com/sun/tools/javac/code/Type.java Thu Apr 28 15:05:36 2011 -0700 1.3 @@ -25,6 +25,8 @@ 1.4 1.5 package com.sun.tools.javac.code; 1.6 1.7 +import java.util.Collections; 1.8 + 1.9 import com.sun.tools.javac.util.*; 1.10 import com.sun.tools.javac.code.Symbol.*; 1.11 1.12 @@ -741,6 +743,38 @@ 1.13 } 1.14 } 1.15 1.16 + // a clone of a ClassType that knows about the alternatives of a union type. 1.17 + public static class UnionClassType extends ClassType implements UnionType { 1.18 + final List<? extends Type> alternatives_field; 1.19 + 1.20 + public UnionClassType(ClassType ct, List<? extends Type> alternatives) { 1.21 + super(ct.outer_field, ct.typarams_field, ct.tsym); 1.22 + allparams_field = ct.allparams_field; 1.23 + supertype_field = ct.supertype_field; 1.24 + interfaces_field = ct.interfaces_field; 1.25 + all_interfaces_field = ct.interfaces_field; 1.26 + alternatives_field = alternatives; 1.27 + } 1.28 + 1.29 + public Type getLub() { 1.30 + return tsym.type; 1.31 + } 1.32 + 1.33 + public java.util.List<? extends TypeMirror> getAlternatives() { 1.34 + return Collections.unmodifiableList(alternatives_field); 1.35 + } 1.36 + 1.37 + @Override 1.38 + public TypeKind getKind() { 1.39 + return TypeKind.UNION; 1.40 + } 1.41 + 1.42 + @Override 1.43 + public <R, P> R accept(TypeVisitor<R, P> v, P p) { 1.44 + return v.visitUnion(this, p); 1.45 + } 1.46 + } 1.47 + 1.48 public static class ArrayType extends Type 1.49 implements javax.lang.model.type.ArrayType { 1.50