/* * Copyright 2012 Red Hat, Inc. and/or its affiliates. * * Licensed under the Eclipse Public License version 1.0, available at * http://www.eclipse.org/legal/epl-v10.html */ package org.jboss.forge.roaster.model.source; import org.jboss.forge.roaster.model.Extendable; import org.jboss.forge.roaster.model.JavaClass; import org.jboss.forge.roaster.model.JavaType; import org.jboss.forge.roaster.model.util.Methods; /** * Represents a {@link JavaSource} that can extend other types (Java inheritance and interfaces). * * @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a> * */ public interface ExtendableSource<O extends JavaType<O>> extends Extendable<O> { /** * Set this type's super class. * * @see #setSuperType(String) */ O setSuperType(JavaType<?> type); /** * Set this type's super class. * * @see #setSuperType(String) */ O setSuperType(Class<?> type); /** * Set this type's super class and import their abstract methods, if any. * * @see #setSuperType(String) * @see Methods#implementAbstractMethods(Class, MethodHolderSource) */ O extendSuperType(Class<?> type); /** * Set this type's super class and import their abstract methods, if any. * * @see #setSuperType(String) * @see Methods#implementAbstractMethods(Class, MethodHolderSource) */ O extendSuperType(JavaClass<?> type); /** * Set this type's super class. * <p> * <strong>For example:</strong><br/> * In the case of " <code>public class Foo extends Bar {}</code>" - <code>Foo</code> is the base type, and * <code>Bar</code> is the super class.) * <p> * Attempt to add an import statement to this object's {@link O} if required. (Note that the given className must be * fully-qualified in order to properly import required classes) */ O setSuperType(String type); }