public final class JavaParsingAtomicLinkedQueueGenerator extends JavaParsingAtomicQueueGenerator
Modifier and Type | Field and Description |
---|---|
private static java.lang.String |
GEN_DIRECTIVE_CLASS_CONTAINS_ORDERED_FIELD_ACCESSORS |
private static java.lang.String |
GEN_DIRECTIVE_METHOD_IGNORE |
private static java.lang.String |
MPSC_LINKED_ATOMIC_QUEUE_NAME |
INDENT_LEVEL, sourceFileName
Constructor and Description |
---|
JavaParsingAtomicLinkedQueueGenerator(java.lang.String sourceFileName) |
Modifier and Type | Method and Description |
---|---|
private com.github.javaparser.ast.type.ClassOrInterfaceType |
atomicRefArrayType(com.github.javaparser.ast.type.ArrayType in) |
private com.github.javaparser.ast.body.FieldDeclaration |
declareRefFieldUpdater(java.lang.String className,
java.lang.String variableName)
Generates something like
private static final AtomicReferenceFieldUpdater |
(package private) java.lang.String |
fieldUpdaterFieldName(java.lang.String fieldName) |
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) |
static void |
main(java.lang.String[] args) |
private com.github.javaparser.ast.expr.MethodCallExpr |
newAtomicRefFieldUpdater(java.lang.String className,
java.lang.String variableName) |
(package private) void |
organiseImports(com.github.javaparser.ast.CompilationUnit cu) |
private void |
patchAtomicFieldUpdaterAccessorMethods(com.github.javaparser.ast.body.ClassOrInterfaceDeclaration n)
For each method accessor to a field, add in the calls necessary to
AtomicFieldUpdaters.
|
private void |
processSpecialNodeTypes(com.github.javaparser.ast.body.MethodDeclaration node) |
(package private) 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.
|
private void |
processSpecialNodeTypes(com.github.javaparser.ast.expr.ObjectCreationExpr node) |
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.
|
private void |
replaceParentClassesForAtomics(com.github.javaparser.ast.NodeList<com.github.javaparser.ast.type.ClassOrInterfaceType> types) |
(package private) java.lang.String |
translateQueueName(java.lang.String originalQueueName) |
void |
visit(com.github.javaparser.ast.expr.CastExpr n,
java.lang.Void arg) |
void |
visit(com.github.javaparser.ast.body.ClassOrInterfaceDeclaration node,
java.lang.Void arg) |
void |
visit(com.github.javaparser.ast.body.ConstructorDeclaration n,
java.lang.Void arg) |
void |
visit(com.github.javaparser.ast.body.MethodDeclaration n,
java.lang.Void arg) |
void |
visit(com.github.javaparser.ast.expr.ObjectCreationExpr n,
java.lang.Void arg) |
capitalise, classType, declareLongFieldUpdater, fieldAssignment, fieldDeclarationWithInitialiser, fieldUpdaterCompareAndSet, fieldUpdaterLazySet, formatMultilineJavadoc, importDeclaration, isCommentPresent, isRefArray, isRefType, main, methodCallExpr, newAtomicLongFieldUpdater, removeStaticFieldsAndInitialisers, returnField, simpleParametricType, staticImportDeclaration, 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
private static final java.lang.String GEN_DIRECTIVE_CLASS_CONTAINS_ORDERED_FIELD_ACCESSORS
private static final java.lang.String GEN_DIRECTIVE_METHOD_IGNORE
private static final java.lang.String MPSC_LINKED_ATOMIC_QUEUE_NAME
JavaParsingAtomicLinkedQueueGenerator(java.lang.String sourceFileName)
public static void main(java.lang.String[] args) throws java.lang.Exception
java.lang.Exception
public void visit(com.github.javaparser.ast.body.ConstructorDeclaration n, java.lang.Void arg)
visit
in interface com.github.javaparser.ast.visitor.VoidVisitor<java.lang.Void>
visit
in class com.github.javaparser.ast.visitor.VoidVisitorAdapter<java.lang.Void>
public void visit(com.github.javaparser.ast.body.ClassOrInterfaceDeclaration node, java.lang.Void arg)
visit
in interface com.github.javaparser.ast.visitor.VoidVisitor<java.lang.Void>
visit
in class com.github.javaparser.ast.visitor.VoidVisitorAdapter<java.lang.Void>
public void visit(com.github.javaparser.ast.expr.CastExpr n, java.lang.Void arg)
visit
in interface com.github.javaparser.ast.visitor.VoidVisitor<java.lang.Void>
visit
in class com.github.javaparser.ast.visitor.VoidVisitorAdapter<java.lang.Void>
public void visit(com.github.javaparser.ast.body.MethodDeclaration n, java.lang.Void arg)
visit
in interface com.github.javaparser.ast.visitor.VoidVisitor<java.lang.Void>
visit
in class com.github.javaparser.ast.visitor.VoidVisitorAdapter<java.lang.Void>
public void visit(com.github.javaparser.ast.expr.ObjectCreationExpr n, java.lang.Void arg)
visit
in interface com.github.javaparser.ast.visitor.VoidVisitor<java.lang.Void>
visit
in class com.github.javaparser.ast.visitor.VoidVisitorAdapter<java.lang.Void>
java.lang.String translateQueueName(java.lang.String originalQueueName)
translateQueueName
in class JavaParsingAtomicQueueGenerator
java.lang.String fieldUpdaterFieldName(java.lang.String fieldName)
fieldUpdaterFieldName
in class JavaParsingAtomicQueueGenerator
void organiseImports(com.github.javaparser.ast.CompilationUnit cu)
organiseImports
in class JavaParsingAtomicQueueGenerator
void processSpecialNodeTypes(com.github.javaparser.ast.nodeTypes.NodeWithType<?,com.github.javaparser.ast.type.Type> node, java.lang.String name)
processSpecialNodeTypes
in class JavaParsingAtomicQueueGenerator
private void replaceParentClassesForAtomics(com.github.javaparser.ast.body.ClassOrInterfaceDeclaration n)
private void replaceParentClassesForAtomics(com.github.javaparser.ast.NodeList<com.github.javaparser.ast.type.ClassOrInterfaceType> types)
private void patchAtomicFieldUpdaterAccessorMethods(com.github.javaparser.ast.body.ClassOrInterfaceDeclaration n)
lv,
lp and sv are simple field accesses with only
so and cas using the AtomicFieldUpdaters.
n
- the AST node for the containing classprivate com.github.javaparser.ast.stmt.BlockStmt fieldUpdaterGetAndSet(java.lang.String fieldUpdaterFieldName, java.lang.String newValueName)
return P_INDEX_UPDATER.getAndSet(this, newValue)
fieldUpdaterFieldName
- newValueName
- private com.github.javaparser.ast.body.FieldDeclaration declareRefFieldUpdater(java.lang.String className, java.lang.String variableName)
private static final AtomicReferenceFieldUpdater P_NODE_UPDATER = AtomicReferenceFieldUpdater.newUpdater(MpmcAtomicArrayQueueProducerNodeField.class, "producerNode");
className
- variableName
- private com.github.javaparser.ast.expr.MethodCallExpr newAtomicRefFieldUpdater(java.lang.String className, java.lang.String variableName)
private com.github.javaparser.ast.type.ClassOrInterfaceType atomicRefArrayType(com.github.javaparser.ast.type.ArrayType in)
private void processSpecialNodeTypes(com.github.javaparser.ast.body.MethodDeclaration node)
private void processSpecialNodeTypes(com.github.javaparser.ast.expr.ObjectCreationExpr node)