Class JavaRewriter

java.lang.Object
com.vaadin.copilot.javarewriter.JavaRewriter

public class JavaRewriter extends Object
Rewrites Java source code to add or replace constructor parameters, method invocations and more.
  • Field Details

    • compilationUnit

      protected com.github.javaparser.ast.CompilationUnit compilationUnit
  • Constructor Details

    • JavaRewriter

      public JavaRewriter(String source)
      Creates a new JavaRewriter instance.
      Parameters:
      source - the Java source code to rewrite
  • Method Details

    • getCompilationUnit

      public com.github.javaparser.ast.CompilationUnit getCompilationUnit()
    • getResult

      public String getResult()
    • getFirstModifiedRow

      public int getFirstModifiedRow()
    • replaceFunctionCall

      public boolean replaceFunctionCall(ComponentInfo componentInfo, String function, Object value)
      Replaces a constructor parameter (if it is mapped to the given setter function) or a function call in the source code.
      Parameters:
      componentInfo - the component to modify
      function - the name of the function to replace or add, if the constructor parameter is not found
      value - the new value for the constructor parameter or function call
      Returns:
      true if the replacement was successful, false otherwise
    • addCall

      public boolean addCall(ComponentInfo componentInfo, String function, Object... parameters)
      Adds a function call to the source code.
      Parameters:
      componentInfo - the component to modify
      function - the name of the function to add
      parameters - parameters for the function
      Returns:
      true if the addition was successful, false otherwise
    • replaceOrAddCall

      public boolean replaceOrAddCall(ComponentInfo componentInfo, String function, Object... parameters)
      Replaces a function call in the source code, if found, otherwise adds the function call.
      Parameters:
      componentInfo - the component to modify
      function - the name of the function call to add or replace
      parameters - new parameters for the function
      Returns:
      true if the replacement was successful, false otherwise
    • getPropertyValue

      public Object getPropertyValue(ComponentInfo componentInfo, String property)
      Gets the (active) value of a property of a component.

      The property value is determined by looking for a setter method call in the source code. If the property is not set using a setter, the constructor is checked.

      If the property is not set using a setter or in the constructor, null is returned.

      If the property is set using a method call, the method call expression is returned.

      Parameters:
      componentInfo - the component to get the property value from
      property - the property name
      Returns:
      the property value, or null if the property is not set
    • getStyles

      public List<JavaStyleRewriter.StyleInfo> getStyles(ComponentInfo componentInfo)
      Gets the (active) styles of a component.
      Parameters:
      componentInfo - the component to get the styles of
      Returns:
      the styles, as a list of style names and values
    • setStyle

      public void setStyle(ComponentInfo component, String property, String value)
      Sets the given inline style on the given component, replacing an existing style property if present.
      Parameters:
      component - the component to set the style on
      property - the style property to set
      value - the style value to set or null to remove the style
    • findComponentInfo

      public ComponentInfo findComponentInfo(ComponentTypeAndSourceLocation typeAndSourceLocation)
      Finds a component in the source code.

      Note that this will create a constructor if the component is a route class and there are no constructors.

      Parameters:
      typeAndSourceLocation - the type and source location of the component
      Returns:
      the component info
    • delete

      public boolean delete(ComponentInfo componentInfo)
      Deletes a component from the source code.
      Parameters:
      componentInfo - the component to delete
      Returns:
      true if the deletion was successful, false otherwise
    • moveComponent

      public void moveComponent(ComponentInfo component, ComponentInfo container, ComponentInfo reference, JavaRewriter.Where where)
      Moves a component in the source code.
      Parameters:
      component - the component to move
      container - the new container for the component, if where is Where.APPEND.
      reference - the reference component to move the component before, if where is Where.BEFORE.
      where - where to move the component
    • duplicate

      public void duplicate(ComponentInfo component)
    • duplicate

      public JavaRewriter.DuplicateInfo duplicate(ComponentInfo component, boolean handleAdd)
      Duplicates a component in the source code.
      Parameters:
      component - the component to duplicate
      handleAdd - true to automatically add the new component next to the old one, false to handle add calls like any other method call
      Returns:
      a map from old component name to new component name
    • addComponentUsingTemplate

      public void addComponentUsingTemplate(ComponentInfo referenceComponent, JavaRewriter.Where where, List<JavaComponent> template)
      Adds the given code snippet to the source code either before the reference component (Where.BEFORE) or by appending to the layout (Where.APPEND).
      Parameters:
      referenceComponent - the reference component (BEFORE) or container (APPEND) to add the code
      where - where to add the code
      template - the code to add, as JSON array of objects with "tag", "props" and "children"
    • setAlignment

      public void setAlignment(ComponentInfo component, JavaRewriter.AlignmentMode alignmentMode, boolean selected, List<String> lumoClasses)
    • setGap

      public void setGap(ComponentInfo component, String newValue)
      Sets gap to selected component
      Parameters:
      component - component to set gap
      newValue - lumo utility gap variable literal.
    • setPadding

      public void setPadding(ComponentInfo component, String newClassName)
    • mergeAndReplace

      public void mergeAndReplace(List<ComponentInfo> components, JavaComponent wrapperComponent)
      Merges all the components and wraps them using the given component and places the result in place of the first component.
      Parameters:
      components - The components to merge. The first component will be replaced with the wrapper component
      wrapperComponent - The component to wrap the merged components in.
    • replaceCallParameter

      public void replaceCallParameter(com.github.javaparser.ast.nodeTypes.NodeWithArguments<?> call, String oldVariableName, String newVariableName)
      Replaces a parameter name in a method call.
      Parameters:
      call -
      oldVariableName -
      newVariableName -
    • getSource

      protected String getSource()
      Returns the source code.
      Returns:
      the source code