blob: 57eb1c91eea117a14b146dc586c8a503485cf6f4 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Mon Jan 09 16:02:38 EST 2012 -->
<TITLE>
ProxyBuilder (dexmaker)
</TITLE>
<META NAME="date" CONTENT="2012-01-09">
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
<SCRIPT type="text/javascript">
function windowTitle()
{
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="ProxyBuilder (dexmaker)";
}
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>
</HEAD>
<BODY BGCOLOR="white" onload="windowTitle();">
<HR>
<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
</TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV CLASS&nbsp;
&nbsp;NEXT CLASS</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="../../../../index.html?com/google/dexmaker/stock/ProxyBuilder.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ProxyBuilder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
if(window==top) {
document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
}
//-->
</SCRIPT>
<NOSCRIPT>
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->
<HR>
<!-- ======== START OF CLASS DATA ======== -->
<H2>
<FONT SIZE="-1">
com.google.dexmaker.stock</FONT>
<BR>
Class ProxyBuilder&lt;T&gt;</H2>
<PRE>
java.lang.Object
<IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.dexmaker.stock.ProxyBuilder&lt;T&gt;</B>
</PRE>
<HR>
<DL>
<DT><PRE>public final class <B>ProxyBuilder&lt;T&gt;</B><DT>extends java.lang.Object</DL>
</PRE>
<P>
Creates dynamic proxies of concrete classes.
<p>
This is similar to the <code>java.lang.reflect.Proxy</code> class, but works for classes instead of
interfaces.
<h3>Example</h3>
The following example demonstrates the creation of a dynamic proxy for <code>java.util.Random</code>
which will always return 4 when asked for integers, and which logs method calls to every method.
<pre>
InvocationHandler handler = new InvocationHandler() {
&#64;Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if (method.getName().equals("nextInt")) {
// Chosen by fair dice roll, guaranteed to be random.
return 4;
}
Object result = ProxyBuilder.callSuper(proxy, method, args);
System.out.println("Method: " + method.getName() + " args: "
+ Arrays.toString(args) + " result: " + result);
return result;
}
};
Random debugRandom = ProxyBuilder.forClass(Random.class)
.dexCache(getInstrumentation().getTargetContext().getDir("dx", Context.MODE_PRIVATE))
.handler(handler)
.build();
assertEquals(4, debugRandom.nextInt());
debugRandom.setSeed(0);
assertTrue(debugRandom.nextBoolean());
</pre>
<h3>Usage</h3>
Call <A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html#forClass(java.lang.Class)"><CODE>forClass(Class)</CODE></A> for the Class you wish to proxy. Call
<A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html#handler(java.lang.reflect.InvocationHandler)"><CODE>handler(InvocationHandler)</CODE></A> passing in an <CODE>InvocationHandler</CODE>, and then call
<A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html#build()"><CODE>build()</CODE></A>. The returned instance will be a dynamically generated subclass where all method
calls will be delegated to the invocation handler, except as noted below.
<p>
The static method <A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html#callSuper(java.lang.Object, java.lang.reflect.Method, java.lang.Object...)"><CODE>callSuper(Object, Method, Object...)</CODE></A> allows you to access the original
super method for a given proxy. This allows the invocation handler to selectively override some
methods but not others.
<p>
By default, the <A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html#build()"><CODE>build()</CODE></A> method will call the no-arg constructor belonging to the class
being proxied. If you wish to call a different constructor, you must provide arguments for both
<A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html#constructorArgTypes(java.lang.Class...)"><CODE>constructorArgTypes(Class[])</CODE></A> and <A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html#constructorArgValues(java.lang.Object...)"><CODE>constructorArgValues(Object[])</CODE></A>.
<p>
This process works only for classes with public and protected level of visibility.
<p>
You may proxy abstract classes. You may not proxy final classes.
<p>
Only non-private, non-final, non-static methods will be dispatched to the invocation handler.
Private, static or final methods will always call through to the superclass as normal.
<p>
The <CODE>Object.finalize()</CODE> method on <code>Object</code> will not be proxied.
<p>
You must provide a dex cache directory via the <A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html#dexCache(java.io.File)"><CODE>dexCache(File)</CODE></A> method. You should take
care not to make this a world-writable directory, so that third parties cannot inject code into
your application. A suitable parameter for these output directories would be something like
this:
<pre><code>getApplicationContext().getDir("dx", Context.MODE_PRIVATE);
</code></pre>
<p>
If the base class to be proxied leaks the <code>this</code> pointer in the constructor (bad practice),
that is to say calls a non-private non-final method from the constructor, the invocation handler
will not be invoked. As a simple concrete example, when proxying Random we discover that it
inernally calls setSeed during the constructor. The proxy will not intercept this call during
proxy construction, but will intercept as normal afterwards. This behaviour may be subject to
change in future releases.
<p>
This class is <b>not thread safe</b>.
<P>
<P>
<HR>
<P>
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html" title="type parameter in ProxyBuilder">T</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html#build()">build</A></B>()</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Create a new instance of the class to proxy.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.Object</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html#callSuper(java.lang.Object, java.lang.reflect.Method, java.lang.Object...)">callSuper</A></B>(java.lang.Object&nbsp;proxy,
java.lang.reflect.Method&nbsp;method,
java.lang.Object...&nbsp;args)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html" title="class in com.google.dexmaker.stock">ProxyBuilder</A>&lt;<A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html" title="type parameter in ProxyBuilder">T</A>&gt;</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html#constructorArgTypes(java.lang.Class...)">constructorArgTypes</A></B>(java.lang.Class&lt;?&gt;...&nbsp;constructorArgTypes)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html" title="class in com.google.dexmaker.stock">ProxyBuilder</A>&lt;<A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html" title="type parameter in ProxyBuilder">T</A>&gt;</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html#constructorArgValues(java.lang.Object...)">constructorArgValues</A></B>(java.lang.Object...&nbsp;constructorArgValues)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html" title="class in com.google.dexmaker.stock">ProxyBuilder</A>&lt;<A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html" title="type parameter in ProxyBuilder">T</A>&gt;</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html#dexCache(java.io.File)">dexCache</A></B>(java.io.File&nbsp;dexCache)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
<TR ALIGN="right" VALIGN="">
<TD NOWRAP><FONT SIZE="-1">
<CODE>&lt;T&gt; <A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html" title="class in com.google.dexmaker.stock">ProxyBuilder</A>&lt;T&gt;</CODE></FONT></TD>
</TR>
</TABLE>
</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html#forClass(java.lang.Class)">forClass</A></B>(java.lang.Class&lt;T&gt;&nbsp;clazz)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.reflect.InvocationHandler</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html#getInvocationHandler(java.lang.Object)">getInvocationHandler</A></B>(java.lang.Object&nbsp;instance)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the proxy's <CODE>InvocationHandler</CODE>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html" title="class in com.google.dexmaker.stock">ProxyBuilder</A>&lt;<A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html" title="type parameter in ProxyBuilder">T</A>&gt;</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html#handler(java.lang.reflect.InvocationHandler)">handler</A></B>(java.lang.reflect.InvocationHandler&nbsp;handler)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html" title="class in com.google.dexmaker.stock">ProxyBuilder</A>&lt;<A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html" title="type parameter in ProxyBuilder">T</A>&gt;</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html#parentClassLoader(java.lang.ClassLoader)">parentClassLoader</A></B>(java.lang.ClassLoader&nbsp;parent)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies the parent ClassLoader to use when creating the proxy.</TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
<A NAME="forClass(java.lang.Class)"><!-- --></A><H3>
forClass</H3>
<PRE>
public static &lt;T&gt; <A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html" title="class in com.google.dexmaker.stock">ProxyBuilder</A>&lt;T&gt; <B>forClass</B>(java.lang.Class&lt;T&gt;&nbsp;clazz)</PRE>
<DL>
<DD><DL>
</DL>
</DD>
</DL>
<HR>
<A NAME="parentClassLoader(java.lang.ClassLoader)"><!-- --></A><H3>
parentClassLoader</H3>
<PRE>
public <A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html" title="class in com.google.dexmaker.stock">ProxyBuilder</A>&lt;<A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html" title="type parameter in ProxyBuilder">T</A>&gt; <B>parentClassLoader</B>(java.lang.ClassLoader&nbsp;parent)</PRE>
<DL>
<DD>Specifies the parent ClassLoader to use when creating the proxy.
<p>If null, <code>ProxyBuilder.class.getClassLoader()</code> will be used.
<P>
<DD><DL>
</DL>
</DD>
</DL>
<HR>
<A NAME="handler(java.lang.reflect.InvocationHandler)"><!-- --></A><H3>
handler</H3>
<PRE>
public <A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html" title="class in com.google.dexmaker.stock">ProxyBuilder</A>&lt;<A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html" title="type parameter in ProxyBuilder">T</A>&gt; <B>handler</B>(java.lang.reflect.InvocationHandler&nbsp;handler)</PRE>
<DL>
<DD><DL>
</DL>
</DD>
</DL>
<HR>
<A NAME="dexCache(java.io.File)"><!-- --></A><H3>
dexCache</H3>
<PRE>
public <A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html" title="class in com.google.dexmaker.stock">ProxyBuilder</A>&lt;<A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html" title="type parameter in ProxyBuilder">T</A>&gt; <B>dexCache</B>(java.io.File&nbsp;dexCache)</PRE>
<DL>
<DD><DL>
</DL>
</DD>
</DL>
<HR>
<A NAME="constructorArgValues(java.lang.Object...)"><!-- --></A><H3>
constructorArgValues</H3>
<PRE>
public <A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html" title="class in com.google.dexmaker.stock">ProxyBuilder</A>&lt;<A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html" title="type parameter in ProxyBuilder">T</A>&gt; <B>constructorArgValues</B>(java.lang.Object...&nbsp;constructorArgValues)</PRE>
<DL>
<DD><DL>
</DL>
</DD>
</DL>
<HR>
<A NAME="constructorArgTypes(java.lang.Class...)"><!-- --></A><H3>
constructorArgTypes</H3>
<PRE>
public <A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html" title="class in com.google.dexmaker.stock">ProxyBuilder</A>&lt;<A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html" title="type parameter in ProxyBuilder">T</A>&gt; <B>constructorArgTypes</B>(java.lang.Class&lt;?&gt;...&nbsp;constructorArgTypes)</PRE>
<DL>
<DD><DL>
</DL>
</DD>
</DL>
<HR>
<A NAME="build()"><!-- --></A><H3>
build</H3>
<PRE>
public <A HREF="../../../../com/google/dexmaker/stock/ProxyBuilder.html" title="type parameter in ProxyBuilder">T</A> <B>build</B>()
throws java.io.IOException</PRE>
<DL>
<DD>Create a new instance of the class to proxy.
<P>
<DD><DL>
<DT><B>Throws:</B>
<DD><CODE>java.lang.UnsupportedOperationException</CODE> - if the class we are trying to create a proxy for is
not accessible.
<DD><CODE>java.io.IOException</CODE> - if an exception occurred writing to the <code>dexCache</code> directory.
<DD><CODE>java.lang.reflect.UndeclaredThrowableException</CODE> - if the constructor for the base class to proxy throws
a declared exception during construction.
<DD><CODE>java.lang.IllegalArgumentException</CODE> - if the handler is null, if the constructor argument types
do not match the constructor argument values, or if no such constructor exists.</DL>
</DD>
</DL>
<HR>
<A NAME="getInvocationHandler(java.lang.Object)"><!-- --></A><H3>
getInvocationHandler</H3>
<PRE>
public static java.lang.reflect.InvocationHandler <B>getInvocationHandler</B>(java.lang.Object&nbsp;instance)</PRE>
<DL>
<DD>Returns the proxy's <CODE>InvocationHandler</CODE>.
<P>
<DD><DL>
<DT><B>Throws:</B>
<DD><CODE>java.lang.IllegalArgumentException</CODE> - if the object supplied is not a proxy created by this class.</DL>
</DD>
</DL>
<HR>
<A NAME="callSuper(java.lang.Object, java.lang.reflect.Method, java.lang.Object...)"><!-- --></A><H3>
callSuper</H3>
<PRE>
public static java.lang.Object <B>callSuper</B>(java.lang.Object&nbsp;proxy,
java.lang.reflect.Method&nbsp;method,
java.lang.Object...&nbsp;args)
throws java.lang.SecurityException,
java.lang.IllegalAccessException,
java.lang.reflect.InvocationTargetException,
java.lang.NoSuchMethodException</PRE>
<DL>
<DD><DL>
<DT><B>Throws:</B>
<DD><CODE>java.lang.SecurityException</CODE>
<DD><CODE>java.lang.IllegalAccessException</CODE>
<DD><CODE>java.lang.reflect.InvocationTargetException</CODE>
<DD><CODE>java.lang.NoSuchMethodException</CODE></DL>
</DD>
</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
</TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV CLASS&nbsp;
&nbsp;NEXT CLASS</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="../../../../index.html?com/google/dexmaker/stock/ProxyBuilder.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ProxyBuilder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
if(window==top) {
document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
}
//-->
</SCRIPT>
<NOSCRIPT>
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
</BODY>
</HTML>