/* * Copyright 2006 Werner Guttmann * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package org.exolab.javasource; /** * JType sub-class for collections. * * @author <a href="mailto:werner DOT guttmann AT gmx DOT net">Werner Guttman</a> * @version $Revision: 5951 $ $Date: 2006-04-25 16:09:10 -0600 (Tue, 25 Apr 2006) $ * @since 1.0.4 */ public final class JCollectionType extends JComponentizedType { //-------------------------------------------------------------------------- /** Name of the actual collection instance to be used, e.g. java.util.ArrayList. */ private String _instanceName; /** * Indicates whether (for generics) '? extends' should be emitted. */ private boolean _useExtends; //-------------------------------------------------------------------------- /** * Creates an instance of a collection type, of type 'collectionName'. * * @param typeName Name of the collection type interface. * @param componentType Component type. * @param useJava50 True if Java 5.0 should be used. */ public JCollectionType(final String typeName, final JType componentType, final boolean useJava50) { super(typeName, componentType, useJava50); _useExtends = false; } /** * Creates an instance of a collection type, of type 'collectionName'. * * @param typeName Name of the collection type interface. * @param componentType Component type. * @param useJava50 True if Java 5.0 should be used. * @param useExtends True if '? extends' should be emitted for generics (Java 5.0 ff only). */ public JCollectionType(final String typeName, final JType componentType, final boolean useJava50, final boolean useExtends) { super(typeName, componentType, useJava50); _useExtends = useExtends; } /** * Creates an instance of a collection type, of type 'collectionName'. * * @param typeName Name of the collection type interface. * @param instanceName Name of the actual collection type instance. * @param componentType Component type. * @param useJava50 True if Java 5.0 should be used. */ public JCollectionType(final String typeName, final String instanceName, final JType componentType, final boolean useJava50) { super(typeName, componentType, useJava50); _instanceName = instanceName; } //-------------------------------------------------------------------------- /** * Returns the instance name of this collection type. * * @return The instance name of this collection type. */ public String getInstanceName() { if (_instanceName != null) { if (isUseJava50()) { if (getComponentType().isPrimitive()) { JPrimitiveType primitive = (JPrimitiveType) getComponentType(); return _instanceName + "<" + primitive.getWrapperName() + ">"; } if (_useExtends) { return _instanceName + "<? extends " + getComponentType().toString() + ">"; } return _instanceName + "<" + getComponentType().toString() + ">"; } return _instanceName; } return toString(); } /** * {@inheritDoc} * <br/> * Returns the String representation of this JType. */ public String toString() { if (isUseJava50()) { if (getComponentType().isPrimitive()) { JPrimitiveType primitive = (JPrimitiveType) getComponentType(); return getName() + "<" + primitive.getWrapperName() + ">"; } if (_useExtends) { return getName() + "<? extends " + getComponentType().toString() + ">"; } return getName() + "<" + getComponentType().toString() + ">"; } return getName(); } //-------------------------------------------------------------------------- }