<!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_14) on Wed Apr 07 07:46:22 BST 2010 -->
<TITLE>
AnnotationUtils
</TITLE>

<META NAME="date" CONTENT="2010-04-07">

<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="AnnotationUtils";
    }
}
</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="class-use/AnnotationUtils.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&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-files/index-1.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?org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="AnnotationUtils.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.eclipse.jst.ws.annotations.core.utils</FONT>
<BR>
Class AnnotationUtils</H2>
<PRE>
java.lang.Object
  <IMG SRC="../../../../../../../resources/inherit.gif" ALT="extended by "><B>org.eclipse.jst.ws.annotations.core.utils.AnnotationUtils</B>
</PRE>
<HR>
<DL>
<DT><PRE>public final class <B>AnnotationUtils</B><DT>extends java.lang.Object</DL>
</PRE>

<P>
Utility class for adding, removing and updating annotations and member value pairs.
 <p>
 <strong>Provisional API:</strong> This class/interface is part of an interim API that is still under
 development and expected to change significantly before reaching stability. It is being made available at
 this early stage to solicit feedback from pioneering adopters on the understanding that any code that uses
 this API will almost certainly be broken (repeatedly) as the API evolves.
 </p>
<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>static&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#addAnnotation(org.eclipse.jdt.core.IJavaElement, org.eclipse.jdt.core.dom.Annotation)">addAnnotation</A></B>(org.eclipse.jdt.core.IJavaElement&nbsp;javaElement,
              org.eclipse.jdt.core.dom.Annotation&nbsp;annotation)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds the given <CODE>Annotation</CODE> to the <CODE>IJavaElement</CODE>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#addImport(org.eclipse.jdt.core.IJavaElement, java.lang.String)">addImport</A></B>(org.eclipse.jdt.core.IJavaElement&nbsp;javaElement,
          java.lang.String&nbsp;qualifiedName)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds an import to the compilation unit of the given <CODE>IJavaElement</CODE>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#addMemberValuePair(org.eclipse.jdt.core.dom.NormalAnnotation, org.eclipse.jdt.core.dom.MemberValuePair)">addMemberValuePair</A></B>(org.eclipse.jdt.core.dom.NormalAnnotation&nbsp;annotation,
                   org.eclipse.jdt.core.dom.MemberValuePair&nbsp;memberValuePair)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds the <CODE>MemberValuePair</CODE> to the <CODE>NormalAnnotation</CODE>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#compareFieldNames(org.eclipse.jdt.core.dom.FieldDeclaration, org.eclipse.jdt.core.IField)">compareFieldNames</A></B>(org.eclipse.jdt.core.dom.FieldDeclaration&nbsp;fieldDeclaration,
                  org.eclipse.jdt.core.IField&nbsp;field)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the <CODE>FieldDeclaration</CODE> and <CODE>IField</CODE>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#compareMethods(org.eclipse.jdt.core.dom.MethodDeclaration, org.eclipse.jdt.core.IMethod)">compareMethods</A></B>(org.eclipse.jdt.core.dom.MethodDeclaration&nbsp;methodDeclaration,
               org.eclipse.jdt.core.IMethod&nbsp;method)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the <CODE>MethodDeclaration</CODE> and <CODE>IMethod</CODE>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#compareMethods(org.eclipse.jdt.core.dom.MethodDeclaration, org.eclipse.jdt.core.dom.MethodDeclaration)">compareMethods</A></B>(org.eclipse.jdt.core.dom.MethodDeclaration&nbsp;methodOne,
               org.eclipse.jdt.core.dom.MethodDeclaration&nbsp;methodTwo)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the two <CODE>MethodDeclaration</CODE>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#compareMethods(com.sun.mirror.declaration.MethodDeclaration, com.sun.mirror.declaration.MethodDeclaration)">compareMethods</A></B>(com.sun.mirror.declaration.MethodDeclaration&nbsp;methodOne,
               com.sun.mirror.declaration.MethodDeclaration&nbsp;methodTwo)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the two <CODE>MethodDeclaration</CODE>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#compareTypeNames(org.eclipse.jdt.core.dom.AbstractTypeDeclaration, org.eclipse.jdt.core.IType)">compareTypeNames</A></B>(org.eclipse.jdt.core.dom.AbstractTypeDeclaration&nbsp;abstractTypeDeclaration,
                 org.eclipse.jdt.core.IType&nbsp;type)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the <CODE>AbstractTypeDeclaration</CODE> and <CODE>IType</CODE>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;org.eclipse.text.edits.TextEdit</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#createAddAnnotationTextEdit(org.eclipse.jdt.core.IJavaElement, org.eclipse.jdt.core.dom.Annotation)">createAddAnnotationTextEdit</A></B>(org.eclipse.jdt.core.IJavaElement&nbsp;javaElement,
                            org.eclipse.jdt.core.dom.Annotation&nbsp;annotation)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <CODE>TextEdit</CODE> object representing the add annotation change to the source code of the java elements compilation unit.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;org.eclipse.text.edits.TextEdit</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#createAddImportTextEdit(org.eclipse.jdt.core.IJavaElement, java.lang.String)">createAddImportTextEdit</A></B>(org.eclipse.jdt.core.IJavaElement&nbsp;javaElement,
                        java.lang.String&nbsp;qualifiedName)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <CODE>TextEdit</CODE> object representing the add import change to the source code of the java elements compilation unit.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;org.eclipse.text.edits.TextEdit</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#createAddMemberValuePairTextEdit(org.eclipse.jdt.core.dom.NormalAnnotation, org.eclipse.jdt.core.dom.MemberValuePair)">createAddMemberValuePairTextEdit</A></B>(org.eclipse.jdt.core.dom.NormalAnnotation&nbsp;annotation,
                                 org.eclipse.jdt.core.dom.MemberValuePair&nbsp;memberValuePair)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <CODE>TextEdit</CODE> object representing the change of adding the <CODE>MemberValuePair</CODE> to the <CODE>NormalAnnotation</CODE>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;org.eclipse.text.edits.TextEdit</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#createRemoveAnnotationTextEdit(org.eclipse.jdt.core.IJavaElement, org.eclipse.jdt.core.dom.Annotation)">createRemoveAnnotationTextEdit</A></B>(org.eclipse.jdt.core.IJavaElement&nbsp;javaElement,
                               org.eclipse.jdt.core.dom.Annotation&nbsp;annotation)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <CODE>TextEdit</CODE> object representing the remove annotation change to the source code of the java elements compilation unit.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;org.eclipse.text.edits.TextEdit</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#createRemoveImportTextEdit(org.eclipse.jdt.core.IJavaElement, java.lang.String)">createRemoveImportTextEdit</A></B>(org.eclipse.jdt.core.IJavaElement&nbsp;javaElement,
                           java.lang.String&nbsp;qualifiedName)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <CODE>TextEdit</CODE> object representing the remove import change to the source code of the java elements compilation unit.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;org.eclipse.text.edits.TextEdit</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#createRemoveMemberValuePairTextEdit(org.eclipse.jdt.core.dom.NormalAnnotation, org.eclipse.jdt.core.dom.MemberValuePair)">createRemoveMemberValuePairTextEdit</A></B>(org.eclipse.jdt.core.dom.NormalAnnotation&nbsp;annotation,
                                    org.eclipse.jdt.core.dom.MemberValuePair&nbsp;memberValuePair)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <CODE>TextEdit</CODE> object representing the change of removing the <CODE>MemberValuePair</CODE> from the <CODE>NormalAnnotation</CODE>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;org.eclipse.text.edits.TextEdit</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#createUpdateMemberValuePairTextEdit(org.eclipse.jdt.core.dom.MemberValuePair, org.eclipse.jdt.core.dom.ASTNode)">createUpdateMemberValuePairTextEdit</A></B>(org.eclipse.jdt.core.dom.MemberValuePair&nbsp;memberValuePair,
                                    org.eclipse.jdt.core.dom.ASTNode&nbsp;value)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <CODE>TextEdit</CODE> object representing the change of updating the <CODE>MemberValuePair</CODE> with the <CODE>ASTNode</CODE> value.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;org.eclipse.text.edits.TextEdit</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#createUpdateSingleMemberAnnotationTextEdit(org.eclipse.jdt.core.dom.SingleMemberAnnotation, org.eclipse.jdt.core.dom.ASTNode)">createUpdateSingleMemberAnnotationTextEdit</A></B>(org.eclipse.jdt.core.dom.SingleMemberAnnotation&nbsp;annotation,
                                           org.eclipse.jdt.core.dom.ASTNode&nbsp;value)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <CODE>TextEdit</CODE> object representing the change of updating the <CODE>SingleMemberAnnotation</CODE> with the <CODE>ASTNode</CODE> value.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;org.eclipse.jdt.core.IAnnotation</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#getAnnotation(java.lang.Class, org.eclipse.jdt.core.IAnnotatable)">getAnnotation</A></B>(java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;&nbsp;annotation,
              org.eclipse.jdt.core.IAnnotatable&nbsp;annotatable)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the JDT <CODE>IAnnotation</CODE> that corresponds to the given <CODE>Annotation</CODE> class
 on the <CODE>IAnnotatable</CODE> element.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;com.sun.mirror.declaration.AnnotationMirror</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#getAnnotation(com.sun.mirror.declaration.Declaration, java.lang.Class)">getAnnotation</A></B>(com.sun.mirror.declaration.Declaration&nbsp;declaration,
              java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;&nbsp;annotation)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the <CODE>AnnotationMirror</CODE> that corresponds to the given <CODE>Annotation</CODE> class
 on the <CODE>Declaration</CODE>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;org.eclipse.jdt.core.dom.Annotation</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#getAnnotation(org.eclipse.jdt.core.IJavaElement, java.lang.Class)">getAnnotation</A></B>(org.eclipse.jdt.core.IJavaElement&nbsp;javaElement,
              java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;&nbsp;annotation)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the AST <CODE>Annotation</CODE> that corresponds to the given <CODE>Annotation</CODE> class
 on the <CODE>IJavaElement</CODE>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#getAnnotationName(org.eclipse.jdt.core.dom.Annotation)">getAnnotationName</A></B>(org.eclipse.jdt.core.dom.Annotation&nbsp;annotation)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the annotations type name.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.util.List&lt;org.eclipse.jdt.core.dom.Annotation&gt;</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#getAnnotations(org.eclipse.jdt.core.IJavaElement)">getAnnotations</A></B>(org.eclipse.jdt.core.IJavaElement&nbsp;javaElement)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a list of all the <CODE>Annotation</CODE> that are present on the given <CODE>IJavaElement</CODE></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;com.sun.mirror.declaration.AnnotationValue</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#getAnnotationValue(com.sun.mirror.declaration.AnnotationMirror, java.lang.String)">getAnnotationValue</A></B>(com.sun.mirror.declaration.AnnotationMirror&nbsp;mirror,
                   java.lang.String&nbsp;memberName)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the <CODE>AnnotationValue</CODE> with the given member name that is declared within the <CODE>AnnotationMirror</CODE>.</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="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#getAnnotationValue(org.eclipse.jdt.core.IAnnotation, java.lang.String)">getAnnotationValue</A></B>(org.eclipse.jdt.core.IAnnotation&nbsp;annotation,
                   java.lang.String&nbsp;memberName)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the JDT <CODE>IAnnotation</CODE> member value pair value with the given member name.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;org.eclipse.jdt.core.dom.Expression</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#getAnnotationValue(org.eclipse.jdt.core.dom.NormalAnnotation, java.lang.String)">getAnnotationValue</A></B>(org.eclipse.jdt.core.dom.NormalAnnotation&nbsp;normalAnnotation,
                   java.lang.String&nbsp;memberName)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the <CODE>NormalAnnotation</CODE> member value pair value with the given member name.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.Boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#getBooleanValue(com.sun.mirror.declaration.AnnotationMirror, java.lang.String)">getBooleanValue</A></B>(com.sun.mirror.declaration.AnnotationMirror&nbsp;mirror,
                java.lang.String&nbsp;memberName)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the member value with the given member name from the <CODE>AnnotationMirror</CODE> as a <CODE>Boolean</CODE> value.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.Boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#getBooleanValue(org.eclipse.jdt.core.dom.Annotation, java.lang.String)">getBooleanValue</A></B>(org.eclipse.jdt.core.dom.Annotation&nbsp;annotation,
                java.lang.String&nbsp;memberName)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the member value with the given member name from the <CODE>Annotation</CODE> as a <CODE>Boolean</CODE> value.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.Boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#getBooleanValue(org.eclipse.jdt.core.IAnnotation, java.lang.String)">getBooleanValue</A></B>(org.eclipse.jdt.core.IAnnotation&nbsp;annotation,
                java.lang.String&nbsp;memberName)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the  member value with the given member name from the <CODE>IAnnotation</CODE> as a <CODE>Boolean</CODE> value.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;org.eclipse.jdt.core.ICompilationUnit</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#getCompilationUnitFromJavaElement(org.eclipse.jdt.core.IJavaElement)">getCompilationUnitFromJavaElement</A></B>(org.eclipse.jdt.core.IJavaElement&nbsp;javaElement)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <CODE>ICompilationUnit</CODE> for the given <CODE>IJavaElement</CODE>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#getEnumValue(org.eclipse.jdt.core.dom.Annotation, java.lang.String)">getEnumValue</A></B>(org.eclipse.jdt.core.dom.Annotation&nbsp;annotation,
             java.lang.String&nbsp;memberName)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the member value with the given member name from the <CODE>Annotation</CODE> as a <CODE>String</CODE> value.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#getEnumValue(org.eclipse.jdt.core.IAnnotation, java.lang.String)">getEnumValue</A></B>(org.eclipse.jdt.core.IAnnotation&nbsp;annotation,
             java.lang.String&nbsp;memberName)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the member value with the given member name from the <CODE>IAnnotation</CODE> as a <CODE>String</CODE> value.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;org.eclipse.jdt.core.dom.FieldDeclaration</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#getFieldDeclaration(org.eclipse.jdt.core.IField)">getFieldDeclaration</A></B>(org.eclipse.jdt.core.IField&nbsp;field)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the <CODE>FieldDeclaration</CODE> that corresponds to the given <CODE>IField</CODE>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;org.eclipse.jdt.core.ILocalVariable</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#getLocalVariable(org.eclipse.jdt.core.IMethod, int)">getLocalVariable</A></B>(org.eclipse.jdt.core.IMethod&nbsp;method,
                 int&nbsp;offset)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the <CODE>ILocalVariable</CODE> at the given offset position in the source file.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;org.eclipse.jdt.core.ILocalVariable</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#getLocalVariable(org.eclipse.jdt.core.IMethod, java.lang.String)">getLocalVariable</A></B>(org.eclipse.jdt.core.IMethod&nbsp;method,
                 java.lang.String&nbsp;paramName)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the <CODE>ILocalVariable</CODE> with the given name within the declared <CODE>IMethod</CODE>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;org.eclipse.jdt.core.dom.MemberValuePair</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#getMemberValuePair(org.eclipse.jdt.core.dom.NormalAnnotation, java.lang.String)">getMemberValuePair</A></B>(org.eclipse.jdt.core.dom.NormalAnnotation&nbsp;normalAnnotation,
                   java.lang.String&nbsp;memberName)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the <CODE>MemberValuePair</CODE> with the given member name from the <CODE>NormalAnnotation</CODE>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;org.eclipse.jdt.core.dom.MethodDeclaration</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#getMethodDeclaration(org.eclipse.jdt.core.IMethod)">getMethodDeclaration</A></B>(org.eclipse.jdt.core.IMethod&nbsp;method)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the <CODE>MethodDeclaration</CODE> that corresponds to the given <CODE>IMethod</CODE>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;org.eclipse.jdt.core.dom.SingleVariableDeclaration</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#getSingleVariableDeclaration(org.eclipse.jdt.core.ILocalVariable)">getSingleVariableDeclaration</A></B>(org.eclipse.jdt.core.ILocalVariable&nbsp;javaElement)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the <CODE>SingleVariableDeclaration</CODE> that corresponds to the given <CODE>ILocalVariable</CODE>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.util.List&lt;org.eclipse.jdt.core.dom.SingleVariableDeclaration&gt;</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#getSingleVariableDeclarations(org.eclipse.jdt.core.IMethod)">getSingleVariableDeclarations</A></B>(org.eclipse.jdt.core.IMethod&nbsp;method)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a list of all the <CODE>SingleVariableDeclaration</CODE> for the given <CODE>IMethod</CODE>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#getStringValue(com.sun.mirror.declaration.AnnotationMirror, java.lang.String)">getStringValue</A></B>(com.sun.mirror.declaration.AnnotationMirror&nbsp;mirror,
               java.lang.String&nbsp;memberName)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the member value with the given member name from the <CODE>AnnotationMirror</CODE> as a <CODE>String</CODE> value.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#getStringValue(org.eclipse.jdt.core.dom.Annotation, java.lang.String)">getStringValue</A></B>(org.eclipse.jdt.core.dom.Annotation&nbsp;annotation,
               java.lang.String&nbsp;memberName)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the member value with the given member name from the <CODE>Annotation</CODE> as a <CODE>String</CODE> value.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#getStringValue(org.eclipse.jdt.core.IAnnotation, java.lang.String)">getStringValue</A></B>(org.eclipse.jdt.core.IAnnotation&nbsp;annotation,
               java.lang.String&nbsp;memberName)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the member value with the given member name from the <CODE>IAnnotation</CODE> as a <CODE>String</CODE> value.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;org.eclipse.jdt.core.dom.AbstractTypeDeclaration</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#getTypeDeclaration(org.eclipse.jdt.core.IType)">getTypeDeclaration</A></B>(org.eclipse.jdt.core.IType&nbsp;type)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the <CODE>AbstractTypeDeclaration</CODE> that corresponds to the given <CODE>IType</CODE>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#isAnnotationPresent(org.eclipse.jdt.core.IJavaElement, org.eclipse.jdt.core.dom.Annotation)">isAnnotationPresent</A></B>(org.eclipse.jdt.core.IJavaElement&nbsp;javaElement,
                    org.eclipse.jdt.core.dom.Annotation&nbsp;annotation)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Checks if the given <CODE>Annotation</CODE> is present on the <CODE>IJavaElement</CODE>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#isAnnotationPresent(org.eclipse.jdt.core.IJavaElement, java.lang.String)">isAnnotationPresent</A></B>(org.eclipse.jdt.core.IJavaElement&nbsp;javaElement,
                    java.lang.String&nbsp;annotationName)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Checks if the annotation with the given name is present on the <CODE>IJavaElement</CODE>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#removeAnnotation(org.eclipse.jdt.core.IJavaElement, org.eclipse.jdt.core.dom.Annotation)">removeAnnotation</A></B>(org.eclipse.jdt.core.IJavaElement&nbsp;javaElement,
                 org.eclipse.jdt.core.dom.Annotation&nbsp;annotation)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes the given <CODE>Annotation</CODE> from the <CODE>IJavaElement</CODE>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#removeImport(org.eclipse.jdt.core.IJavaElement, java.lang.String)">removeImport</A></B>(org.eclipse.jdt.core.IJavaElement&nbsp;javaElement,
             java.lang.String&nbsp;qualifiedName)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes an import from the compilation unit of the given <CODE>IJavaElement</CODE>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#removeMemberValuePair(org.eclipse.jdt.core.dom.NormalAnnotation, org.eclipse.jdt.core.dom.MemberValuePair)">removeMemberValuePair</A></B>(org.eclipse.jdt.core.dom.NormalAnnotation&nbsp;annotation,
                      org.eclipse.jdt.core.dom.MemberValuePair&nbsp;memberValuePair)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes the <CODE>MemberValuePair</CODE> from the <CODE>NormalAnnotation</CODE>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#updateMemberValuePair(org.eclipse.jdt.core.dom.MemberValuePair, org.eclipse.jdt.core.dom.ASTNode)">updateMemberValuePair</A></B>(org.eclipse.jdt.core.dom.MemberValuePair&nbsp;memberValuePair,
                      org.eclipse.jdt.core.dom.ASTNode&nbsp;value)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Updates the <CODE>MemberValuePair</CODE> value with the given <CODE>ASTNode</CODE>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#updateSingleMemberAnnotation(org.eclipse.jdt.core.dom.SingleMemberAnnotation, org.eclipse.jdt.core.dom.ASTNode)">updateSingleMemberAnnotation</A></B>(org.eclipse.jdt.core.dom.SingleMemberAnnotation&nbsp;annotation,
                             org.eclipse.jdt.core.dom.ASTNode&nbsp;value)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Updates the value of the <CODE>SingleMemberAnnotation</CODE> with the given <CODE>ASTNode</CODE>.</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="addImport(org.eclipse.jdt.core.IJavaElement, java.lang.String)"><!-- --></A><H3>
addImport</H3>
<PRE>
public static void <B>addImport</B>(org.eclipse.jdt.core.IJavaElement&nbsp;javaElement,
                             java.lang.String&nbsp;qualifiedName)
                      throws org.eclipse.core.runtime.CoreException</PRE>
<DL>
<DD>Adds an import to the compilation unit of the given <CODE>IJavaElement</CODE>.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>javaElement</CODE> - the java element which is used to get the compilation unit to add the import to.
 The following types of java elements are supported:
 <li>IJavaElement.COMPILATION_UNIT</li>
 <li>IJavaElement.PACKAGE_DECLARATION</li>
 <li>IJavaElement.TYPE</li>
 <li>IJavaElement.FIELD</li>
 <li>IJavaElement.METHOD</li>
 <li>IJavaElement.LOCAL_VARIABLE</li><DD><CODE>qualifiedName</CODE> - the import to add.
<DT><B>Throws:</B>
<DD><CODE>org.eclipse.core.runtime.CoreException</CODE> - the exception is thrown if the import rewrite fails.</DL>
</DD>
</DL>
<HR>

<A NAME="removeImport(org.eclipse.jdt.core.IJavaElement, java.lang.String)"><!-- --></A><H3>
removeImport</H3>
<PRE>
public static void <B>removeImport</B>(org.eclipse.jdt.core.IJavaElement&nbsp;javaElement,
                                java.lang.String&nbsp;qualifiedName)
                         throws org.eclipse.core.runtime.CoreException</PRE>
<DL>
<DD>Removes an import from the compilation unit of the given <CODE>IJavaElement</CODE>. The import will not be removed if the
 import type is referenced on more than one annotatable element in the source code. This method
 is intended to be used in conjunction with <A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#removeAnnotation(org.eclipse.jdt.core.IJavaElement, org.eclipse.jdt.core.dom.Annotation)"><CODE>removeAnnotation(IJavaElement, Annotation)</CODE></A>}.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>javaElement</CODE> - the java element which is used to get the compilation unit to remove the import from.
 The following types of java elements are supported:
 <li>IJavaElement.COMPILATION_UNIT</li>
 <li>IJavaElement.PACKAGE_DECLARATION</li>
 <li>IJavaElement.TYPE</li>
 <li>IJavaElement.FIELD</li>
 <li>IJavaElement.METHOD</li>
 <li>IJavaElement.LOCAL_VARIABLE</li><DD><CODE>qualifiedName</CODE> - the import to remove.
<DT><B>Throws:</B>
<DD><CODE>org.eclipse.core.runtime.CoreException</CODE> - the exception is thrown if the import rewrite fails.</DL>
</DD>
</DL>
<HR>

<A NAME="addAnnotation(org.eclipse.jdt.core.IJavaElement, org.eclipse.jdt.core.dom.Annotation)"><!-- --></A><H3>
addAnnotation</H3>
<PRE>
public static void <B>addAnnotation</B>(org.eclipse.jdt.core.IJavaElement&nbsp;javaElement,
                                 org.eclipse.jdt.core.dom.Annotation&nbsp;annotation)
                          throws org.eclipse.jdt.core.JavaModelException</PRE>
<DL>
<DD>Adds the given <CODE>Annotation</CODE> to the <CODE>IJavaElement</CODE>.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>javaElement</CODE> - the following types of java elements are supported:
 <li>IJavaElement.PACKAGE_DECLARATION</li>
 <li>IJavaElement.TYPE</li>
 <li>IJavaElement.FIELD</li>
 <li>IJavaElement.METHOD</li>
 <li>IJavaElement.LOCAL_VARIABLE</li><DD><CODE>annotation</CODE> - the annotation to add.
<DT><B>Throws:</B>
<DD><CODE>org.eclipse.jdt.core.JavaModelException</CODE> - A <CODE>JavaModelException</CODE> is thrown when the underlying compilation units
 buffer could not be accessed.</DL>
</DD>
</DL>
<HR>

<A NAME="removeAnnotation(org.eclipse.jdt.core.IJavaElement, org.eclipse.jdt.core.dom.Annotation)"><!-- --></A><H3>
removeAnnotation</H3>
<PRE>
public static void <B>removeAnnotation</B>(org.eclipse.jdt.core.IJavaElement&nbsp;javaElement,
                                    org.eclipse.jdt.core.dom.Annotation&nbsp;annotation)
                             throws org.eclipse.jdt.core.JavaModelException</PRE>
<DL>
<DD>Removes the given <CODE>Annotation</CODE> from the <CODE>IJavaElement</CODE>.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>javaElement</CODE> - the following types of java elements are supported:
 <li>IJavaElement.PACKAGE_DECLARATION</li>
 <li>IJavaElement.TYPE</li>
 <li>IJavaElement.FIELD</li>
 <li>IJavaElement.METHOD</li>
 <li>IJavaElement.LOCAL_VARIABLE</li><DD><CODE>annotation</CODE> - the annotation to remove.
<DT><B>Throws:</B>
<DD><CODE>org.eclipse.jdt.core.JavaModelException</CODE> - A <CODE>JavaModelException</CODE> is thrown when the underlying compilation units
 buffer could not be accessed.</DL>
</DD>
</DL>
<HR>

<A NAME="addMemberValuePair(org.eclipse.jdt.core.dom.NormalAnnotation, org.eclipse.jdt.core.dom.MemberValuePair)"><!-- --></A><H3>
addMemberValuePair</H3>
<PRE>
public static void <B>addMemberValuePair</B>(org.eclipse.jdt.core.dom.NormalAnnotation&nbsp;annotation,
                                      org.eclipse.jdt.core.dom.MemberValuePair&nbsp;memberValuePair)
                               throws org.eclipse.jdt.core.JavaModelException</PRE>
<DL>
<DD>Adds the <CODE>MemberValuePair</CODE> to the <CODE>NormalAnnotation</CODE>.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>annotation</CODE> - the normal annotation to add the member value pair to.<DD><CODE>memberValuePair</CODE> - the member value pair to add.
<DT><B>Throws:</B>
<DD><CODE>org.eclipse.jdt.core.JavaModelException</CODE> - A <CODE>JavaModelException</CODE> is thrown when the underlying compilation units
 buffer could not be accessed.</DL>
</DD>
</DL>
<HR>

<A NAME="removeMemberValuePair(org.eclipse.jdt.core.dom.NormalAnnotation, org.eclipse.jdt.core.dom.MemberValuePair)"><!-- --></A><H3>
removeMemberValuePair</H3>
<PRE>
public static void <B>removeMemberValuePair</B>(org.eclipse.jdt.core.dom.NormalAnnotation&nbsp;annotation,
                                         org.eclipse.jdt.core.dom.MemberValuePair&nbsp;memberValuePair)
                                  throws org.eclipse.jdt.core.JavaModelException</PRE>
<DL>
<DD>Removes the <CODE>MemberValuePair</CODE> from the <CODE>NormalAnnotation</CODE>.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>annotation</CODE> - the normal annotation from which to remove the member value pair.<DD><CODE>memberValuePair</CODE> - the member value pair to remove.
<DT><B>Throws:</B>
<DD><CODE>org.eclipse.jdt.core.JavaModelException</CODE> - A <CODE>JavaModelException</CODE> is thrown when the underlying compilation units
 buffer could not be accessed.</DL>
</DD>
</DL>
<HR>

<A NAME="updateMemberValuePair(org.eclipse.jdt.core.dom.MemberValuePair, org.eclipse.jdt.core.dom.ASTNode)"><!-- --></A><H3>
updateMemberValuePair</H3>
<PRE>
public static void <B>updateMemberValuePair</B>(org.eclipse.jdt.core.dom.MemberValuePair&nbsp;memberValuePair,
                                         org.eclipse.jdt.core.dom.ASTNode&nbsp;value)
                                  throws org.eclipse.jdt.core.JavaModelException</PRE>
<DL>
<DD>Updates the <CODE>MemberValuePair</CODE> value with the given <CODE>ASTNode</CODE>.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>memberValuePair</CODE> - the member value pair to update.<DD><CODE>value</CODE> - the value to set.
<DT><B>Throws:</B>
<DD><CODE>org.eclipse.jdt.core.JavaModelException</CODE> - A <CODE>JavaModelException</CODE> is thrown when the underlying compilation units
 buffer could not be accessed.</DL>
</DD>
</DL>
<HR>

<A NAME="updateSingleMemberAnnotation(org.eclipse.jdt.core.dom.SingleMemberAnnotation, org.eclipse.jdt.core.dom.ASTNode)"><!-- --></A><H3>
updateSingleMemberAnnotation</H3>
<PRE>
public static void <B>updateSingleMemberAnnotation</B>(org.eclipse.jdt.core.dom.SingleMemberAnnotation&nbsp;annotation,
                                                org.eclipse.jdt.core.dom.ASTNode&nbsp;value)
                                         throws org.eclipse.jdt.core.JavaModelException</PRE>
<DL>
<DD>Updates the value of the <CODE>SingleMemberAnnotation</CODE> with the given <CODE>ASTNode</CODE>.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>annotation</CODE> - the single member annotation to update.<DD><CODE>value</CODE> - the value to set.
<DT><B>Throws:</B>
<DD><CODE>org.eclipse.jdt.core.JavaModelException</CODE> - A <CODE>JavaModelException</CODE> is thrown when the underlying compilation units
 buffer could not be accessed.</DL>
</DD>
</DL>
<HR>

<A NAME="createAddImportTextEdit(org.eclipse.jdt.core.IJavaElement, java.lang.String)"><!-- --></A><H3>
createAddImportTextEdit</H3>
<PRE>
public static org.eclipse.text.edits.TextEdit <B>createAddImportTextEdit</B>(org.eclipse.jdt.core.IJavaElement&nbsp;javaElement,
                                                                      java.lang.String&nbsp;qualifiedName)
                                                               throws org.eclipse.core.runtime.CoreException</PRE>
<DL>
<DD>Creates a <CODE>TextEdit</CODE> object representing the add import change to the source code of the java elements compilation unit.
 The compilation unit itself is not modified.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>javaElement</CODE> - one of the following types of java element:
 <li>IJavaElement.COMPILATION_UNIT</li>
 <li>IJavaElement.PACKAGE_DECLARATION</li>
 <li>IJavaElement.TYPE</li>
 <li>IJavaElement.FIELD</li>
 <li>IJavaElement.METHOD</li>
 <li>IJavaElement.LOCAL_VARIABLE</li>
 <p>
 The java element will be used to create a <CODE>CompilationUnit</CODE> which will in turn be used to create an <CODE>ImportRewrite</CODE>.
 </p><DD><CODE>qualifiedName</CODE> - the import to add.
<DT><B>Returns:</B><DD>text edit object describing the add import changes.
<DT><B>Throws:</B>
<DD><CODE>org.eclipse.core.runtime.CoreException</CODE> - the exception is thrown if the import rewrite fails.</DL>
</DD>
</DL>
<HR>

<A NAME="createRemoveImportTextEdit(org.eclipse.jdt.core.IJavaElement, java.lang.String)"><!-- --></A><H3>
createRemoveImportTextEdit</H3>
<PRE>
public static org.eclipse.text.edits.TextEdit <B>createRemoveImportTextEdit</B>(org.eclipse.jdt.core.IJavaElement&nbsp;javaElement,
                                                                         java.lang.String&nbsp;qualifiedName)
                                                                  throws org.eclipse.core.runtime.CoreException</PRE>
<DL>
<DD>Creates a <CODE>TextEdit</CODE> object representing the remove import change to the source code of the java elements compilation unit.
 The compilation unit itself is not modified. No change will be recorded if the import type is referenced on more than one an annotatable
 element in the source code. This method should be called in conjunction with <A HREF="../../../../../../../org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html#createRemoveAnnotationTextEdit(org.eclipse.jdt.core.IJavaElement, org.eclipse.jdt.core.dom.Annotation)"><CODE>createRemoveAnnotationTextEdit(IJavaElement, Annotation)</CODE></A>}.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>javaElement</CODE> - one of the following types of java element:
 <li>IJavaElement.COMPILATION_UNIT</li>
 <li>IJavaElement.PACKAGE_DECLARATION</li>
 <li>IJavaElement.TYPE</li>
 <li>IJavaElement.FIELD</li>
 <li>IJavaElement.METHOD</li>
 <li>IJavaElement.LOCAL_VARIABLE</li>
 <p>
 The java element will be used to create a <CODE>CompilationUnit</CODE> which will in turn be used to create an <CODE>ImportRewrite</CODE>.
 </p><DD><CODE>qualifiedName</CODE> - the annotation import to remove.
<DT><B>Returns:</B><DD>text edit object describing the remove import changes.
<DT><B>Throws:</B>
<DD><CODE>org.eclipse.core.runtime.CoreException</CODE> - the exception is thrown if the import rewrite fails.</DL>
</DD>
</DL>
<HR>

<A NAME="createAddAnnotationTextEdit(org.eclipse.jdt.core.IJavaElement, org.eclipse.jdt.core.dom.Annotation)"><!-- --></A><H3>
createAddAnnotationTextEdit</H3>
<PRE>
public static org.eclipse.text.edits.TextEdit <B>createAddAnnotationTextEdit</B>(org.eclipse.jdt.core.IJavaElement&nbsp;javaElement,
                                                                          org.eclipse.jdt.core.dom.Annotation&nbsp;annotation)
                                                                   throws org.eclipse.jdt.core.JavaModelException</PRE>
<DL>
<DD>Creates a <CODE>TextEdit</CODE> object representing the add annotation change to the source code of the java elements compilation unit.
 The compilation unit itself is not modified.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>javaElement</CODE> - one of the following types of java element:
 <li>IJavaElement.PACKAGE_DECLARATION</li>
 <li>IJavaElement.TYPE</li>
 <li>IJavaElement.FIELD</li>
 <li>IJavaElement.METHOD</li>
 <li>IJavaElement.LOCAL_VARIABLE</li><DD><CODE>annotation</CODE> - the annotation to add.
<DT><B>Returns:</B><DD>text edit object describing the add annotation changes. Returns a <CODE>MultiTextEdit</CODE> if the given java element isn't supported.
<DT><B>Throws:</B>
<DD><CODE>org.eclipse.jdt.core.JavaModelException</CODE> - A <CODE>JavaModelException</CODE> is thrown when the underlying compilation units
 buffer could not be accessed.</DL>
</DD>
</DL>
<HR>

<A NAME="createRemoveAnnotationTextEdit(org.eclipse.jdt.core.IJavaElement, org.eclipse.jdt.core.dom.Annotation)"><!-- --></A><H3>
createRemoveAnnotationTextEdit</H3>
<PRE>
public static org.eclipse.text.edits.TextEdit <B>createRemoveAnnotationTextEdit</B>(org.eclipse.jdt.core.IJavaElement&nbsp;javaElement,
                                                                             org.eclipse.jdt.core.dom.Annotation&nbsp;annotation)
                                                                      throws org.eclipse.jdt.core.JavaModelException</PRE>
<DL>
<DD>Creates a <CODE>TextEdit</CODE> object representing the remove annotation change to the source code of the java elements compilation unit.
 The compilation unit itself is not modified.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>javaElement</CODE> - one of the following types of java element:
 <li>IJavaElement.PACKAGE_DECLARATION</li>
 <li>IJavaElement.TYPE</li>
 <li>IJavaElement.FIELD</li>
 <li>IJavaElement.METHOD</li>
 <li>IJavaElement.LOCAL_VARIABLE</li><DD><CODE>annotation</CODE> - the annotation to add.
<DT><B>Returns:</B><DD>text edit object describing the add annotation changes. Returns a <CODE>MultiTextEdit</CODE> if the given java element isn't supported.
<DT><B>Throws:</B>
<DD><CODE>org.eclipse.jdt.core.JavaModelException</CODE> - A <CODE>JavaModelException</CODE> is thrown when the underlying compilation units
 buffer could not be accessed.</DL>
</DD>
</DL>
<HR>

<A NAME="createAddMemberValuePairTextEdit(org.eclipse.jdt.core.dom.NormalAnnotation, org.eclipse.jdt.core.dom.MemberValuePair)"><!-- --></A><H3>
createAddMemberValuePairTextEdit</H3>
<PRE>
public static org.eclipse.text.edits.TextEdit <B>createAddMemberValuePairTextEdit</B>(org.eclipse.jdt.core.dom.NormalAnnotation&nbsp;annotation,
                                                                               org.eclipse.jdt.core.dom.MemberValuePair&nbsp;memberValuePair)
                                                                        throws org.eclipse.jdt.core.JavaModelException</PRE>
<DL>
<DD>Creates a <CODE>TextEdit</CODE> object representing the change of adding the <CODE>MemberValuePair</CODE> to the <CODE>NormalAnnotation</CODE>.
 The underlying compilation unit itself is not modified.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>annotation</CODE> - the normal annotation to add the member value pair to.<DD><CODE>memberValuePair</CODE> - the member value pair to add.
<DT><B>Returns:</B><DD>text edit object describing the add member value pair change.
<DT><B>Throws:</B>
<DD><CODE>org.eclipse.jdt.core.JavaModelException</CODE> - A <CODE>JavaModelException</CODE> is thrown when
 the underlying compilation units buffer could not be accessed.</DL>
</DD>
</DL>
<HR>

<A NAME="createRemoveMemberValuePairTextEdit(org.eclipse.jdt.core.dom.NormalAnnotation, org.eclipse.jdt.core.dom.MemberValuePair)"><!-- --></A><H3>
createRemoveMemberValuePairTextEdit</H3>
<PRE>
public static org.eclipse.text.edits.TextEdit <B>createRemoveMemberValuePairTextEdit</B>(org.eclipse.jdt.core.dom.NormalAnnotation&nbsp;annotation,
                                                                                  org.eclipse.jdt.core.dom.MemberValuePair&nbsp;memberValuePair)
                                                                           throws org.eclipse.jdt.core.JavaModelException</PRE>
<DL>
<DD>Creates a <CODE>TextEdit</CODE> object representing the change of removing the <CODE>MemberValuePair</CODE> from the <CODE>NormalAnnotation</CODE>.
 The underlying compilation unit itself is not modified.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>annotation</CODE> - the normal annotation to remove the member value pair from.<DD><CODE>memberValuePair</CODE> - the member value pair to remove.
<DT><B>Returns:</B><DD>text edit object describing the remove member value pair change.
<DT><B>Throws:</B>
<DD><CODE>org.eclipse.jdt.core.JavaModelException</CODE> - A <CODE>JavaModelException</CODE> is thrown when
 the underlying compilation units buffer could not be accessed.</DL>
</DD>
</DL>
<HR>

<A NAME="createUpdateMemberValuePairTextEdit(org.eclipse.jdt.core.dom.MemberValuePair, org.eclipse.jdt.core.dom.ASTNode)"><!-- --></A><H3>
createUpdateMemberValuePairTextEdit</H3>
<PRE>
public static org.eclipse.text.edits.TextEdit <B>createUpdateMemberValuePairTextEdit</B>(org.eclipse.jdt.core.dom.MemberValuePair&nbsp;memberValuePair,
                                                                                  org.eclipse.jdt.core.dom.ASTNode&nbsp;value)
                                                                           throws org.eclipse.jdt.core.JavaModelException</PRE>
<DL>
<DD>Creates a <CODE>TextEdit</CODE> object representing the change of updating the <CODE>MemberValuePair</CODE> with the <CODE>ASTNode</CODE> value.
 The underlying compilation unit itself is not modified.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>memberValuePair</CODE> - the member value pair to update.<DD><CODE>value</CODE> - the value to set.
<DT><B>Returns:</B><DD>text edit object describing the update member value pair change.
<DT><B>Throws:</B>
<DD><CODE>org.eclipse.jdt.core.JavaModelException</CODE> - A <CODE>JavaModelException</CODE> is thrown when
 the underlying compilation units buffer could not be accessed.</DL>
</DD>
</DL>
<HR>

<A NAME="createUpdateSingleMemberAnnotationTextEdit(org.eclipse.jdt.core.dom.SingleMemberAnnotation, org.eclipse.jdt.core.dom.ASTNode)"><!-- --></A><H3>
createUpdateSingleMemberAnnotationTextEdit</H3>
<PRE>
public static org.eclipse.text.edits.TextEdit <B>createUpdateSingleMemberAnnotationTextEdit</B>(org.eclipse.jdt.core.dom.SingleMemberAnnotation&nbsp;annotation,
                                                                                         org.eclipse.jdt.core.dom.ASTNode&nbsp;value)
                                                                                  throws org.eclipse.jdt.core.JavaModelException</PRE>
<DL>
<DD>Creates a <CODE>TextEdit</CODE> object representing the change of updating the <CODE>SingleMemberAnnotation</CODE> with the <CODE>ASTNode</CODE> value.
 The underlying compilation unit itself is not modified.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>annotation</CODE> - the single memeber annotation to update.<DD><CODE>value</CODE> - the value to set.
<DT><B>Returns:</B><DD>text edit object describing the update single member annotation change.
<DT><B>Throws:</B>
<DD><CODE>org.eclipse.jdt.core.JavaModelException</CODE> - A <CODE>JavaModelException</CODE> is thrown when
 the underlying compilation units buffer could not be accessed.</DL>
</DD>
</DL>
<HR>

<A NAME="getCompilationUnitFromJavaElement(org.eclipse.jdt.core.IJavaElement)"><!-- --></A><H3>
getCompilationUnitFromJavaElement</H3>
<PRE>
public static org.eclipse.jdt.core.ICompilationUnit <B>getCompilationUnitFromJavaElement</B>(org.eclipse.jdt.core.IJavaElement&nbsp;javaElement)</PRE>
<DL>
<DD>Returns a <CODE>ICompilationUnit</CODE> for the given <CODE>IJavaElement</CODE>.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>javaElement</CODE> - one of the following types of java element:
 <li>IJavaElement.COMPILATION_UNIT</li>
 <li>IJavaElement.PACKAGE_DECLARATION</li>
 <li>IJavaElement.TYPE</li>
 <li>IJavaElement.FIELD</li>
 <li>IJavaElement.METHOD</li>
 <li>IJavaElement.LOCAL_VARIABLE</li>
<DT><B>Returns:</B><DD>a compilation unit.</DL>
</DD>
</DL>
<HR>

<A NAME="getTypeDeclaration(org.eclipse.jdt.core.IType)"><!-- --></A><H3>
getTypeDeclaration</H3>
<PRE>
public static org.eclipse.jdt.core.dom.AbstractTypeDeclaration <B>getTypeDeclaration</B>(org.eclipse.jdt.core.IType&nbsp;type)</PRE>
<DL>
<DD>Returns the <CODE>AbstractTypeDeclaration</CODE> that corresponds to the given <CODE>IType</CODE>.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>type</CODE> - the type.
<DT><B>Returns:</B><DD>a type declaration or null if not found.</DL>
</DD>
</DL>
<HR>

<A NAME="getMethodDeclaration(org.eclipse.jdt.core.IMethod)"><!-- --></A><H3>
getMethodDeclaration</H3>
<PRE>
public static org.eclipse.jdt.core.dom.MethodDeclaration <B>getMethodDeclaration</B>(org.eclipse.jdt.core.IMethod&nbsp;method)</PRE>
<DL>
<DD>Returns the <CODE>MethodDeclaration</CODE> that corresponds to the given <CODE>IMethod</CODE>.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>method</CODE> - the method
<DT><B>Returns:</B><DD>a method declaration or null if not found.</DL>
</DD>
</DL>
<HR>

<A NAME="getFieldDeclaration(org.eclipse.jdt.core.IField)"><!-- --></A><H3>
getFieldDeclaration</H3>
<PRE>
public static org.eclipse.jdt.core.dom.FieldDeclaration <B>getFieldDeclaration</B>(org.eclipse.jdt.core.IField&nbsp;field)</PRE>
<DL>
<DD>Returns the <CODE>FieldDeclaration</CODE> that corresponds to the given <CODE>IField</CODE>.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>field</CODE> - the field
<DT><B>Returns:</B><DD>a field declaration or null if not found.</DL>
</DD>
</DL>
<HR>

<A NAME="getSingleVariableDeclaration(org.eclipse.jdt.core.ILocalVariable)"><!-- --></A><H3>
getSingleVariableDeclaration</H3>
<PRE>
public static org.eclipse.jdt.core.dom.SingleVariableDeclaration <B>getSingleVariableDeclaration</B>(org.eclipse.jdt.core.ILocalVariable&nbsp;javaElement)</PRE>
<DL>
<DD>Returns the <CODE>SingleVariableDeclaration</CODE> that corresponds to the given <CODE>ILocalVariable</CODE>.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>javaElement</CODE> - the local variable
<DT><B>Returns:</B><DD>a single variable declaration or null if not found.</DL>
</DD>
</DL>
<HR>

<A NAME="getAnnotationName(org.eclipse.jdt.core.dom.Annotation)"><!-- --></A><H3>
getAnnotationName</H3>
<PRE>
public static java.lang.String <B>getAnnotationName</B>(org.eclipse.jdt.core.dom.Annotation&nbsp;annotation)</PRE>
<DL>
<DD>Returns the annotations type name. If the annotation name is a simple name, the result is the
 name's identifier. If the name is a qualified name, the result is the name of the qualifier
 followed by "." followed by the name's identifier.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>annotation</CODE> - the annotation.
<DT><B>Returns:</B><DD>the annotation name. The simple name or the fully qualified name.</DL>
</DD>
</DL>
<HR>

<A NAME="compareTypeNames(org.eclipse.jdt.core.dom.AbstractTypeDeclaration, org.eclipse.jdt.core.IType)"><!-- --></A><H3>
compareTypeNames</H3>
<PRE>
public static boolean <B>compareTypeNames</B>(org.eclipse.jdt.core.dom.AbstractTypeDeclaration&nbsp;abstractTypeDeclaration,
                                       org.eclipse.jdt.core.IType&nbsp;type)</PRE>
<DL>
<DD>Compares the <CODE>AbstractTypeDeclaration</CODE> and <CODE>IType</CODE>.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>abstractTypeDeclaration</CODE> - the type declaration.<DD><CODE>type</CODE> - the type.
<DT><B>Returns:</B><DD><code>true</code> if the names match.</DL>
</DD>
</DL>
<HR>

<A NAME="compareMethods(org.eclipse.jdt.core.dom.MethodDeclaration, org.eclipse.jdt.core.IMethod)"><!-- --></A><H3>
compareMethods</H3>
<PRE>
public static boolean <B>compareMethods</B>(org.eclipse.jdt.core.dom.MethodDeclaration&nbsp;methodDeclaration,
                                     org.eclipse.jdt.core.IMethod&nbsp;method)</PRE>
<DL>
<DD>Compares the <CODE>MethodDeclaration</CODE> and <CODE>IMethod</CODE>.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>methodDeclaration</CODE> - the method declaration.<DD><CODE>method</CODE> - the method.
<DT><B>Returns:</B><DD><code>true</code> if the method names and parameter types match.</DL>
</DD>
</DL>
<HR>

<A NAME="compareMethods(org.eclipse.jdt.core.dom.MethodDeclaration, org.eclipse.jdt.core.dom.MethodDeclaration)"><!-- --></A><H3>
compareMethods</H3>
<PRE>
public static boolean <B>compareMethods</B>(org.eclipse.jdt.core.dom.MethodDeclaration&nbsp;methodOne,
                                     org.eclipse.jdt.core.dom.MethodDeclaration&nbsp;methodTwo)</PRE>
<DL>
<DD>Compares the two <CODE>MethodDeclaration</CODE>.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>methodOne</CODE> - the first method declaration.<DD><CODE>methodTwo</CODE> - the second method declaration.
<DT><B>Returns:</B><DD><code>true</code> if the method names and parameter types match.</DL>
</DD>
</DL>
<HR>

<A NAME="compareMethods(com.sun.mirror.declaration.MethodDeclaration, com.sun.mirror.declaration.MethodDeclaration)"><!-- --></A><H3>
compareMethods</H3>
<PRE>
public static boolean <B>compareMethods</B>(com.sun.mirror.declaration.MethodDeclaration&nbsp;methodOne,
                                     com.sun.mirror.declaration.MethodDeclaration&nbsp;methodTwo)</PRE>
<DL>
<DD>Compares the two <CODE>MethodDeclaration</CODE>.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>methodOne</CODE> - the first method declaration.<DD><CODE>methodTwo</CODE> - the second method declaration.
<DT><B>Returns:</B><DD><code>true</code> if the method names and parameter types match.</DL>
</DD>
</DL>
<HR>

<A NAME="compareFieldNames(org.eclipse.jdt.core.dom.FieldDeclaration, org.eclipse.jdt.core.IField)"><!-- --></A><H3>
compareFieldNames</H3>
<PRE>
public static boolean <B>compareFieldNames</B>(org.eclipse.jdt.core.dom.FieldDeclaration&nbsp;fieldDeclaration,
                                        org.eclipse.jdt.core.IField&nbsp;field)</PRE>
<DL>
<DD>Compares the <CODE>FieldDeclaration</CODE> and <CODE>IField</CODE>.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>fieldDeclaration</CODE> - the field declaration.<DD><CODE>field</CODE> - the field.
<DT><B>Returns:</B><DD><code>true</code> if the field names match.</DL>
</DD>
</DL>
<HR>

<A NAME="isAnnotationPresent(org.eclipse.jdt.core.IJavaElement, org.eclipse.jdt.core.dom.Annotation)"><!-- --></A><H3>
isAnnotationPresent</H3>
<PRE>
public static boolean <B>isAnnotationPresent</B>(org.eclipse.jdt.core.IJavaElement&nbsp;javaElement,
                                          org.eclipse.jdt.core.dom.Annotation&nbsp;annotation)</PRE>
<DL>
<DD>Checks if the given <CODE>Annotation</CODE> is present on the <CODE>IJavaElement</CODE>.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>javaElement</CODE> - one of the following types of java element:
 <li>IJavaElement.PACKAGE_DECLARATION</li>
 <li>IJavaElement.TYPE</li>
 <li>IJavaElement.FIELD</li>
 <li>IJavaElement.METHOD</li>
 <li>IJavaElement.LOCAL_VARIABLE</li><DD><CODE>annotation</CODE> - the annotation.
<DT><B>Returns:</B><DD><code>true</code> if the annotation is present.</DL>
</DD>
</DL>
<HR>

<A NAME="isAnnotationPresent(org.eclipse.jdt.core.IJavaElement, java.lang.String)"><!-- --></A><H3>
isAnnotationPresent</H3>
<PRE>
public static boolean <B>isAnnotationPresent</B>(org.eclipse.jdt.core.IJavaElement&nbsp;javaElement,
                                          java.lang.String&nbsp;annotationName)</PRE>
<DL>
<DD>Checks if the annotation with the given name is present on the <CODE>IJavaElement</CODE>.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>javaElement</CODE> - one of the following types of java element:
 <li>IJavaElement.PACKAGE_DECLARATION</li>
 <li>IJavaElement.TYPE</li>
 <li>IJavaElement.FIELD</li>
 <li>IJavaElement.METHOD</li>
 <li>IJavaElement.LOCAL_VARIABLE</li><DD><CODE>annotationName</CODE> - the annotation name.
<DT><B>Returns:</B><DD><code>true</code> if the annotation is present.</DL>
</DD>
</DL>
<HR>

<A NAME="getAnnotations(org.eclipse.jdt.core.IJavaElement)"><!-- --></A><H3>
getAnnotations</H3>
<PRE>
public static java.util.List&lt;org.eclipse.jdt.core.dom.Annotation&gt; <B>getAnnotations</B>(org.eclipse.jdt.core.IJavaElement&nbsp;javaElement)</PRE>
<DL>
<DD>Returns a list of all the <CODE>Annotation</CODE> that are present on the given <CODE>IJavaElement</CODE>
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>javaElement</CODE> - one of the following types of java element:
 <li>IJavaElement.PACKAGE_DECLARATION</li>
 <li>IJavaElement.TYPE</li>
 <li>IJavaElement.FIELD</li>
 <li>IJavaElement.METHOD</li>
 <li>IJavaElement.LOCAL_VARIABLE</li>
<DT><B>Returns:</B><DD>a list of annotations.</DL>
</DD>
</DL>
<HR>

<A NAME="getSingleVariableDeclarations(org.eclipse.jdt.core.IMethod)"><!-- --></A><H3>
getSingleVariableDeclarations</H3>
<PRE>
public static java.util.List&lt;org.eclipse.jdt.core.dom.SingleVariableDeclaration&gt; <B>getSingleVariableDeclarations</B>(org.eclipse.jdt.core.IMethod&nbsp;method)</PRE>
<DL>
<DD>Returns a list of all the <CODE>SingleVariableDeclaration</CODE> for the given <CODE>IMethod</CODE>.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>method</CODE> - the method.
<DT><B>Returns:</B><DD>a list of single variable declarations.</DL>
</DD>
</DL>
<HR>

<A NAME="getLocalVariable(org.eclipse.jdt.core.IMethod, int)"><!-- --></A><H3>
getLocalVariable</H3>
<PRE>
public static org.eclipse.jdt.core.ILocalVariable <B>getLocalVariable</B>(org.eclipse.jdt.core.IMethod&nbsp;method,
                                                                   int&nbsp;offset)</PRE>
<DL>
<DD>Returns the <CODE>ILocalVariable</CODE> at the given offset position in the source file.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>method</CODE> - the method in which the local variable is declared.<DD><CODE>offset</CODE> - the character index of the local variable in the source file.
 The offset must be >= to the start position of the node representing the local variable and
 <= the nodes start position plus length.
<DT><B>Returns:</B><DD>the local variable or null if not found.</DL>
</DD>
</DL>
<HR>

<A NAME="getLocalVariable(org.eclipse.jdt.core.IMethod, java.lang.String)"><!-- --></A><H3>
getLocalVariable</H3>
<PRE>
public static org.eclipse.jdt.core.ILocalVariable <B>getLocalVariable</B>(org.eclipse.jdt.core.IMethod&nbsp;method,
                                                                   java.lang.String&nbsp;paramName)</PRE>
<DL>
<DD>Returns the <CODE>ILocalVariable</CODE> with the given name within the declared <CODE>IMethod</CODE>.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>method</CODE> - the method in which the local variable is declared.<DD><CODE>paramName</CODE> - the local variable name.
<DT><B>Returns:</B><DD>the local variable or null if not found.</DL>
</DD>
</DL>
<HR>

<A NAME="getAnnotation(org.eclipse.jdt.core.IJavaElement, java.lang.Class)"><!-- --></A><H3>
getAnnotation</H3>
<PRE>
public static org.eclipse.jdt.core.dom.Annotation <B>getAnnotation</B>(org.eclipse.jdt.core.IJavaElement&nbsp;javaElement,
                                                                java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;&nbsp;annotation)</PRE>
<DL>
<DD>Returns the AST <CODE>Annotation</CODE> that corresponds to the given <CODE>Annotation</CODE> class
 on the <CODE>IJavaElement</CODE>.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>javaElement</CODE> - one of the following types of java element:
 <li>IJavaElement.PACKAGE_DECLARATION</li>
 <li>IJavaElement.TYPE</li>
 <li>IJavaElement.FIELD</li>
 <li>IJavaElement.METHOD</li>
 <li>IJavaElement.LOCAL_VARIABLE</li><DD><CODE>annotation</CODE> - the <CODE>Annotation</CODE> class.
<DT><B>Returns:</B><DD>the AST annotation or null if not found.</DL>
</DD>
</DL>
<HR>

<A NAME="getAnnotation(com.sun.mirror.declaration.Declaration, java.lang.Class)"><!-- --></A><H3>
getAnnotation</H3>
<PRE>
public static com.sun.mirror.declaration.AnnotationMirror <B>getAnnotation</B>(com.sun.mirror.declaration.Declaration&nbsp;declaration,
                                                                        java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;&nbsp;annotation)</PRE>
<DL>
<DD>Returns the <CODE>AnnotationMirror</CODE> that corresponds to the given <CODE>Annotation</CODE> class
 on the <CODE>Declaration</CODE>.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>declaration</CODE> - the declaration<DD><CODE>annotation</CODE> - the <CODE>Annotation</CODE> class.
<DT><B>Returns:</B><DD>the annotation mirror or null if not found.</DL>
</DD>
</DL>
<HR>

<A NAME="getAnnotation(java.lang.Class, org.eclipse.jdt.core.IAnnotatable)"><!-- --></A><H3>
getAnnotation</H3>
<PRE>
public static org.eclipse.jdt.core.IAnnotation <B>getAnnotation</B>(java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;&nbsp;annotation,
                                                             org.eclipse.jdt.core.IAnnotatable&nbsp;annotatable)
                                                      throws org.eclipse.jdt.core.JavaModelException</PRE>
<DL>
<DD>Returns the JDT <CODE>IAnnotation</CODE> that corresponds to the given <CODE>Annotation</CODE> class
 on the <CODE>IAnnotatable</CODE> element.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>annotation</CODE> - the <CODE>Annotation</CODE> class.<DD><CODE>annotatable</CODE> - a package declaration, a type, a method, a field or a local variable in a compilation unit.
<DT><B>Returns:</B><DD>the annotation or null if not found.
<DT><B>Throws:</B>
<DD><CODE>org.eclipse.jdt.core.JavaModelException</CODE> - if the annotatable element does not exist or if an exception occurs while accessing its corresponding resource.</DL>
</DD>
</DL>
<HR>

<A NAME="getAnnotationValue(com.sun.mirror.declaration.AnnotationMirror, java.lang.String)"><!-- --></A><H3>
getAnnotationValue</H3>
<PRE>
public static com.sun.mirror.declaration.AnnotationValue <B>getAnnotationValue</B>(com.sun.mirror.declaration.AnnotationMirror&nbsp;mirror,
                                                                            java.lang.String&nbsp;memberName)</PRE>
<DL>
<DD>Returns the <CODE>AnnotationValue</CODE> with the given member name that is declared within the <CODE>AnnotationMirror</CODE>.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>mirror</CODE> - the annotation mirror.<DD><CODE>memberName</CODE> - the member name.
<DT><B>Returns:</B><DD>the annotation value or null if not found.</DL>
</DD>
</DL>
<HR>

<A NAME="getAnnotationValue(org.eclipse.jdt.core.dom.NormalAnnotation, java.lang.String)"><!-- --></A><H3>
getAnnotationValue</H3>
<PRE>
public static org.eclipse.jdt.core.dom.Expression <B>getAnnotationValue</B>(org.eclipse.jdt.core.dom.NormalAnnotation&nbsp;normalAnnotation,
                                                                     java.lang.String&nbsp;memberName)</PRE>
<DL>
<DD>Returns the <CODE>NormalAnnotation</CODE> member value pair value with the given member name.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>normalAnnotation</CODE> - the normal annotation.<DD><CODE>memberName</CODE> - the member value pair member name.
<DT><B>Returns:</B><DD>the value expression or null if not found.</DL>
</DD>
</DL>
<HR>

<A NAME="getAnnotationValue(org.eclipse.jdt.core.IAnnotation, java.lang.String)"><!-- --></A><H3>
getAnnotationValue</H3>
<PRE>
public static java.lang.Object <B>getAnnotationValue</B>(org.eclipse.jdt.core.IAnnotation&nbsp;annotation,
                                                  java.lang.String&nbsp;memberName)
                                           throws org.eclipse.jdt.core.JavaModelException</PRE>
<DL>
<DD>Returns the JDT <CODE>IAnnotation</CODE> member value pair value with the given member name.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>annotation</CODE> - the annotation.<DD><CODE>memberName</CODE> - the member name.
<DT><B>Returns:</B><DD>an object representing the member value pairs value.
<DT><B>Throws:</B>
<DD><CODE>org.eclipse.jdt.core.JavaModelException</CODE> - if the annotation does not exist or if an exception occurs while accessing its corresponding resource.</DL>
</DD>
</DL>
<HR>

<A NAME="getMemberValuePair(org.eclipse.jdt.core.dom.NormalAnnotation, java.lang.String)"><!-- --></A><H3>
getMemberValuePair</H3>
<PRE>
public static org.eclipse.jdt.core.dom.MemberValuePair <B>getMemberValuePair</B>(org.eclipse.jdt.core.dom.NormalAnnotation&nbsp;normalAnnotation,
                                                                          java.lang.String&nbsp;memberName)</PRE>
<DL>
<DD>Returns the <CODE>MemberValuePair</CODE> with the given member name from the <CODE>NormalAnnotation</CODE>.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>normalAnnotation</CODE> - the normal annotation.<DD><CODE>memberName</CODE> - the member name of the member value pair to return.
<DT><B>Returns:</B><DD>a member value pair or null if no member value pair with the given member name can be found.</DL>
</DD>
</DL>
<HR>

<A NAME="getStringValue(com.sun.mirror.declaration.AnnotationMirror, java.lang.String)"><!-- --></A><H3>
getStringValue</H3>
<PRE>
public static java.lang.String <B>getStringValue</B>(com.sun.mirror.declaration.AnnotationMirror&nbsp;mirror,
                                              java.lang.String&nbsp;memberName)</PRE>
<DL>
<DD>Returns the member value with the given member name from the <CODE>AnnotationMirror</CODE> as a <CODE>String</CODE> value.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>mirror</CODE> - the annotation mirror.<DD><CODE>memberName</CODE> - the member name.
<DT><B>Returns:</B><DD>the member value as a String or null if no member with the member name can be found.</DL>
</DD>
</DL>
<HR>

<A NAME="getStringValue(org.eclipse.jdt.core.dom.Annotation, java.lang.String)"><!-- --></A><H3>
getStringValue</H3>
<PRE>
public static java.lang.String <B>getStringValue</B>(org.eclipse.jdt.core.dom.Annotation&nbsp;annotation,
                                              java.lang.String&nbsp;memberName)</PRE>
<DL>
<DD>Returns the member value with the given member name from the <CODE>Annotation</CODE> as a <CODE>String</CODE> value.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>annotation</CODE> - the AST annotation.<DD><CODE>memberName</CODE> - the member name.
<DT><B>Returns:</B><DD>the member value as a String or null if no member with the member name can be found.</DL>
</DD>
</DL>
<HR>

<A NAME="getStringValue(org.eclipse.jdt.core.IAnnotation, java.lang.String)"><!-- --></A><H3>
getStringValue</H3>
<PRE>
public static java.lang.String <B>getStringValue</B>(org.eclipse.jdt.core.IAnnotation&nbsp;annotation,
                                              java.lang.String&nbsp;memberName)
                                       throws org.eclipse.jdt.core.JavaModelException</PRE>
<DL>
<DD>Returns the member value with the given member name from the <CODE>IAnnotation</CODE> as a <CODE>String</CODE> value.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>annotation</CODE> - the JDT annotation.<DD><CODE>memberName</CODE> - the member name.
<DT><B>Returns:</B><DD>the member value as a String or null if no member with the member name can be found.
<DT><B>Throws:</B>
<DD><CODE>org.eclipse.jdt.core.JavaModelException</CODE> - if the annotation does not exist or if an exception occurs while accessing
 its corresponding resource.</DL>
</DD>
</DL>
<HR>

<A NAME="getBooleanValue(com.sun.mirror.declaration.AnnotationMirror, java.lang.String)"><!-- --></A><H3>
getBooleanValue</H3>
<PRE>
public static java.lang.Boolean <B>getBooleanValue</B>(com.sun.mirror.declaration.AnnotationMirror&nbsp;mirror,
                                                java.lang.String&nbsp;memberName)</PRE>
<DL>
<DD>Returns the member value with the given member name from the <CODE>AnnotationMirror</CODE> as a <CODE>Boolean</CODE> value.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>mirror</CODE> - the annotation mirror.<DD><CODE>memberName</CODE> - the member name.
<DT><B>Returns:</B><DD>the member value as a Boolean or null if no member with the member name can be found.</DL>
</DD>
</DL>
<HR>

<A NAME="getBooleanValue(org.eclipse.jdt.core.dom.Annotation, java.lang.String)"><!-- --></A><H3>
getBooleanValue</H3>
<PRE>
public static java.lang.Boolean <B>getBooleanValue</B>(org.eclipse.jdt.core.dom.Annotation&nbsp;annotation,
                                                java.lang.String&nbsp;memberName)</PRE>
<DL>
<DD>Returns the member value with the given member name from the <CODE>Annotation</CODE> as a <CODE>Boolean</CODE> value.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>annotation</CODE> - the AST annotation.<DD><CODE>memberName</CODE> - the member name.
<DT><B>Returns:</B><DD>the member value as a Boolean or null if no member with the member name can be found.</DL>
</DD>
</DL>
<HR>

<A NAME="getBooleanValue(org.eclipse.jdt.core.IAnnotation, java.lang.String)"><!-- --></A><H3>
getBooleanValue</H3>
<PRE>
public static java.lang.Boolean <B>getBooleanValue</B>(org.eclipse.jdt.core.IAnnotation&nbsp;annotation,
                                                java.lang.String&nbsp;memberName)
                                         throws org.eclipse.jdt.core.JavaModelException</PRE>
<DL>
<DD>Returns the  member value with the given member name from the <CODE>IAnnotation</CODE> as a <CODE>Boolean</CODE> value.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>annotation</CODE> - the JDT annotation.<DD><CODE>memberName</CODE> - the member name.
<DT><B>Returns:</B><DD>the member value as a Boolean or null if no member with the member name can be found.
<DT><B>Throws:</B>
<DD><CODE>org.eclipse.jdt.core.JavaModelException</CODE> - if the annotation does not exist or if an exception occurs while accessing
 its corresponding resource.</DL>
</DD>
</DL>
<HR>

<A NAME="getEnumValue(org.eclipse.jdt.core.dom.Annotation, java.lang.String)"><!-- --></A><H3>
getEnumValue</H3>
<PRE>
public static java.lang.String <B>getEnumValue</B>(org.eclipse.jdt.core.dom.Annotation&nbsp;annotation,
                                            java.lang.String&nbsp;memberName)</PRE>
<DL>
<DD>Returns the member value with the given member name from the <CODE>Annotation</CODE> as a <CODE>String</CODE> value.
 The returned String value is the name of the enum constant.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>annotation</CODE> - the AST annotation.<DD><CODE>memberName</CODE> - the member name.
<DT><B>Returns:</B><DD>the member value as a String or null if no member with the member name can be found.</DL>
</DD>
</DL>
<HR>

<A NAME="getEnumValue(org.eclipse.jdt.core.IAnnotation, java.lang.String)"><!-- --></A><H3>
getEnumValue</H3>
<PRE>
public static java.lang.String <B>getEnumValue</B>(org.eclipse.jdt.core.IAnnotation&nbsp;annotation,
                                            java.lang.String&nbsp;memberName)
                                     throws org.eclipse.jdt.core.JavaModelException</PRE>
<DL>
<DD>Returns the member value with the given member name from the <CODE>IAnnotation</CODE> as a <CODE>String</CODE> value.
 The returned String value is the name of the enum constant.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>annotation</CODE> - the JDT annotation.<DD><CODE>memberName</CODE> - the member name.
<DT><B>Returns:</B><DD>the member value as a String or null if no member with the member name can be found.
<DT><B>Throws:</B>
<DD><CODE>org.eclipse.jdt.core.JavaModelException</CODE> - if the annotation does not exist or if an exception occurs while accessing
 its corresponding resource.</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="class-use/AnnotationUtils.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&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-files/index-1.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?org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="AnnotationUtils.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>
