1 /* 2 * Copyright 2006 Werner Guttmann 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 * in compliance with the License. You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software distributed under the License 10 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 * or implied. See the License for the specific language governing permissions and limitations under 12 * the License. 13 */ 14 package org.exolab.javasource; 15 16 /** 17 * JType sub-class for collections. 18 * 19 * @author <a href="mailto:werner DOT guttmann AT gmx DOT net">Werner Guttman</a> 20 * @version $Revision: 5951 $ $Date: 2006-04-25 16:09:10 -0600 (Tue, 25 Apr 2006) $ 21 * @since 1.0.4 22 */ 23 public final class JCollectionType extends JComponentizedType { 24 // -------------------------------------------------------------------------- 25 26 /** Name of the actual collection instance to be used, e.g. java.util.ArrayList. */ 27 private String _instanceName; 28 29 /** 30 * Indicates whether (for generics) '? extends' should be emitted. 31 */ 32 private boolean _useExtends; 33 // -------------------------------------------------------------------------- 34 35 /** 36 * Creates an instance of a collection type, of type 'collectionName'. 37 * 38 * @param typeName Name of the collection type interface. 39 * @param componentType Component type. 40 * @param useJava50 True if Java 5.0 should be used. 41 */ 42 public JCollectionType(final String typeName, final JType componentType, 43 final boolean useJava50) { 44 super(typeName, componentType, useJava50); 45 _useExtends = false; 46 } 47 48 /** 49 * Creates an instance of a collection type, of type 'collectionName'. 50 * 51 * @param typeName Name of the collection type interface. 52 * @param componentType Component type. 53 * @param useJava50 True if Java 5.0 should be used. 54 * @param useExtends True if '? extends' should be emitted for generics (Java 5.0 ff only). 55 */ 56 public JCollectionType(final String typeName, final JType componentType, final boolean useJava50, 57 final boolean useExtends) { 58 super(typeName, componentType, useJava50); 59 _useExtends = useExtends; 60 } 61 62 /** 63 * Creates an instance of a collection type, of type 'collectionName'. 64 * 65 * @param typeName Name of the collection type interface. 66 * @param instanceName Name of the actual collection type instance. 67 * @param componentType Component type. 68 * @param useJava50 True if Java 5.0 should be used. 69 */ 70 public JCollectionType(final String typeName, final String instanceName, 71 final JType componentType, final boolean useJava50) { 72 super(typeName, componentType, useJava50); 73 _instanceName = instanceName; 74 } 75 76 // -------------------------------------------------------------------------- 77 78 /** 79 * Returns the instance name of this collection type. 80 * 81 * @return The instance name of this collection type. 82 */ 83 public String getInstanceName() { 84 if (_instanceName != null) { 85 if (isUseJava50()) { 86 if (getComponentType().isPrimitive()) { 87 JPrimitiveType primitive = (JPrimitiveType) getComponentType(); 88 return _instanceName + '<' + primitive.getWrapperName() + '>'; 89 } 90 if (_useExtends) { 91 return _instanceName + "<? extends " + getComponentType() + '>'; 92 } 93 return _instanceName + '<' + getComponentType() + '>'; 94 } 95 96 return _instanceName; 97 } 98 99 return toString(); 100 } 101 102 /** 103 * {@inheritDoc} <br/> 104 * Returns the String representation of this JType. 105 */ 106 public String toString() { 107 if (isUseJava50()) { 108 if (getComponentType().isPrimitive()) { 109 JPrimitiveType primitive = (JPrimitiveType) getComponentType(); 110 return getName() + '<' + primitive.getWrapperName() + '>'; 111 } 112 if (_useExtends) { 113 return getName() + "<? extends " + getComponentType() + '>'; 114 } 115 return getName() + '<' + getComponentType() + '>'; 116 } 117 118 return getName(); 119 } 120 121 // -------------------------------------------------------------------------- 122 }