Class JavaParsingVarHandleArrayQueueGenerator

  • All Implemented Interfaces:
    com.github.javaparser.ast.visitor.VoidVisitor<java.lang.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 Detail

      • JavaParsingVarHandleArrayQueueGenerator

        public JavaParsingVarHandleArrayQueueGenerator​(java.lang.String sourceFileName)
    • Method Detail

      • main

        public static void main​(java.lang.String[] args)
                         throws java.lang.Exception
        Throws:
        java.lang.Exception
      • visit

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

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

        private void patchMethodAsDeprecatedRedirector​(com.github.javaparser.ast.body.MethodDeclaration methodToPatch,
                                                       java.lang.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​(java.lang.String className,
                                                                                                                java.util.List<JavaParsingVarHandleArrayQueueGenerator.FieldInfo> fieldInfos)
        Creates a static initializer block for VarHandle initialization with proper field types