/* * 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.InterfaceCapable; import org.jboss.forge.roaster.model.JavaInterface; import org.jboss.forge.roaster.model.util.Methods; /** * Represents a {@link JavaSource} that may implement one or more interfaces. * * @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a> * */ public interface InterfaceCapableSource<T extends JavaSource<T>> extends InterfaceCapable { /** * Implements the specified interface name * * @param type the interface FQN * @return this object */ T addInterface(String type); /** * Implements the specified {@link Class} interface * * @param type the interface {@link Class} reference * @return this object */ T addInterface(Class<?> type); /** * Implements the specified {@link Class} interface and import their abstract methods, if any. * * @param type the interface {@link Class} reference * @return this object * * @see Methods#implementAbstractMethods(Class, MethodHolderSource) */ T implementInterface(Class<?> type); /** * Implements the specified {@link JavaInterface} and import their abstract methods, if any. * * @param type the interface {@link JavaInterface} reference * @return this object * * @see Methods#implementAbstractMethods(JavaInterface, MethodHolderSource) */ T implementInterface(JavaInterface<?> type); /** * Implements the specified {@link JavaInterface} * * @param type the interface * @return this object */ T addInterface(JavaInterface<?> type); /** * Removes the specified interface FQN * * @param type the interface FQN * @return this object */ T removeInterface(String type); /** * Removes the specified interface * * @param type the interface {@link Class} * @return this object */ T removeInterface(Class<?> type); /** * Removes the specified interface * * @param type the interface {@link JavaInterface} * @return this object */ T removeInterface(JavaInterface<?> type); }