<!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.5.0_04) on Thu Jun 29 16:31:40 BST 2006 -->
<TITLE>
Signature (AspectJ(tm) runtime API)
</TITLE>

<META NAME="keywords" CONTENT="org.aspectj.lang.Signature interface">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    parent.document.title="Signature (AspectJ(tm) runtime API)";
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">


<!-- ========= 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;<A HREF="../../../org/aspectj/lang/ProceedingJoinPoint.html" title="interface in org.aspectj.lang"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../org/aspectj/lang/SoftException.html" title="class in org.aspectj.lang"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../index.html?org/aspectj/lang/Signature.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="Signature.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">
org.aspectj.lang</FONT>
<BR>
Interface Signature</H2>
<DL>
<DT><B>All Known Subinterfaces:</B> <DD><A HREF="../../../org/aspectj/lang/reflect/AdviceSignature.html" title="interface in org.aspectj.lang.reflect">AdviceSignature</A>, <A HREF="../../../org/aspectj/lang/reflect/CatchClauseSignature.html" title="interface in org.aspectj.lang.reflect">CatchClauseSignature</A>, <A HREF="../../../org/aspectj/lang/reflect/CodeSignature.html" title="interface in org.aspectj.lang.reflect">CodeSignature</A>, <A HREF="../../../org/aspectj/lang/reflect/ConstructorSignature.html" title="interface in org.aspectj.lang.reflect">ConstructorSignature</A>, <A HREF="../../../org/aspectj/lang/reflect/FieldSignature.html" title="interface in org.aspectj.lang.reflect">FieldSignature</A>, <A HREF="../../../org/aspectj/lang/reflect/InitializerSignature.html" title="interface in org.aspectj.lang.reflect">InitializerSignature</A>, <A HREF="../../../org/aspectj/lang/reflect/LockSignature.html" title="interface in org.aspectj.lang.reflect">LockSignature</A>, <A HREF="../../../org/aspectj/lang/reflect/MemberSignature.html" title="interface in org.aspectj.lang.reflect">MemberSignature</A>, <A HREF="../../../org/aspectj/lang/reflect/MethodSignature.html" title="interface in org.aspectj.lang.reflect">MethodSignature</A>, <A HREF="../../../org/aspectj/lang/reflect/UnlockSignature.html" title="interface in org.aspectj.lang.reflect">UnlockSignature</A></DD>
</DL>
<DL>
<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../org/aspectj/runtime/reflect/FieldSignatureImpl.html" title="class in org.aspectj.runtime.reflect">FieldSignatureImpl</A></DD>
</DL>
<HR>
<DL>
<DT><PRE>public interface <B>Signature</B></DL>
</PRE>

<P>
<p>Represents the signature at a join point.  This interface parallels
  <code>java.lang.reflect.Member</code>. </p>
 
 <p>This interface is typically used for tracing or logging applications
 to obtain reflective information about the join point, i.e. using
 the j2se 1.4 <code>java.util.logging</code> API</p>
 <pre>
 aspect Logging {
     Logger logger = Logger.getLogger("MethodEntries");
 
     before(): within(com.bigboxco..*) && execution(public * *(..)) {
         Signature sig = thisJoinPoint.getSignature();
         logger.entering(sig.getDeclaringType().getName(),
                         sig.getName());
     }
 }
 </pre>
 
 
 <p>More detailed information about a specific kind of signature can
 be obtained by casting this <code>Signature</code> object into one 
 of its more specific sub-types available in
 <code>org.aspectj.lang.reflect</code>.
<P>

<P>
<DL>
<DT><B>See Also:</B><DD><CODE>Member</CODE>, 
<CODE>java.util.logging.Logger</CODE></DL>
<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;java.lang.Class</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../org/aspectj/lang/Signature.html#getDeclaringType()">getDeclaringType</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <code>java.lang.Class</code> object representing the class,
 interface, or aspect that declared this member.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../org/aspectj/lang/Signature.html#getDeclaringTypeName()">getDeclaringTypeName</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the fully-qualified name of the declaring type.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../org/aspectj/lang/Signature.html#getModifiers()">getModifiers</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the modifiers on this signature represented as an int.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../org/aspectj/lang/Signature.html#getName()">getName</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the identifier part of this signature.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../org/aspectj/lang/Signature.html#toLongString()">toLongString</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an extended string representation of this signature.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../org/aspectj/lang/Signature.html#toShortString()">toShortString</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an abbreviated string representation of this signature.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../org/aspectj/lang/Signature.html#toString()">toString</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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="toString()"><!-- --></A><H3>
toString</H3>
<PRE>
java.lang.String <B>toString</B>()</PRE>
<DL>
<DD><DL>
<DT><B>Overrides:</B><DD><CODE>toString</CODE> in class <CODE>java.lang.Object</CODE></DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<HR>

<A NAME="toShortString()"><!-- --></A><H3>
toShortString</H3>
<PRE>
java.lang.String <B>toShortString</B>()</PRE>
<DL>
<DD>Returns an abbreviated string representation of this signature.
<P>
<DD><DL>
</DL>
</DD>
</DL>
<HR>

<A NAME="toLongString()"><!-- --></A><H3>
toLongString</H3>
<PRE>
java.lang.String <B>toLongString</B>()</PRE>
<DL>
<DD>Returns an extended string representation of this signature.
<P>
<DD><DL>
</DL>
</DD>
</DL>
<HR>

<A NAME="getName()"><!-- --></A><H3>
getName</H3>
<PRE>
java.lang.String <B>getName</B>()</PRE>
<DL>
<DD>Returns the identifier part of this signature.  For methods this
 will return the method name.
<P>
<DD><DL>
<DT><B>See Also:</B><DD><CODE>Member.getName()</CODE></DL>
</DD>
</DL>
<HR>

<A NAME="getModifiers()"><!-- --></A><H3>
getModifiers</H3>
<PRE>
int <B>getModifiers</B>()</PRE>
<DL>
<DD>Returns the modifiers on this signature represented as an int.  Use
 the constants and helper methods defined on 
 <code>java.lang.reflect.Modifier</code> to manipulate this, i.e.
 <pre>
     // check if this signature is public
     java.lang.reflect.Modifier.isPublic(sig.getModifiers());
 
     // print out the modifiers
     java.lang.reflect.Modifier.toString(sig.getModifiers());
 </pre>
<P>
<DD><DL>
<DT><B>See Also:</B><DD><CODE>Member.getModifiers()</CODE>, 
<CODE>Modifier</CODE></DL>
</DD>
</DL>
<HR>

<A NAME="getDeclaringType()"><!-- --></A><H3>
getDeclaringType</H3>
<PRE>
java.lang.Class <B>getDeclaringType</B>()</PRE>
<DL>
<DD><p>Returns a <code>java.lang.Class</code> object representing the class,
 interface, or aspect that declared this member.  For intra-member
 declarations, this will be the type on which the member is declared,
 not the type where the declaration is lexically written.  Use
 <code>SourceLocation.getWithinType()</code> to get the type in 
 which the declaration occurs lexically.</p>
 <p>For consistency with <code>java.lang.reflect.Member</code>, this
 method should have been named <code>getDeclaringClass()</code>.</p>
<P>
<DD><DL>
<DT><B>See Also:</B><DD><CODE>Member.getDeclaringClass()</CODE></DL>
</DD>
</DL>
<HR>

<A NAME="getDeclaringTypeName()"><!-- --></A><H3>
getDeclaringTypeName</H3>
<PRE>
java.lang.String <B>getDeclaringTypeName</B>()</PRE>
<DL>
<DD>Returns the fully-qualified name of the declaring type. This is
 equivalent to calling getDeclaringType().getName(), but caches
 the result for greater efficiency.
<P>
<DD><DL>
</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;<A HREF="../../../org/aspectj/lang/ProceedingJoinPoint.html" title="interface in org.aspectj.lang"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../org/aspectj/lang/SoftException.html" title="class in org.aspectj.lang"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../index.html?org/aspectj/lang/Signature.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="Signature.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>
