001/*
002 * (c) 2005, 2009, 2010 ThoughtWorks Ltd
003 * All rights reserved.
004 *
005 * The software in this package is published under the terms of the BSD
006 * style license a copy of which has been included with this distribution in
007 * the LICENSE.txt file.
008 * 
009 * Created on 21-Jul-2005
010 */
011package com.thoughtworks.proxy.kit;
012
013import java.lang.reflect.Method;
014
015
016/**
017 * An Invoker that is able to call protected and private methods. If the proxies type is an abstract class, it might be
018 * necessary to use an PrivateInvoker instead of a SimpleInvoker. Otherwise the method implementations may not call the
019 * protected or private methods of the own type.
020 *
021 * @author Jörg Schaible
022 * @since 0.2
023 */
024public class PrivateInvoker extends SimpleInvoker {
025
026    private static final long serialVersionUID = 1L;
027
028    /**
029     * Construct a PrivateInvoker.
030     *
031     * @param target the invocation target.
032     * @since 0.2
033     */
034    public PrivateInvoker(final Object target) {
035        super(target);
036    }
037
038    @Override
039    public Object invoke(final Object proxy, final Method method, final Object[] args) throws Throwable {
040        if (getTarget() != null && !method.isAccessible()) {
041            method.setAccessible(true);
042        }
043        return super.invoke(proxy, method, args);
044    }
045
046}