Class JavaParsingAtomicLinkedQueueGenerator

  • All Implemented Interfaces:
    com.github.javaparser.ast.visitor.VoidVisitor<java.lang.Void>

    public final class JavaParsingAtomicLinkedQueueGenerator
    extends JavaParsingAtomicQueueGenerator
    • Field Detail

      • GEN_DIRECTIVE_CLASS_CONTAINS_ORDERED_FIELD_ACCESSORS

        private static final java.lang.String GEN_DIRECTIVE_CLASS_CONTAINS_ORDERED_FIELD_ACCESSORS
        See Also:
        Constant Field Values
      • GEN_DIRECTIVE_METHOD_IGNORE

        private static final java.lang.String GEN_DIRECTIVE_METHOD_IGNORE
        See Also:
        Constant Field Values
      • MPSC_LINKED_ATOMIC_QUEUE_NAME

        private static final java.lang.String MPSC_LINKED_ATOMIC_QUEUE_NAME
        See Also:
        Constant Field Values
    • Constructor Detail

      • JavaParsingAtomicLinkedQueueGenerator

        JavaParsingAtomicLinkedQueueGenerator​(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>
      • visit

        public void visit​(com.github.javaparser.ast.expr.CastExpr 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.MethodDeclaration 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.expr.ObjectCreationExpr 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>
      • processSpecialNodeTypes

        void processSpecialNodeTypes​(com.github.javaparser.ast.nodeTypes.NodeWithType<?,​com.github.javaparser.ast.type.Type> node,
                                     java.lang.String name)
        Given a variable declaration of some sort, check it's name and type and if it looks like any of the key type changes between unsafe and atomic queues, perform the conversion to change it's type.
        Specified by:
        processSpecialNodeTypes in class JavaParsingAtomicQueueGenerator
      • replaceParentClassesForAtomics

        private void replaceParentClassesForAtomics​(com.github.javaparser.ast.body.ClassOrInterfaceDeclaration n)
        Searches all extended or implemented super classes or interfaces for special classes that differ with the atomics version and replaces them with the appropriate class.
      • replaceParentClassesForAtomics

        private void replaceParentClassesForAtomics​(com.github.javaparser.ast.NodeList<com.github.javaparser.ast.type.ClassOrInterfaceType> types)
      • patchAtomicFieldUpdaterAccessorMethods

        private void patchAtomicFieldUpdaterAccessorMethods​(com.github.javaparser.ast.body.ClassOrInterfaceDeclaration n)
        For each method accessor to a field, add in the calls necessary to AtomicFieldUpdaters. Only methods start with so/cas/sv/lv/lp/sp/xchg followed by the field name are processed. Clearly lv, lp and sv are simple field accesses with only so and cas using the AtomicFieldUpdaters.
        Parameters:
        n - the AST node for the containing class
      • fieldUpdaterGetAndSet

        private com.github.javaparser.ast.stmt.BlockStmt fieldUpdaterGetAndSet​(java.lang.String fieldUpdaterFieldName,
                                                                               java.lang.String newValueName)
        Generates something like return P_INDEX_UPDATER.getAndSet(this, newValue)
        Parameters:
        fieldUpdaterFieldName -
        newValueName -
        Returns:
      • declareRefFieldUpdater

        private com.github.javaparser.ast.body.FieldDeclaration declareRefFieldUpdater​(java.lang.String className,
                                                                                       java.lang.String variableName)
        Generates something like private static final AtomicReferenceFieldUpdater P_NODE_UPDATER = AtomicReferenceFieldUpdater.newUpdater(MpmcAtomicArrayQueueProducerNodeField.class, "producerNode");
        Parameters:
        className -
        variableName -
        Returns:
      • newAtomicRefFieldUpdater

        private com.github.javaparser.ast.expr.MethodCallExpr newAtomicRefFieldUpdater​(java.lang.String className,
                                                                                       java.lang.String variableName)
      • atomicRefArrayType

        private com.github.javaparser.ast.type.ClassOrInterfaceType atomicRefArrayType​(com.github.javaparser.ast.type.ArrayType in)
      • processSpecialNodeTypes

        private void processSpecialNodeTypes​(com.github.javaparser.ast.body.MethodDeclaration node)
      • processSpecialNodeTypes

        private void processSpecialNodeTypes​(com.github.javaparser.ast.expr.ObjectCreationExpr node)