/************************************************
 * Copyright (c) Shen Li. All rights reserved.  *
 * http://joyaop.sourceforge.net                *
 * -------------------------------------------- *
 * Distributable under LGPL license.            *
 * See terms of license at gnu.org.             *
 ************************************************/
package net.sf.joyaop.framework;

import net.sf.joyaop.framework.InterceptorAspect;
import net.sf.joyaop.framework.InterfaceAspect;
import net.sf.joyaop.framework.MixinAspect;

import java.lang.reflect.Method;
import java.util.Set;

/**
 * @author Shen Li
 */
public interface AspectizedClass {
    void addInterceptor(Method method, InterceptorAspect interceptorAspect);

    void addInterface(InterfaceAspect interfaceAspect);

    void addMixin(MixinAspect mixinAspect);

    Object newInstance();

    Object newInstance(Class[] argTypes, Object[] args);

    Class getOriginalClass();

    Set getInterceptors(Method method);

    MixinAspect getMixin(Class interfaceClass);

    Set getMethods();
}
