Class JavaParsingVarHandleArrayQueueGenerator

java.lang.Object
com.github.javaparser.ast.visitor.VoidVisitorAdapter<Void>
org.jctools.queues.varhandle.JavaParsingVarHandleQueueGenerator
org.jctools.queues.varhandle.JavaParsingVarHandleArrayQueueGenerator
All Implemented Interfaces:
com.github.javaparser.ast.visitor.VoidVisitor<Void>, JCToolsGenerator
Direct Known Subclasses:
JavaParsingVarHandleUnpaddedArrayQueueGenerator

public class JavaParsingVarHandleArrayQueueGenerator extends JavaParsingVarHandleQueueGenerator
This generator takes in an JCTools 'ArrayQueue' Java source file and patches Unsafe accesses into VarHandle. It outputs a Java source file with these patches.

An 'ArrayQueue' is one that is backed by a circular array and use a producerLimit and a consumerLimit field to track the positions of each.

  • Constructor Details

    • JavaParsingVarHandleArrayQueueGenerator

      public JavaParsingVarHandleArrayQueueGenerator(String sourceFileName)
  • Method Details

    • main

      public static void main(String[] args) throws Exception
      Throws:
      Exception
    • processSpecialNodeTypes

      void processSpecialNodeTypes(com.github.javaparser.ast.nodeTypes.NodeWithType<?,com.github.javaparser.ast.type.Type> node, String name)
      Specified by:
      processSpecialNodeTypes in class JavaParsingVarHandleQueueGenerator
    • visit

      public void visit(com.github.javaparser.ast.body.ConstructorDeclaration n, Void arg)
      Specified by:
      visit in interface com.github.javaparser.ast.visitor.VoidVisitor<Void>
      Overrides:
      visit in class com.github.javaparser.ast.visitor.VoidVisitorAdapter<Void>
    • visit

      public void visit(com.github.javaparser.ast.body.ClassOrInterfaceDeclaration node, Void arg)
      Specified by:
      visit in interface com.github.javaparser.ast.visitor.VoidVisitor<Void>
      Overrides:
      visit in class com.github.javaparser.ast.visitor.VoidVisitorAdapter<Void>
    • varHandleFieldName

      String varHandleFieldName(String fieldName)
      Specified by:
      varHandleFieldName in class JavaParsingVarHandleQueueGenerator
    • patchMethodAsDeprecatedRedirector

      private void patchMethodAsDeprecatedRedirector(com.github.javaparser.ast.body.MethodDeclaration methodToPatch, String toMethodName, com.github.javaparser.ast.type.Type returnType, com.github.javaparser.ast.body.Parameter... parameters)
      Given a method declaration node this method will replace it's code and signature with code to redirect all calls to it to the newMethodName. Method signatures of both methods must match exactly.
    • patchVarHandleAccessorMethods

      private void patchVarHandleAccessorMethods(com.github.javaparser.ast.body.ClassOrInterfaceDeclaration n)
      For each method accessor to a field, add in the calls necessary to VarHandle. Only methods start with so/cas/sv/lv/lp followed by the field name are processed.
      Parameters:
      n - the AST node for the containing class
    • createVarHandleStaticInitializerWithTypes

      private com.github.javaparser.ast.body.InitializerDeclaration createVarHandleStaticInitializerWithTypes(String className, List<JavaParsingVarHandleArrayQueueGenerator.FieldInfo> fieldInfos)
      Creates a static initializer block for VarHandle initialization with proper field types