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 patchesUnsafeaccesses 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
producerNodeand aconsumerNodefield to track the positions of each.
-
-
Field Summary
Fields Modifier and Type Field Description protected static StringGEN_DIRECTIVE_CLASS_CONTAINS_ORDERED_FIELD_ACCESSORSWhen set on a class using a single line comment, the class has fields that have unsafe 'ordered' reads and writes.protected static StringGEN_DIRECTIVE_METHOD_IGNOREWhen set on a method using a single line comment, the method is not patched by the generator.protected static StringINDENT_LEVELprotected StringsourceFileName
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected Stringcapitalise(String s)protected com.github.javaparser.ast.type.ClassOrInterfaceTypeclassType(String className)protected com.github.javaparser.ast.body.FieldDeclarationdeclareLongFieldUpdater(String className, String variableName)Generates something likeprivate static final AtomicLongFieldUpdaterP_INDEX_UPDATER = AtomicLongFieldUpdater.newUpdater(MpmcAtomicArrayQueueProducerIndexField.class, "producerIndex"); protected com.github.javaparser.ast.stmt.BlockStmtfieldAssignment(String fieldName, String valueName)Generates something likefield = newValueprotected com.github.javaparser.ast.body.FieldDeclarationfieldDeclarationWithInitialiser(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 AtomicLongFieldUpdaterP_INDEX_UPDATER = AtomicLongFieldUpdater.newUpdater(MpmcAtomicArrayQueueProducerIndexField.class, "producerIndex"); protected com.github.javaparser.ast.stmt.BlockStmtfieldUpdaterCompareAndSet(String fieldUpdaterFieldName, String expectedValueName, String newValueName)Generates something likereturn P_INDEX_UPDATER.compareAndSet(this, expectedValue, newValue)protected com.github.javaparser.ast.stmt.BlockStmtfieldUpdaterLazySet(String fieldUpdaterFieldName, String newValueName)Generates something likeP_INDEX_UPDATER.lazySet(this, newValue)protected StringformatMultilineJavadoc(int indent, String... lines)protected com.github.javaparser.ast.ImportDeclarationimportDeclaration(String name)protected booleanisCommentPresent(com.github.javaparser.ast.Node node, String wanted)protected booleanisRefArray(com.github.javaparser.ast.type.Type in, String refClassName)protected booleanisRefType(com.github.javaparser.ast.type.Type in, String className)static voidmain(String[] args)protected com.github.javaparser.ast.expr.MethodCallExprmethodCallExpr(String owner, String method, com.github.javaparser.ast.expr.Expression... args)protected com.github.javaparser.ast.expr.MethodCallExprnewAtomicLongFieldUpdater(String className, String variableName)protected voidremoveStaticFieldsAndInitialisers(com.github.javaparser.ast.body.ClassOrInterfaceDeclaration node)protected com.github.javaparser.ast.stmt.BlockStmtreturnField(String fieldName)Generates something likereturn fieldprotected com.github.javaparser.ast.type.ClassOrInterfaceTypesimpleParametricType(String className, String... typeArgs)voidvisit(com.github.javaparser.ast.body.ClassOrInterfaceDeclaration node, Void arg)voidvisit(com.github.javaparser.ast.body.ConstructorDeclaration n, Void arg)voidvisit(com.github.javaparser.ast.body.MethodDeclaration n, Void arg)voidvisit(com.github.javaparser.ast.body.Parameter n, Void arg)voidvisit(com.github.javaparser.ast.body.VariableDeclarator n, Void arg)voidvisit(com.github.javaparser.ast.expr.CastExpr n, Void arg)voidvisit(com.github.javaparser.ast.expr.FieldAccessExpr n, Void arg)voidvisit(com.github.javaparser.ast.expr.ObjectCreationExpr n, Void arg)voidvisit(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 AtomicLongFieldUpdaterP_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 AtomicLongFieldUpdaterP_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)
-
-