<!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_24) on Sun Apr 03 10:57:49 IST 2011 -->
<TITLE>
AnnotationUtils
</TITLE>

<META NAME="date" CONTENT="2011-04-03">

<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>equals, 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>
