1 /* 2 * Copyright 2004 Sun Microsystems, Inc. All Rights Reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Sun designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Sun in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 22 * CA 95054 USA or visit www.sun.com if you need additional information or 23 * have any questions. 24 */ 25 26 package com.sun.tools.apt.mirror.type; 27 28 29 import java.util.ArrayList; 30 import java.util.Collection; 31 import java.util.Collections; 32 33 import com.sun.mirror.declaration.*; 34 import com.sun.mirror.type.*; 35 import com.sun.mirror.util.TypeVisitor; 36 import com.sun.tools.apt.mirror.AptEnv; 37 import com.sun.tools.javac.code.*; 38 import com.sun.tools.javac.code.Symbol.*; 39 40 41 /** 42 * Implementation of WildcardType 43 */ 44 @SuppressWarnings("deprecation") 45 public class WildcardTypeImpl extends TypeMirrorImpl implements WildcardType { 46 47 protected Type.WildcardType type; 48 49 WildcardTypeImpl(AptEnv env, Type.WildcardType type) { 50 super(env, type); 51 this.type = type; 52 } 53 54 55 /** 56 * Returns the string form of a wildcard type, consisting of "?" 57 * and any "extends" or "super" clause. 58 * Delimiting brackets are not included. Class names are qualified. 59 */ 60 public String toString() { 61 return toString(env, type); 62 } 63 64 /** 65 * {@inheritDoc} 66 */ 67 public Collection<ReferenceType> getUpperBounds() { 68 return type.isSuperBound() 69 ? Collections.<ReferenceType>emptyList() 70 : typeToCollection(type.type); 71 } 72 73 /** 74 * {@inheritDoc} 75 */ 76 public Collection<ReferenceType> getLowerBounds() { 77 return type.isExtendsBound() 78 ? Collections.<ReferenceType>emptyList() 79 : typeToCollection(type.type); 80 } 81 82 /** 83 * Gets the ReferenceType for a javac Type object, and returns 84 * it in a singleton collection. If type is null, returns an empty 85 * collection. 86 */ 87 private Collection<ReferenceType> typeToCollection(Type type) { 88 ArrayList<ReferenceType> res = new ArrayList<ReferenceType>(1); 89 if (type != null) { 90 res.add((ReferenceType) env.typeMaker.getType(type)); 91 } 92 return res; 93 } 94 95 /** 96 * {@inheritDoc} 97 */ 98 public void accept(TypeVisitor v) { 99 v.visitWildcardType(this); 100 } 101 102 103 /** 104 * Returns the string form of a wildcard type, consisting of "?" 105 * and any "extends" or "super" clause. 106 * See {@link #toString()} for details. 107 */ 108 static String toString(AptEnv env, Type.WildcardType wildThing) { 109 return wildThing.toString(); 110 } 111 }