Class RefactorHelper

java.lang.Object
com.iizigo.java.refactor.RefactorHelper

public class RefactorHelper extends Object
Utility class for refactoring: adding, removing and updating annotations and member value pairs.
Author:
Christopher Mindus
  • Method Details

    • addAnnotation

      public static void addAnnotation(IJavaElement javaElement, String annotationFQN, String param, String value, boolean allowMultiple) throws CoreException
      Refactor operation that adds an annotation to an element with a value/pair initialized with a StringLiteral value. The import is added too if required. No checking if the annotation already exists is done as repeatable annotations is supported.

      The following types of Java elements are supported:

      • IJavaElement.PACKAGE_DECLARATION
      • IJavaElement.TYPE
      • IJavaElement.FIELD
      • IJavaElement.METHOD
      • IJavaElement.LOCAL_VARIABLE
      Parameters:
      javaElement - The Java element which is used to get the compilation unit to add annotation to.
      annotationFQN - Fully qualified name of annotation. It is assumed to have a non-empty package name.
      param - A parameter as specified by the annotation.
      value - The string value that will become a StringLiteral.
      allowMultiple - Flag to enable multiple annotations or not.
      Throws:
      CoreException - The exception is thrown if the import rewrite fails.
    • addInterface

      public static void addInterface(IType type, String interfaceFQN) throws CoreException
      Refactor operation that adds an interface to an element.
      Parameters:
      type - The type.
      interfaceFQN - Fully qualified name of the interface. It is assumed to have a non-empty package name.
      Throws:
      CoreException - The exception is thrown if the import rewrite fails.
    • addEventMethod

      public static void addEventMethod(IType type, String methodName, AnnotationType annotation, String refName) throws CoreException
      Refactor operation to add an event method with an annotation.
      Parameters:
      type - The class.
      methodName - The method name.
      annotation - The annotation.
      refName - Reference name.
      Throws:
      CoreException
    • addImport

      public static void addImport(IJavaElement javaElement, String qualifiedName) throws CoreException
      Adds an import to the compilation unit of the given IJavaElement.

      The following types of Java elements are supported:

      • IJavaElement.COMPILATION_UNIT
      • IJavaElement.PACKAGE_DECLARATION
      • IJavaElement.TYPE
      • IJavaElement.FIELD
      • IJavaElement.METHOD
      • IJavaElement.LOCAL_VARIABLE
      Parameters:
      javaElement - The Java element which is used to get the compilation unit to add the import to.
      qualifiedName - The import to add.
      Throws:
      CoreException - The exception is thrown if the import rewrite fails.
    • addAnnotation

      public static void addAnnotation(IJavaElement javaElement, Annotation annotation) throws JavaModelException
      Adds the given Annotation to the IJavaElement.

      The following types of Java elements are supported:

      • IJavaElement.PACKAGE_DECLARATION
      • IJavaElement.TYPE
      • IJavaElement.FIELD
      • IJavaElement.METHOD
      • IJavaElement.LOCAL_VARIABLE
      Parameters:
      javaElement - The Java element which is used to get the compilation unit to add annotation to.
      annotation - The annotation to add.
      Throws:
      JavaModelException - A JavaModelException is thrown when the underlying compilation units buffer could not be accessed.
    • removeAnnotation

      public static void removeAnnotation(IJavaElement javaElement, Annotation annotation) throws JavaModelException
      Removes the given Annotation from the IJavaElement.

      The following types of Java elements are supported:

      • IJavaElement.PACKAGE_DECLARATION
      • IJavaElement.TYPE
      • IJavaElement.FIELD
      • IJavaElement.METHOD
      • IJavaElement.LOCAL_VARIABLE
      Parameters:
      javaElement - Java element to operate on.
      annotation - The annotation to remove.
      Throws:
      JavaModelException - A JavaModelException is thrown when the underlying compilation units buffer could not be accessed.
    • addMemberValuePair

      public static void addMemberValuePair(NormalAnnotation annotation, MemberValuePair memberValuePair) throws JavaModelException
      Parameters:
      annotation - The normal annotation to add the member value pair to.
      memberValuePair - The member value pair to add.
      Throws:
      JavaModelException - A JavaModelException is thrown when the underlying compilation units buffer could not be accessed.
    • removeMemberValuePair

      public static void removeMemberValuePair(NormalAnnotation annotation, MemberValuePair memberValuePair) throws JavaModelException
      Removes the MemberValuePair from the NormalAnnotation.
      Parameters:
      annotation - The normal annotation from which to remove the member value pair.
      memberValuePair - The member value pair to remove.
      Throws:
      JavaModelException - A JavaModelException is thrown when the underlying compilation units buffer could not be accessed.
    • updateMemberValuePair

      public static void updateMemberValuePair(MemberValuePair memberValuePair, ASTNode value) throws JavaModelException
      Updates the MemberValuePair value with the given ASTNode.
      Parameters:
      memberValuePair - The member value pair to update.
      value - The value to set.
      Throws:
      JavaModelException - A JavaModelException is thrown when the underlying compilation units buffer could not be accessed.
    • updateSingleMemberAnnotation

      public static void updateSingleMemberAnnotation(SingleMemberAnnotation annotation, ASTNode value) throws JavaModelException
      Updates the value of the SingleMemberAnnotation with the given ASTNode.
      Parameters:
      annotation - The single member annotation to update.
      value - The value to set.
      Throws:
      JavaModelException - A JavaModelException is thrown when the underlying compilation units buffer could not be accessed.
    • createAddImportTextEdit

      public static TextEdit createAddImportTextEdit(IJavaElement javaElement, String qualifiedName) throws CoreException
      Creates a TextEdit object representing the add import change to the source code of the Java elements compilation unit. The compilation unit itself is not modified.

      The following types of Java elements are supported:

      • IJavaElement.PACKAGE_DECLARATION
      • IJavaElement.TYPE
      • IJavaElement.FIELD
      • IJavaElement.METHOD
      • IJavaElement.LOCAL_VARIABLE
      Parameters:
      javaElement - The Java element will be used to create a CompilationUnit which will in turn be used to create an ImportRewrite.
      qualifiedName - The import to add.
      Returns:
      Text edit object describing the add import changes.
      Throws:
      CoreException - The exception is thrown if the import rewrite fails.
    • createAddAnnotationTextEdit

      public static TextEdit createAddAnnotationTextEdit(IJavaElement javaElement, Annotation annotation) throws JavaModelException
      Creates a TextEdit object representing the add annotation change to the source code of the Java elements compilation unit. The compilation unit itself is not modified.

      The following types of Java elements are supported:

      • IJavaElement.PACKAGE_DECLARATION
      • IJavaElement.TYPE
      • IJavaElement.FIELD
      • IJavaElement.METHOD
      • IJavaElement.LOCAL_VARIABLE
      Parameters:
      javaElement - Element to operate on.
      annotation - The annotation to add.
      Returns:
      Text edit object describing the add annotation changes. Returns a MultiTextEdit if the given Java element isn't supported.
      Throws:
      JavaModelException - A JavaModelException is thrown when the underlying compilation units buffer could not be accessed.
    • createRemoveAnnotationTextEdit

      public static TextEdit createRemoveAnnotationTextEdit(IJavaElement javaElement, Annotation annotation) throws JavaModelException
      Creates a TextEdit object representing the remove annotation change to the source code of the Java elements compilation unit. The compilation unit itself is not modified.

      The following types of Java elements are supported:

      • IJavaElement.PACKAGE_DECLARATION
      • IJavaElement.TYPE
      • IJavaElement.FIELD
      • IJavaElement.METHOD
      • IJavaElement.LOCAL_VARIABLE
      Parameters:
      javaElement - Element to operate on.
      annotation - The annotation to remove.
      Returns:
      Text edit object describing the add annotation changes. Returns a MultiTextEdit if the given Java element isn't supported.
      Throws:
      JavaModelException - A JavaModelException is thrown when the underlying compilation units buffer could not be accessed.
    • createAddMemberValuePairTextEdit

      public static TextEdit createAddMemberValuePairTextEdit(NormalAnnotation annotation, MemberValuePair memberValuePair) throws JavaModelException
      Creates a TextEdit object representing the change of adding the MemberValuePair to the NormalAnnotation. The underlying compilation unit itself is not modified.
      Parameters:
      annotation - The normal annotation to add the member value pair to.
      memberValuePair - The member value pair to add.
      Returns:
      Text edit object describing the add member value pair change.
      Throws:
      JavaModelException - A JavaModelException is thrown when the underlying compilation units buffer could not be accessed.
    • createRemoveMemberValuePairTextEdit

      public static TextEdit createRemoveMemberValuePairTextEdit(NormalAnnotation annotation, MemberValuePair memberValuePair) throws JavaModelException
      Creates a TextEdit object representing the change of removing the MemberValuePair from the NormalAnnotation. The underlying compilation unit itself is not modified.
      Parameters:
      annotation - The normal annotation to remove the member value pair from.
      memberValuePair - The member value pair to remove.
      Returns:
      Text edit object describing the remove member value pair change.
      Throws:
      JavaModelException - A JavaModelException is thrown when the underlying compilation units buffer could not be accessed.
    • createUpdateMemberValuePairTextEdit

      public static TextEdit createUpdateMemberValuePairTextEdit(MemberValuePair memberValuePair, ASTNode value) throws JavaModelException
      Creates a TextEdit object representing the change of updating the MemberValuePair with the ASTNode value. The underlying compilation unit itself is not modified.
      Parameters:
      memberValuePair - The member value pair to update.
      value - The value to set.
      Returns:
      Text edit object describing the update member value pair change.
      Throws:
      JavaModelException - A JavaModelException is thrown when the underlying compilation units buffer could not be accessed.
    • createUpdateSingleMemberAnnotationTextEdit

      public static TextEdit createUpdateSingleMemberAnnotationTextEdit(SingleMemberAnnotation annotation, ASTNode value) throws JavaModelException
      Creates a TextEdit object representing the change of updating the SingleMemberAnnotation with the ASTNode value. The underlying compilation unit itself is not modified.
      Parameters:
      annotation - The single member annotation to update.
      value - The value to set.
      Returns:
      Text edit object describing the update single member annotation change.
      Throws:
      JavaModelException - A JavaModelException is thrown when the underlying compilation units buffer could not be accessed.
    • getCompilationUnitFromJavaElement

      public static ICompilationUnit getCompilationUnitFromJavaElement(IJavaElement javaElement)
      Returns a ICompilationUnit for the given IJavaElement.

      The following types of Java elements are supported:

      • IJavaElement.PACKAGE_DECLARATION
      • IJavaElement.TYPE
      • IJavaElement.FIELD
      • IJavaElement.METHOD
      • IJavaElement.LOCAL_VARIABLE
      Parameters:
      javaElement - The Java element.
      Returns:
      A compilation unit.
    • getTypeDeclaration

      public static AbstractTypeDeclaration getTypeDeclaration(IType type)
      Returns the AbstractTypeDeclaration that corresponds to the given IType.
      Parameters:
      type - The type.
      Returns:
      A type declaration or null if not found.
    • getMethodDeclaration

      public static MethodDeclaration getMethodDeclaration(IMethod method)
      Returns the MethodDeclaration that corresponds to the given IMethod.
      Parameters:
      method - The method.
      Returns:
      a method declaration or null if not found.
    • getFieldDeclaration

      public static FieldDeclaration getFieldDeclaration(IField field)
      Returns the FieldDeclaration that corresponds to the given IField.
      Parameters:
      field - The field.
      Returns:
      A field declaration or null if not found.
    • getSingleVariableDeclaration

      public static SingleVariableDeclaration getSingleVariableDeclaration(ILocalVariable javaElement)
      Returns the SingleVariableDeclaration that corresponds to the given ILocalVariable.
      Parameters:
      javaElement - The local variable.
      Returns:
      A single variable declaration or null if not found.
    • getAnnotationName

      public static String getAnnotationName(Annotation annotation)
      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.
      Parameters:
      annotation - The annotation.
      Returns:
      The annotation name. The simple name or the fully qualified name.
    • compareTypeNames

      public static boolean compareTypeNames(AbstractTypeDeclaration abstractTypeDeclaration, IType type)
      Compares the AbstractTypeDeclaration and IType.
      Parameters:
      abstractTypeDeclaration - The type declaration.
      type - The type.
      Returns:
      true if the names match.
    • compareMethods

      public static boolean compareMethods(MethodDeclaration methodDeclaration, IMethod method)
      Compares the MethodDeclaration and IMethod.
      Parameters:
      methodDeclaration - The method declaration.
      method - The method.
      Returns:
      true if the method names and parameter types match.
    • compareMethods

      public static boolean compareMethods(MethodDeclaration methodOne, MethodDeclaration methodTwo)
      Compares the two MethodDeclaration.
      Parameters:
      methodOne - The first method declaration.
      methodTwo - The second method declaration.
      Returns:
      true if the method names and parameter types match.
    • compareFieldNames

      public static boolean compareFieldNames(FieldDeclaration fieldDeclaration, IField field)
      Compares the FieldDeclaration and IField.
      Parameters:
      fieldDeclaration - The field declaration.
      field - The field.
      Returns:
      true if the field names match.
    • isAnnotationPresent

      public static boolean isAnnotationPresent(IJavaElement javaElement, Annotation annotation)
      Checks if the given Annotation is present on the IJavaElement.

      The following types of Java elements are supported:

      • IJavaElement.PACKAGE_DECLARATION
      • IJavaElement.TYPE
      • IJavaElement.FIELD
      • IJavaElement.METHOD
      • IJavaElement.LOCAL_VARIABLE
      Parameters:
      javaElement - The checked element.
      annotation - The annotation.
      Returns:
      true if the annotation is present.
    • isAnnotationPresent

      public static boolean isAnnotationPresent(IJavaElement javaElement, String annotationName)
      Checks if the annotation with the given name is present on the IJavaElement.

      The following types of Java elements are supported:

      • IJavaElement.PACKAGE_DECLARATION
      • IJavaElement.TYPE
      • IJavaElement.FIELD
      • IJavaElement.METHOD
      • IJavaElement.LOCAL_VARIABLE
      Parameters:
      javaElement - The checked element.
      annotationName - The annotation name.
      Returns:
      true if the annotation is present.
    • getAnnotations

      public static List<Annotation> getAnnotations(IJavaElement javaElement)
      Returns a list of all the Annotation that are present on the given IJavaElement

      The following types of Java elements are supported:

      • IJavaElement.PACKAGE_DECLARATION
      • IJavaElement.TYPE
      • IJavaElement.FIELD
      • IJavaElement.METHOD
      • IJavaElement.LOCAL_VARIABLE
      Parameters:
      javaElement - The element.
      Returns:
      a list of annotations.
    • getSingleVariableDeclarations

      public static List<SingleVariableDeclaration> getSingleVariableDeclarations(IMethod method)
      Returns a list of all the SingleVariableDeclaration for the given IMethod.
      Parameters:
      method - The method.
      Returns:
      a list of single variable declarations.
    • getLocalVariable

      public static ILocalVariable getLocalVariable(IMethod method, int offset)
      Returns the ILocalVariable at the given offset position in the source file.
      Parameters:
      method - The method in which the local variable is declared.
      offset - 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.
      Returns:
      The local variable or null if not found.
    • getLocalVariable

      public static ILocalVariable getLocalVariable(IMethod method, String paramName)
      Returns the ILocalVariable with the given name within the declared IMethod.
      Parameters:
      method - The method in which the local variable is declared.
      paramName - The local variable name.
      Returns:
      the local variable or null if not found.
    • getAnnotation

      public static Annotation getAnnotation(IJavaElement javaElement, Class<? extends Annotation> annotation)
      Returns the AST Annotation that corresponds to the given Annotation class on the IJavaElement.

      The following types of Java elements are supported:

      • IJavaElement.PACKAGE_DECLARATION
      • IJavaElement.TYPE
      • IJavaElement.FIELD
      • IJavaElement.METHOD
      • IJavaElement.LOCAL_VARIABLE
      Parameters:
      javaElement - The Java element to query.
      annotation - The Annotation class.
      Returns:
      the AST annotation or null if not found.
    • getAnnotation

      public static IAnnotation getAnnotation(Class<? extends Annotation> annotation, IAnnotatable annotatable) throws JavaModelException
      Returns the JDT IAnnotation that corresponds to the given Annotation class on the IAnnotatable element.
      Parameters:
      annotation - The Annotation class.
      annotatable - A package declaration, a type, a method, a field or a local variable in a compilation unit.
      Returns:
      The annotation or null if not found.
      Throws:
      JavaModelException - If the annotatable element does not exist or if an exception occurs while accessing its corresponding resource.
    • getAnnotationValue

      public static Expression getAnnotationValue(NormalAnnotation normalAnnotation, String memberName)
      Returns the NormalAnnotation member value pair value with the given member name.
      Parameters:
      normalAnnotation - The normal annotation.
      memberName - The member value pair member name.
      Returns:
      the value expression or null if not found.
    • getAnnotationValue

      public static Object getAnnotationValue(IAnnotation annotation, String memberName) throws JavaModelException
      Returns the JDT IAnnotation member value pair value with the given member name.
      Parameters:
      annotation - The annotation.
      memberName - The member name.
      Returns:
      An object representing the member value pairs value.
      Throws:
      JavaModelException - If the annotation does not exist or if an exception occurs while accessing its corresponding resource.
    • getMemberValuePair

      public static MemberValuePair getMemberValuePair(NormalAnnotation normalAnnotation, String memberName)
      Returns the MemberValuePair with the given member name from the NormalAnnotation.
      Parameters:
      normalAnnotation - The normal annotation.
      memberName - The member name of the member value pair to return.
      Returns:
      A member value pair or null if no member value pair with the given member name can be found.
    • getStringValue

      public static String getStringValue(Annotation annotation, String memberName)
      Returns the member value with the given member name from the Annotation as a String value.
      Parameters:
      annotation - The AST annotation.
      memberName - The member name.
      Returns:
      The member value as a String or null if no member with the member name can be found.
    • getStringValue

      public static String getStringValue(IAnnotation annotation, String memberName) throws JavaModelException
      Returns the member value with the given member name from the IAnnotation as a String value.
      Parameters:
      annotation - The JDT annotation.
      memberName - The member name.
      Returns:
      The member value as a String or null if no member with the member name can be found.
      Throws:
      JavaModelException - If the annotation does not exist or if an exception occurs while accessing its corresponding resource.
    • getBooleanValue

      public static Boolean getBooleanValue(Annotation annotation, String memberName)
      Returns the member value with the given member name from the Annotation as a Boolean value.
      Parameters:
      annotation - The AST annotation.
      memberName - The member name.
      Returns:
      The member value as a Boolean or null if no member with the member name can be found.
    • getBooleanValue

      public static Boolean getBooleanValue(IAnnotation annotation, String memberName) throws JavaModelException
      Returns the member value with the given member name from the IAnnotation as a Boolean value.
      Parameters:
      annotation - The JDT annotation.
      memberName - The member name.
      Returns:
      The member value as a Boolean or null if no member with the member name can be found.
      Throws:
      JavaModelException - If the annotation does not exist or if an exception occurs while accessing its corresponding resource.
    • getEnumValue

      public static String getEnumValue(Annotation annotation, String memberName)
      Returns the member value with the given member name from the Annotation as a String value. The returned String value is the name of the enum constant.
      Parameters:
      annotation - The AST annotation.
      memberName - The member name.
      Returns:
      The member value as a String or null if no member with the member name can be found.
    • getEnumValue

      public static String getEnumValue(IAnnotation annotation, String memberName) throws JavaModelException
      Returns the member value with the given member name from the IAnnotation as a String value. The returned String value is the name of the enum constant.
      Parameters:
      annotation - The JDT annotation.
      memberName - The member name.
      Returns:
      the member value as a String or null if no member with the member name can be found.
      Throws:
      JavaModelException - If the annotation does not exist or if an exception occurs while accessing its corresponding resource.