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 */
011 package com.thoughtworks.proxy.kit;
012
013 import 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 */
024 public 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 }