Package org.jctools.queues.atomic
Class JavaParsingAtomicLinkedQueueGenerator
- java.lang.Object
-
- com.github.javaparser.ast.visitor.VoidVisitorAdapter<Void>
-
- org.jctools.queues.atomic.JavaParsingAtomicLinkedQueueGenerator
-
- All Implemented Interfaces:
com.github.javaparser.ast.visitor.VoidVisitor<Void>
public final class JavaParsingAtomicLinkedQueueGenerator extends com.github.javaparser.ast.visitor.VoidVisitorAdapter<Void>
This generator takes in an JCTools 'LinkedQueue' Java source file and patchesUnsafe
accesses into atomicAtomicLongFieldUpdater
. 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 aconsumerNode
field to track the positions of each.
-
-
Field Summary
Fields Modifier and Type Field Description protected static String
GEN_DIRECTIVE_CLASS_CONTAINS_ORDERED_FIELD_ACCESSORS
When set on a class using a single line comment, the class has fields that have unsafe 'ordered' reads and writes.protected static String
GEN_DIRECTIVE_METHOD_IGNORE
When set on a method using a single line comment, the method is not patched by the generator.protected static String
INDENT_LEVEL
protected String
sourceFileName
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected String
capitalise(String s)
protected com.github.javaparser.ast.type.ClassOrInterfaceType
classType(String className)
protected com.github.javaparser.ast.body.FieldDeclaration
declareLongFieldUpdater(String className, String variableName)
Generates something likeprivate static final AtomicLongFieldUpdater
P_INDEX_UPDATER = AtomicLongFieldUpdater.newUpdater(MpmcAtomicArrayQueueProducerIndexField.class, "producerIndex"); protected com.github.javaparser.ast.stmt.BlockStmt
fieldAssignment(String fieldName, String valueName)
Generates something likefield = newValue
protected com.github.javaparser.ast.body.FieldDeclaration
fieldDeclarationWithInitialiser(com.github.javaparser.ast.type.Type type, String name, com.github.javaparser.ast.expr.Expression initializer, com.github.javaparser.ast.Modifier.Keyword... modifiers)
Generates something likeprivate static final AtomicLongFieldUpdater
P_INDEX_UPDATER = AtomicLongFieldUpdater.newUpdater(MpmcAtomicArrayQueueProducerIndexField.class, "producerIndex"); protected com.github.javaparser.ast.stmt.BlockStmt
fieldUpdaterCompareAndSet(String fieldUpdaterFieldName, String expectedValueName, String newValueName)
Generates something likereturn P_INDEX_UPDATER.compareAndSet(this, expectedValue, newValue)
protected com.github.javaparser.ast.stmt.BlockStmt
fieldUpdaterLazySet(String fieldUpdaterFieldName, String newValueName)
Generates something likeP_INDEX_UPDATER.lazySet(this, newValue)
protected String
formatMultilineJavadoc(int indent, String... lines)
protected com.github.javaparser.ast.ImportDeclaration
importDeclaration(String name)
protected boolean
isCommentPresent(com.github.javaparser.ast.Node node, String wanted)
protected boolean
isRefArray(com.github.javaparser.ast.type.Type in, String refClassName)
protected boolean
isRefType(com.github.javaparser.ast.type.Type in, String className)
static void
main(String[] args)
protected com.github.javaparser.ast.expr.MethodCallExpr
methodCallExpr(String owner, String method, com.github.javaparser.ast.expr.Expression... args)
protected com.github.javaparser.ast.expr.MethodCallExpr
newAtomicLongFieldUpdater(String className, String variableName)
protected void
removeStaticFieldsAndInitialisers(com.github.javaparser.ast.body.ClassOrInterfaceDeclaration node)
protected com.github.javaparser.ast.stmt.BlockStmt
returnField(String fieldName)
Generates something likereturn field
protected com.github.javaparser.ast.type.ClassOrInterfaceType
simpleParametricType(String className, String... typeArgs)
void
visit(com.github.javaparser.ast.body.ClassOrInterfaceDeclaration node, Void arg)
void
visit(com.github.javaparser.ast.body.ConstructorDeclaration n, Void arg)
void
visit(com.github.javaparser.ast.body.MethodDeclaration n, Void arg)
void
visit(com.github.javaparser.ast.body.Parameter n, Void arg)
void
visit(com.github.javaparser.ast.body.VariableDeclarator n, Void arg)
void
visit(com.github.javaparser.ast.expr.CastExpr n, Void arg)
void
visit(com.github.javaparser.ast.expr.FieldAccessExpr n, Void arg)
void
visit(com.github.javaparser.ast.expr.ObjectCreationExpr n, Void arg)
void
visit(com.github.javaparser.ast.PackageDeclaration n, Void arg)
-
Methods 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
-
-
-
-
Field Detail
-
GEN_DIRECTIVE_CLASS_CONTAINS_ORDERED_FIELD_ACCESSORS
protected static final String GEN_DIRECTIVE_CLASS_CONTAINS_ORDERED_FIELD_ACCESSORS
When set on a class using a single line comment, the class has fields that have unsafe 'ordered' reads and writes. These fields are candidates to be patched by the generator. Other classes the fields remain unadjusted.- See Also:
- Constant Field Values
-
GEN_DIRECTIVE_METHOD_IGNORE
protected static final String GEN_DIRECTIVE_METHOD_IGNORE
When set on a method using a single line comment, the method is not patched by the generator.- See Also:
- Constant Field Values
-
INDENT_LEVEL
protected static final String INDENT_LEVEL
- See Also:
- Constant Field Values
-
sourceFileName
protected final String sourceFileName
-
-
Method Detail
-
visit
public void visit(com.github.javaparser.ast.body.ConstructorDeclaration n, Void arg)
-
visit
public void visit(com.github.javaparser.ast.body.ClassOrInterfaceDeclaration node, Void arg)
-
visit
public void visit(com.github.javaparser.ast.expr.CastExpr n, Void arg)
-
visit
public void visit(com.github.javaparser.ast.body.MethodDeclaration n, Void arg)
-
visit
public void visit(com.github.javaparser.ast.expr.ObjectCreationExpr n, Void arg)
-
visit
public void visit(com.github.javaparser.ast.expr.FieldAccessExpr n, Void arg)
-
visit
public void visit(com.github.javaparser.ast.PackageDeclaration n, Void arg)
-
visit
public void visit(com.github.javaparser.ast.body.Parameter n, Void arg)
-
visit
public void visit(com.github.javaparser.ast.body.VariableDeclarator n, Void arg)
-
isCommentPresent
protected boolean isCommentPresent(com.github.javaparser.ast.Node node, String wanted)
-
removeStaticFieldsAndInitialisers
protected void removeStaticFieldsAndInitialisers(com.github.javaparser.ast.body.ClassOrInterfaceDeclaration node)
-
fieldUpdaterLazySet
protected com.github.javaparser.ast.stmt.BlockStmt fieldUpdaterLazySet(String fieldUpdaterFieldName, String newValueName)
Generates something likeP_INDEX_UPDATER.lazySet(this, newValue)
- Parameters:
fieldUpdaterFieldName
-newValueName
-- Returns:
-
fieldUpdaterCompareAndSet
protected com.github.javaparser.ast.stmt.BlockStmt fieldUpdaterCompareAndSet(String fieldUpdaterFieldName, String expectedValueName, String newValueName)
Generates something likereturn P_INDEX_UPDATER.compareAndSet(this, expectedValue, newValue)
- Parameters:
fieldUpdaterFieldName
-expectedValueName
-newValueName
-- Returns:
-
methodCallExpr
protected com.github.javaparser.ast.expr.MethodCallExpr methodCallExpr(String owner, String method, com.github.javaparser.ast.expr.Expression... args)
-
fieldAssignment
protected com.github.javaparser.ast.stmt.BlockStmt fieldAssignment(String fieldName, String valueName)
Generates something likefield = newValue
- Parameters:
fieldName
-valueName
-- Returns:
-
fieldDeclarationWithInitialiser
protected com.github.javaparser.ast.body.FieldDeclaration fieldDeclarationWithInitialiser(com.github.javaparser.ast.type.Type type, String name, com.github.javaparser.ast.expr.Expression initializer, com.github.javaparser.ast.Modifier.Keyword... modifiers)
Generates something likeprivate static final AtomicLongFieldUpdater
P_INDEX_UPDATER = AtomicLongFieldUpdater.newUpdater(MpmcAtomicArrayQueueProducerIndexField.class, "producerIndex"); - Parameters:
type
-name
-initializer
-modifiers
-- Returns:
-
declareLongFieldUpdater
protected com.github.javaparser.ast.body.FieldDeclaration declareLongFieldUpdater(String className, String variableName)
Generates something likeprivate static final AtomicLongFieldUpdater
P_INDEX_UPDATER = AtomicLongFieldUpdater.newUpdater(MpmcAtomicArrayQueueProducerIndexField.class, "producerIndex"); - Parameters:
className
-variableName
-- Returns:
-
newAtomicLongFieldUpdater
protected com.github.javaparser.ast.expr.MethodCallExpr newAtomicLongFieldUpdater(String className, String variableName)
-
simpleParametricType
protected com.github.javaparser.ast.type.ClassOrInterfaceType simpleParametricType(String className, String... typeArgs)
-
classType
protected com.github.javaparser.ast.type.ClassOrInterfaceType classType(String className)
-
importDeclaration
protected com.github.javaparser.ast.ImportDeclaration importDeclaration(String name)
-
returnField
protected com.github.javaparser.ast.stmt.BlockStmt returnField(String fieldName)
Generates something likereturn field
- Parameters:
fieldName
-- Returns:
-
isRefArray
protected boolean isRefArray(com.github.javaparser.ast.type.Type in, String refClassName)
-
isRefType
protected boolean isRefType(com.github.javaparser.ast.type.Type in, String className)
-
-