Class JavaParsingAtomicLinkedQueueGenerator
java.lang.Object
com.github.javaparser.ast.visitor.VoidVisitorAdapter<Void>
org.jctools.queues.atomic.JavaParsingAtomicQueueGenerator
org.jctools.queues.atomic.JavaParsingAtomicLinkedQueueGenerator
- All Implemented Interfaces:
com.github.javaparser.ast.visitor.VoidVisitor<Void>, JCToolsGenerator
- Direct Known Subclasses:
JavaParsingAtomicUnpaddedLinkedQueueGenerator
This generator takes in an JCTools 'LinkedQueue' Java source file and patches
Unsafe accesses into
atomic AtomicLongFieldUpdater. It outputs a Java source file with these patches.
An 'LinkedQueue' is one that is backed by a linked list and use a producerNode and a
consumerNode field to track the positions of each.
-
Field Summary
FieldsFields inherited from class JavaParsingAtomicQueueGenerator
GEN_DIRECTIVE_CLASS_CONTAINS_ORDERED_FIELD_ACCESSORS, GEN_DIRECTIVE_METHOD_IGNORE, sourceFileName -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate Stringprivate com.github.javaparser.ast.type.ClassOrInterfaceTypeatomicRefArrayType(com.github.javaparser.ast.type.ArrayType in) private com.github.javaparser.ast.body.FieldDeclarationdeclareRefFieldUpdater(String className, String variableName) Generates something likeprivate static final AtomicReferenceFieldUpdaterP_NODE_UPDATER = AtomicReferenceFieldUpdater.newUpdater(MpmcAtomicArrayQueueProducerNodeField.class, "producerNode"); (package private) StringfieldUpdaterFieldName(String fieldName) private com.github.javaparser.ast.stmt.BlockStmtfieldUpdaterGetAndSet(String fieldUpdaterFieldName, String newValueName) Generates something likereturn P_INDEX_UPDATER.getAndSet(this, newValue)static voidprivate com.github.javaparser.ast.expr.MethodCallExprnewAtomicRefFieldUpdater(String className, String variableName) private voidpatchAtomicFieldUpdaterAccessorMethods(com.github.javaparser.ast.body.ClassOrInterfaceDeclaration n) For each method accessor to a field, add in the calls necessary to AtomicFieldUpdaters.(package private) voidprocessSpecialNodeTypes(com.github.javaparser.ast.nodeTypes.NodeWithType<?, com.github.javaparser.ast.type.Type> node, 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.voidvoidvoidvoidvoidMethods inherited from class JavaParsingAtomicQueueGenerator
capitalise, classType, cleanupComments, declareLongFieldUpdater, fieldAssignment, fieldDeclarationWithInitialiser, fieldUpdaterCompareAndSet, fieldUpdaterLazySet, isCommentPresent, isRefArray, isRefType, methodCallExpr, newAtomicLongFieldUpdater, organiseImports, outputPackage, patchAtomicFieldUpdaterAccessorMethod, queueClassNamePrefix, removeStaticFieldsAndInitialisers, replaceParentClassesForAtomics, returnField, simpleParametricType, staticImportDeclaration, translateQueueName, visit, visit, visitMethods inherited from class com.github.javaparser.ast.visitor.VoidVisitorAdapter
visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visitMethods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface JCToolsGenerator
visit
-
Field Details
-
mpscLinkedQueueName
-
-
Constructor Details
-
JavaParsingAtomicLinkedQueueGenerator
-
-
Method Details
-
main
-
visit
-
atomicQueueName
-
visit
-
visit
-
visit
-
visit
-
fieldUpdaterFieldName
- Specified by:
fieldUpdaterFieldNamein classJavaParsingAtomicQueueGenerator
-
processSpecialNodeTypes
void processSpecialNodeTypes(com.github.javaparser.ast.nodeTypes.NodeWithType<?, com.github.javaparser.ast.type.Type> node, 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:
processSpecialNodeTypesin classJavaParsingAtomicQueueGenerator
-
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. Clearlylv,lpandsvare simple field accesses with onlyso andcasusing the AtomicFieldUpdaters.- Parameters:
n- the AST node for the containing class
-
fieldUpdaterGetAndSet
-
declareRefFieldUpdater
private com.github.javaparser.ast.body.FieldDeclaration declareRefFieldUpdater(String className, String variableName) Generates something likeprivate static final AtomicReferenceFieldUpdaterP_NODE_UPDATER = AtomicReferenceFieldUpdater.newUpdater(MpmcAtomicArrayQueueProducerNodeField.class, "producerNode"); -
newAtomicRefFieldUpdater
-
atomicRefArrayType
private com.github.javaparser.ast.type.ClassOrInterfaceType atomicRefArrayType(com.github.javaparser.ast.type.ArrayType in)
-