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, visitvisit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visitprivate 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.Exceptionpublic 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 JavaParsingAtomicQueueGeneratorjava.lang.String fieldUpdaterFieldName(java.lang.String fieldName)
fieldUpdaterFieldName in class JavaParsingAtomicQueueGeneratorvoid organiseImports(com.github.javaparser.ast.CompilationUnit cu)
organiseImports in class JavaParsingAtomicQueueGeneratorvoid processSpecialNodeTypes(com.github.javaparser.ast.nodeTypes.NodeWithType<?,com.github.javaparser.ast.type.Type> node,
java.lang.String name)
processSpecialNodeTypes in class JavaParsingAtomicQueueGeneratorprivate 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)