/** * Copyright (c) 2006 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM - Initial API and implementation */ package org.eclipse.emf.codegen.merge.java.facade; /** * Represents a source type in a compilation unit, either as a top-level type or a member type. * The corresponding syntactic units are ClassDeclaration (JLS2 8.1) and InterfaceDeclaration (JLS2 9.1). * Enumeration types and annotation types, added in J2SE 1.5, are represented as * classes and interfaces, respectively. * @since 2.2.0 */ public interface JType extends JAbstractType { /** * Returns the name of this type's superclass. The syntax for a superclass name * is specified by Super in ClassDeclaration (JLS2 8.1). Type names must be * specified as they would appear in source code. For example: * <code>"Object"</code>, or <code>"java.io.File"</code>. * As of J2SE 1.5, the superclass may also include parameterized * types like <code>"ArrayList<String>"</code>. * * @return the superclass name, or <code>null</code> if this type represents * an interface or if no superclass has been assigned to this class */ String getSuperclass(); /** * Sets the name of this type's superclass. Has no effect if this type * represents an interface. A <code>null</code> name indicates that no * superclass name (extends clause) should appear in the source code. * The syntax for a superclass name is specified by Super in ClassDeclaration * (JLS2 8.1). Type names must be specified as they would appear in source code. * For example: <code>"Object"</code>, or <code>"java.io.File"</code>. * As of J2SE 1.5, the superclass may also include parameterized * types like <code>"ArrayList<String>"</code>. * * @param superclassName the superclass name, or <code>null</code> if this type * should have to no explicitly specified superclass */ void setSuperclass(String superclassName); /** * Returns the names of interfaces that this type implements or extends, * in the order in which they are listed in the source, or an empty array * if no super interfaces are present. The syntax for interface names is * defined by Interfaces in ClassDeclaration (JLS2 8.1). Type names appear * as they would in source code. For example: <code>"Cloneable"</code>, * or <code>"java.io.Serializable"</code>. * As of J2SE 1.5, super interfaces may also include parameterized * types like <code>"List<String>"</code>. * <p> * For classes, this method returns the interfaces that this class implements. * For interfaces, this method returns the interfaces that this interface extends. * </p> * * @return the list of interface names, or an empty array if no interfaces * are declared */ String[] getSuperInterfaces(); /** * Sets the names of interfaces that this type implements or extends, * in the order in which they are to be listed in the source. An empty array * parameter indicates that no super interfaces are present. The syntax for * interface names is defined by Interfaces in ClassDeclaration (JLS2 8.1). * Type names appear as they would in source code. For example: * <code>"Cloneable"</code>, or <code>"java.io.Serializable"</code>. * As of J2SE 1.5, super interfaces may also include parameterized * types like <code>"List<String>"</code>. * <p> * For classes, this method sets the interfaces that this class implements. * For interfaces, this method sets the interfaces that this interface extends. * </p> * * @param interfaceNames the list of interface names */ void setSuperInterfaces(String[] interfaceNames); /** * Adds the given interface name to the names of interfaces that this type implements or extends * (the name will be added after the existing interface names). This is a convenience method. * * For classes, this represents the interfaces that this class implements. * For interfaces, this represents the interfaces that this interface extends. * The name may or may not be fully qualified. * * @param interfaceName the syntax for an interface name is defined by * Interfaces in ClassDeclaration (JLS2 8.1). Type names must be specified as they would * appear in source code. For example: "Cloneable", "java.io.Serializable". */ void addSuperInterface(String interfaceName); /** * Returns the formal type parameters for this type. * Returns an empty array if this method has no formal type parameters. * <p>Formal type parameters are as they appear in the source * code; for example: * <code>"X extends List<String> & Serializable"</code>. * </p> * * @return the formal type parameters of this type, * in the order declared in the source, or an empty array if no type parameters * are declared */ String[] getTypeParameters(); /** * Sets the formal type parameters for this type. * <p>Formal type parameters are given as they appear in the source * code; for example: * <code>"X extends List<String> & Serializable"</code>. * </p> * * @param typeParameters the formal type parameters of this type, * in the order to appear in the source, an empty array if none * @since 2.3.0 */ void setTypeParameters(String[] typeParameters); }