<!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_01) on Tue Dec 20 13:26:57 GMT 2005 -->
<TITLE>
PointcutParser (AspectJ(tm) weaver API)
</TITLE>

<META NAME="keywords" CONTENT="org.aspectj.weaver.tools.PointcutParser class">

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

<SCRIPT type="text/javascript">
function windowTitle()
{
    parent.document.title="PointcutParser (AspectJ(tm) weaver 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/weaver/tools/PointcutParameter.html" title="interface in org.aspectj.weaver.tools"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../org/aspectj/weaver/tools/PointcutPrimitive.html" title="class in org.aspectj.weaver.tools"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../../index.html?org/aspectj/weaver/tools/PointcutParser.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="PointcutParser.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.weaver.tools</FONT>
<BR>
Class PointcutParser</H2>
<PRE>
java.lang.Object
  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>org.aspectj.weaver.tools.PointcutParser</B>
</PRE>
<HR>
<DL>
<DT><PRE>public class <B>PointcutParser</B><DT>extends java.lang.Object</DL>
</PRE>

<P>
A PointcutParser can be used to build PointcutExpressions for a 
 user-defined subset of AspectJ's pointcut language
<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="../../../../org/aspectj/weaver/tools/PointcutParameter.html" title="interface in org.aspectj.weaver.tools">PointcutParameter</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/aspectj/weaver/tools/PointcutParser.html#createPointcutParameter(java.lang.String, java.lang.Class)">createPointcutParameter</A></B>(java.lang.String&nbsp;name,
                        java.lang.Class&nbsp;type)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Create a pointcut parameter of the given name and type.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.util.Set</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/aspectj/weaver/tools/PointcutParser.html#getAllSupportedPointcutPrimitives()">getAllSupportedPointcutPrimitives</A></B>()</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;<A HREF="../../../../org/aspectj/weaver/tools/PointcutParser.html" title="class in org.aspectj.weaver.tools">PointcutParser</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/aspectj/weaver/tools/PointcutParser.html#getPointcutParserSupportingAllPrimitivesAndUsingContextClassloaderForResolution()">getPointcutParserSupportingAllPrimitivesAndUsingContextClassloaderForResolution</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a pointcut parser that can parse the full AspectJ pointcut
 language with the following exceptions:
 
 The <code>if, cflow, and cflowbelow</code> pointcut designators are not supported
 Pointcut expressions must be self-contained :- they cannot contain references
 to other named pointcuts
 The pointcut expression must be anonymous with no formals allowed.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;<A HREF="../../../../org/aspectj/weaver/tools/PointcutParser.html" title="class in org.aspectj.weaver.tools">PointcutParser</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/aspectj/weaver/tools/PointcutParser.html#getPointcutParserSupportingAllPrimitivesAndUsingSpecifiedClassloaderForResolution(java.lang.ClassLoader)">getPointcutParserSupportingAllPrimitivesAndUsingSpecifiedClassloaderForResolution</A></B>(java.lang.ClassLoader&nbsp;classLoader)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a pointcut parser that can parse the full AspectJ pointcut
 language with the following exceptions:
 
 The <code>if, cflow, and cflowbelow</code> pointcut designators are not supported
 Pointcut expressions must be self-contained :- they cannot contain references
 to other named pointcuts
 The pointcut expression must be anonymous with no formals allowed.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;<A HREF="../../../../org/aspectj/weaver/tools/PointcutParser.html" title="class in org.aspectj.weaver.tools">PointcutParser</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/aspectj/weaver/tools/PointcutParser.html#getPointcutParserSupportingSpecifiedPrimitivesAndUsingContextClassloaderForResolution(java.util.Set)">getPointcutParserSupportingSpecifiedPrimitivesAndUsingContextClassloaderForResolution</A></B>(java.util.Set&nbsp;supportedPointcutKinds)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a pointcut parser that can parse pointcut expressions built
 from a user-defined subset of AspectJ's supported pointcut primitives.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;<A HREF="../../../../org/aspectj/weaver/tools/PointcutParser.html" title="class in org.aspectj.weaver.tools">PointcutParser</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/aspectj/weaver/tools/PointcutParser.html#getPointcutParserSupportingSpecifiedPrimitivesAndUsingSpecifiedClassLoaderForResolution(java.util.Set, java.lang.ClassLoader)">getPointcutParserSupportingSpecifiedPrimitivesAndUsingSpecifiedClassLoaderForResolution</A></B>(java.util.Set&nbsp;supportedPointcutKinds,
                                                                                        java.lang.ClassLoader&nbsp;classLoader)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a pointcut parser that can parse pointcut expressions built
 from a user-defined subset of AspectJ's supported pointcut primitives.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../org/aspectj/weaver/tools/PointcutExpression.html" title="interface in org.aspectj.weaver.tools">PointcutExpression</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/aspectj/weaver/tools/PointcutParser.html#parsePointcutExpression(java.lang.String)">parsePointcutExpression</A></B>(java.lang.String&nbsp;expression)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Parse the given pointcut expression.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../org/aspectj/weaver/tools/PointcutExpression.html" title="interface in org.aspectj.weaver.tools">PointcutExpression</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/aspectj/weaver/tools/PointcutParser.html#parsePointcutExpression(java.lang.String, java.lang.Class, org.aspectj.weaver.tools.PointcutParameter[])">parsePointcutExpression</A></B>(java.lang.String&nbsp;expression,
                        java.lang.Class&nbsp;inScope,
                        <A HREF="../../../../org/aspectj/weaver/tools/PointcutParameter.html" title="interface in org.aspectj.weaver.tools">PointcutParameter</A>[]&nbsp;formalParameters)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Parse the given pointcut expression.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../org/aspectj/weaver/tools/TypePatternMatcher.html" title="interface in org.aspectj.weaver.tools">TypePatternMatcher</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/aspectj/weaver/tools/PointcutParser.html#parseTypePattern(java.lang.String)">parseTypePattern</A></B>(java.lang.String&nbsp;typePattern)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Parse the given aspectj type pattern, and return a 
 matcher that can be used to match types using it.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/aspectj/weaver/tools/PointcutParser.html#registerPointcutDesignatorHandler(org.aspectj.weaver.tools.PointcutDesignatorHandler)">registerPointcutDesignatorHandler</A></B>(<A HREF="../../../../org/aspectj/weaver/tools/PointcutDesignatorHandler.html" title="interface in org.aspectj.weaver.tools">PointcutDesignatorHandler</A>&nbsp;designatorHandler)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Register a new pointcut designator handler with this parser.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/aspectj/weaver/tools/PointcutParser.html#setLintProperties(java.util.Properties)">setLintProperties</A></B>(java.util.Properties&nbsp;properties)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the lint properties for this parser from the 
 given properties set.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/aspectj/weaver/tools/PointcutParser.html#setLintProperties(java.lang.String)">setLintProperties</A></B>(java.lang.String&nbsp;resourcePath)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the lint properties for this parser from the
 given resource on the classpath.</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="getAllSupportedPointcutPrimitives()"><!-- --></A><H3>
getAllSupportedPointcutPrimitives</H3>
<PRE>
public static java.util.Set <B>getAllSupportedPointcutPrimitives</B>()</PRE>
<DL>
<DD><DL>

<DT><B>Returns:</B><DD>a Set containing every PointcutPrimitive except
 if, cflow, and cflowbelow (useful for passing to 
 PointcutParser constructor).</DL>
</DD>
</DL>
<HR>

<A NAME="getPointcutParserSupportingAllPrimitivesAndUsingContextClassloaderForResolution()"><!-- --></A><H3>
getPointcutParserSupportingAllPrimitivesAndUsingContextClassloaderForResolution</H3>
<PRE>
public static <A HREF="../../../../org/aspectj/weaver/tools/PointcutParser.html" title="class in org.aspectj.weaver.tools">PointcutParser</A> <B>getPointcutParserSupportingAllPrimitivesAndUsingContextClassloaderForResolution</B>()</PRE>
<DL>
<DD>Returns a pointcut parser that can parse the full AspectJ pointcut
 language with the following exceptions:
 <ul>
 <li>The <code>if, cflow, and cflowbelow</code> pointcut designators are not supported
 <li>Pointcut expressions must be self-contained :- they cannot contain references
 to other named pointcuts
 <li>The pointcut expression must be anonymous with no formals allowed.
 </ul>
 <p>When resolving types in pointcut expressions, the context classloader is used to find types.</p>
<P>
<DD><DL>
</DL>
</DD>
</DL>
<HR>

<A NAME="getPointcutParserSupportingSpecifiedPrimitivesAndUsingContextClassloaderForResolution(java.util.Set)"><!-- --></A><H3>
getPointcutParserSupportingSpecifiedPrimitivesAndUsingContextClassloaderForResolution</H3>
<PRE>
public static <A HREF="../../../../org/aspectj/weaver/tools/PointcutParser.html" title="class in org.aspectj.weaver.tools">PointcutParser</A> <B>getPointcutParserSupportingSpecifiedPrimitivesAndUsingContextClassloaderForResolution</B>(java.util.Set&nbsp;supportedPointcutKinds)</PRE>
<DL>
<DD>Returns a pointcut parser that can parse pointcut expressions built
 from a user-defined subset of AspectJ's supported pointcut primitives. 
 The following restrictions apply:
 <ul>
 <li>The <code>if, cflow, and cflowbelow</code> pointcut designators are not supported
 <li>Pointcut expressions must be self-contained :- they cannot contain references
 to other named pointcuts
 <li>The pointcut expression must be anonymous with no formals allowed.
 </ul>
 <p>When resolving types in pointcut expressions, the context classloader is used to find types.</p>
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>supportedPointcutKinds</CODE> - a set of PointcutPrimitives this parser
 should support
<DT><B>Throws:</B>
<DD><CODE>java.lang.UnsupportedOperationException</CODE> - if the set contains if, cflow, or
 cflow below</DL>
</DD>
</DL>
<HR>

<A NAME="getPointcutParserSupportingAllPrimitivesAndUsingSpecifiedClassloaderForResolution(java.lang.ClassLoader)"><!-- --></A><H3>
getPointcutParserSupportingAllPrimitivesAndUsingSpecifiedClassloaderForResolution</H3>
<PRE>
public static <A HREF="../../../../org/aspectj/weaver/tools/PointcutParser.html" title="class in org.aspectj.weaver.tools">PointcutParser</A> <B>getPointcutParserSupportingAllPrimitivesAndUsingSpecifiedClassloaderForResolution</B>(java.lang.ClassLoader&nbsp;classLoader)</PRE>
<DL>
<DD>Returns a pointcut parser that can parse the full AspectJ pointcut
 language with the following exceptions:
 <ul>
 <li>The <code>if, cflow, and cflowbelow</code> pointcut designators are not supported
 <li>Pointcut expressions must be self-contained :- they cannot contain references
 to other named pointcuts
 <li>The pointcut expression must be anonymous with no formals allowed.
 </ul>
 <p>When resolving types in pointcut expressions, the given classloader is used to find types.</p>
<P>
<DD><DL>
</DL>
</DD>
</DL>
<HR>

<A NAME="getPointcutParserSupportingSpecifiedPrimitivesAndUsingSpecifiedClassLoaderForResolution(java.util.Set, java.lang.ClassLoader)"><!-- --></A><H3>
getPointcutParserSupportingSpecifiedPrimitivesAndUsingSpecifiedClassLoaderForResolution</H3>
<PRE>
public static <A HREF="../../../../org/aspectj/weaver/tools/PointcutParser.html" title="class in org.aspectj.weaver.tools">PointcutParser</A> <B>getPointcutParserSupportingSpecifiedPrimitivesAndUsingSpecifiedClassLoaderForResolution</B>(java.util.Set&nbsp;supportedPointcutKinds,
                                                                                                                     java.lang.ClassLoader&nbsp;classLoader)</PRE>
<DL>
<DD>Returns a pointcut parser that can parse pointcut expressions built
 from a user-defined subset of AspectJ's supported pointcut primitives. 
 The following restrictions apply:
 <ul>
 <li>The <code>if, cflow, and cflowbelow</code> pointcut designators are not supported
 <li>Pointcut expressions must be self-contained :- they cannot contain references
 to other named pointcuts
 <li>The pointcut expression must be anonymous with no formals allowed.
 </ul>
 <p>When resolving types in pointcut expressions, the given classloader is used to find types.</p>
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>supportedPointcutKinds</CODE> - a set of PointcutPrimitives this parser
 should support
<DT><B>Throws:</B>
<DD><CODE>java.lang.UnsupportedOperationException</CODE> - if the set contains if, cflow, or
 cflow below</DL>
</DD>
</DL>
<HR>

<A NAME="setLintProperties(java.lang.String)"><!-- --></A><H3>
setLintProperties</H3>
<PRE>
public void <B>setLintProperties</B>(java.lang.String&nbsp;resourcePath)
                       throws java.io.IOException</PRE>
<DL>
<DD>Set the lint properties for this parser from the
 given resource on the classpath.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>resourcePath</CODE> - path to a file containing aspectj
 lint properties
<DT><B>Throws:</B>
<DD><CODE>java.io.IOException</CODE></DL>
</DD>
</DL>
<HR>

<A NAME="setLintProperties(java.util.Properties)"><!-- --></A><H3>
setLintProperties</H3>
<PRE>
public void <B>setLintProperties</B>(java.util.Properties&nbsp;properties)</PRE>
<DL>
<DD>Set the lint properties for this parser from the 
 given properties set.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>properties</CODE> - </DL>
</DD>
</DL>
<HR>

<A NAME="registerPointcutDesignatorHandler(org.aspectj.weaver.tools.PointcutDesignatorHandler)"><!-- --></A><H3>
registerPointcutDesignatorHandler</H3>
<PRE>
public void <B>registerPointcutDesignatorHandler</B>(<A HREF="../../../../org/aspectj/weaver/tools/PointcutDesignatorHandler.html" title="interface in org.aspectj.weaver.tools">PointcutDesignatorHandler</A>&nbsp;designatorHandler)</PRE>
<DL>
<DD>Register a new pointcut designator handler with this parser.
 This provides an extension mechansim for the integration of
 domain-specific pointcut designators with the AspectJ
 pointcut language.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>designatorHandler</CODE> - </DL>
</DD>
</DL>
<HR>

<A NAME="createPointcutParameter(java.lang.String, java.lang.Class)"><!-- --></A><H3>
createPointcutParameter</H3>
<PRE>
public <A HREF="../../../../org/aspectj/weaver/tools/PointcutParameter.html" title="interface in org.aspectj.weaver.tools">PointcutParameter</A> <B>createPointcutParameter</B>(java.lang.String&nbsp;name,
                                                 java.lang.Class&nbsp;type)</PRE>
<DL>
<DD>Create a pointcut parameter of the given name and type.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>name</CODE> - <DD><CODE>type</CODE> - 
<DT><B>Returns:</B><DD></DL>
</DD>
</DL>
<HR>

<A NAME="parsePointcutExpression(java.lang.String)"><!-- --></A><H3>
parsePointcutExpression</H3>
<PRE>
public <A HREF="../../../../org/aspectj/weaver/tools/PointcutExpression.html" title="interface in org.aspectj.weaver.tools">PointcutExpression</A> <B>parsePointcutExpression</B>(java.lang.String&nbsp;expression)
                                           throws <A HREF="../../../../org/aspectj/weaver/tools/UnsupportedPointcutPrimitiveException.html" title="class in org.aspectj.weaver.tools">UnsupportedPointcutPrimitiveException</A>,
                                                  java.lang.IllegalArgumentException</PRE>
<DL>
<DD>Parse the given pointcut expression.
 A global scope is assumed for resolving any type references, and the pointcut
 must contain no formals (variables to be bound).
<P>
<DD><DL>

<DT><B>Throws:</B>
<DD><CODE><A HREF="../../../../org/aspectj/weaver/tools/UnsupportedPointcutPrimitiveException.html" title="class in org.aspectj.weaver.tools">UnsupportedPointcutPrimitiveException</A></CODE> - if the parser encounters a 
 primitive pointcut expression of a kind not supported by this PointcutParser.
<DD><CODE>java.lang.IllegalArgumentException</CODE> - if the expression is not a well-formed 
 pointcut expression</DL>
</DD>
</DL>
<HR>

<A NAME="parsePointcutExpression(java.lang.String, java.lang.Class, org.aspectj.weaver.tools.PointcutParameter[])"><!-- --></A><H3>
parsePointcutExpression</H3>
<PRE>
public <A HREF="../../../../org/aspectj/weaver/tools/PointcutExpression.html" title="interface in org.aspectj.weaver.tools">PointcutExpression</A> <B>parsePointcutExpression</B>(java.lang.String&nbsp;expression,
                                                  java.lang.Class&nbsp;inScope,
                                                  <A HREF="../../../../org/aspectj/weaver/tools/PointcutParameter.html" title="interface in org.aspectj.weaver.tools">PointcutParameter</A>[]&nbsp;formalParameters)
                                           throws <A HREF="../../../../org/aspectj/weaver/tools/UnsupportedPointcutPrimitiveException.html" title="class in org.aspectj.weaver.tools">UnsupportedPointcutPrimitiveException</A>,
                                                  java.lang.IllegalArgumentException</PRE>
<DL>
<DD>Parse the given pointcut expression.
 The pointcut is resolved as if it had been declared inside the inScope class
 (this allows the pointcut to contain unqualified references to other pointcuts
 declared in the same type for example).
 The pointcut may contain zero or more formal parameters to be bound at matched
 join points.
<P>
<DD><DL>

<DT><B>Throws:</B>
<DD><CODE><A HREF="../../../../org/aspectj/weaver/tools/UnsupportedPointcutPrimitiveException.html" title="class in org.aspectj.weaver.tools">UnsupportedPointcutPrimitiveException</A></CODE> - if the parser encounters a 
 primitive pointcut expression of a kind not supported by this PointcutParser.
<DD><CODE>java.lang.IllegalArgumentException</CODE> - if the expression is not a well-formed 
 pointcut expression</DL>
</DD>
</DL>
<HR>

<A NAME="parseTypePattern(java.lang.String)"><!-- --></A><H3>
parseTypePattern</H3>
<PRE>
public <A HREF="../../../../org/aspectj/weaver/tools/TypePatternMatcher.html" title="interface in org.aspectj.weaver.tools">TypePatternMatcher</A> <B>parseTypePattern</B>(java.lang.String&nbsp;typePattern)
                                    throws java.lang.IllegalArgumentException</PRE>
<DL>
<DD>Parse the given aspectj type pattern, and return a 
 matcher that can be used to match types using it.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>typePattern</CODE> - an aspectj type pattern
<DT><B>Returns:</B><DD>a type pattern matcher that matches using the given
 pattern
<DT><B>Throws:</B>
<DD><CODE>java.lang.IllegalArgumentException</CODE> - if the type pattern cannot
 be successfully parsed.</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/weaver/tools/PointcutParameter.html" title="interface in org.aspectj.weaver.tools"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../org/aspectj/weaver/tools/PointcutPrimitive.html" title="class in org.aspectj.weaver.tools"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../../index.html?org/aspectj/weaver/tools/PointcutParser.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="PointcutParser.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>
