Package org.jctools.queues.varhandle
Class JavaParsingVarHandleLinkedQueueGenerator
- java.lang.Object
-
- com.github.javaparser.ast.visitor.VoidVisitorAdapter<java.lang.Void>
-
- org.jctools.queues.varhandle.JavaParsingVarHandleQueueGenerator
-
- org.jctools.queues.varhandle.JavaParsingVarHandleLinkedQueueGenerator
-
- All Implemented Interfaces:
com.github.javaparser.ast.visitor.VoidVisitor<java.lang.Void>,JCToolsGenerator
- Direct Known Subclasses:
JavaParsingVarHandleUnpaddedLinkedQueueGenerator
public class JavaParsingVarHandleLinkedQueueGenerator extends JavaParsingVarHandleQueueGenerator
This generator takes in an JCTools 'LinkedQueue' Java source file and patchesUnsafeaccesses intoVarHandle. It outputs a Java source file with these patches.A 'LinkedQueue' is one that is backed by a linked list and uses a
producerNodeand aconsumerNodefield to track the positions of each.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static classJavaParsingVarHandleLinkedQueueGenerator.FieldInfoHelper class to track field information
-
Field Summary
Fields Modifier and Type Field Description private java.lang.StringmpscLinkedQueueName-
Fields inherited from class org.jctools.queues.varhandle.JavaParsingVarHandleQueueGenerator
GEN_DIRECTIVE_CLASS_CONTAINS_ORDERED_FIELD_ACCESSORS, GEN_DIRECTIVE_METHOD_IGNORE, hasVarHandleFields, sourceFileName
-
-
Constructor Summary
Constructors Constructor Description JavaParsingVarHandleLinkedQueueGenerator(java.lang.String sourceFileName)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private com.github.javaparser.ast.body.InitializerDeclarationcreateVarHandleStaticInitializerWithTypes(java.lang.String className, java.util.List<JavaParsingVarHandleLinkedQueueGenerator.FieldInfo> fieldInfos)Creates a static initializer block for VarHandle initialization with proper field typesstatic voidmain(java.lang.String[] args)private voidpatchVarHandleAccessorMethods(com.github.javaparser.ast.body.ClassOrInterfaceDeclaration n)For each method accessor to a field, add in the calls necessary to VarHandle.(package private) voidprocessSpecialNodeTypes(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 its name and type and if it looks like any of the key type changes between unsafe and VarHandle queues, perform the conversion to change its type.private com.github.javaparser.ast.type.ClassOrInterfaceTypesimpleParametricType(java.lang.String typeName, java.lang.String... typeParams)(package private) java.lang.StringvarHandleFieldName(java.lang.String fieldName)private com.github.javaparser.ast.stmt.BlockStmtvarHandleGetAndSet(java.lang.String varHandleFieldName, java.lang.String newValueName, com.github.javaparser.ast.type.Type returnType)Generates something likereturn (LinkedQueueVarHandleNode) VH_PRODUCER_NODE.getAndSet(this, newValue) private java.lang.StringvarHandleQueueName()private com.github.javaparser.ast.type.ArrayTypevarHandleRefArrayType(com.github.javaparser.ast.type.ArrayType in)voidvisit(com.github.javaparser.ast.body.ClassOrInterfaceDeclaration node, java.lang.Void arg)voidvisit(com.github.javaparser.ast.body.ConstructorDeclaration n, java.lang.Void arg)voidvisit(com.github.javaparser.ast.body.MethodDeclaration n, java.lang.Void arg)voidvisit(com.github.javaparser.ast.expr.CastExpr n, java.lang.Void arg)voidvisit(com.github.javaparser.ast.expr.ObjectCreationExpr n, java.lang.Void arg)-
Methods inherited from class org.jctools.queues.varhandle.JavaParsingVarHandleQueueGenerator
capitalise, classType, cleanupComments, createVarHandleStaticInitializer, declareVarHandle, fieldAssignment, getFieldClassType, isCommentPresent, isRefArray, isRefType, methodCallExpr, organiseImports, outputPackage, patchVarHandleAccessorMethod, queueClassNamePrefix, removeStaticFieldsAndInitialisers, replaceParentClassesForVarHandle, returnField, staticImportDeclaration, translateQueueName, varHandleCompareAndSet, varHandleGetVolatile, varHandleSetRelease, visit, visit, visit
-
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, visit, visit, visit, visit
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.jctools.queues.util.JCToolsGenerator
visit
-
-
-
-
Method Detail
-
main
public static void main(java.lang.String[] args) throws java.lang.Exception- Throws:
java.lang.Exception
-
visit
public void visit(com.github.javaparser.ast.body.ConstructorDeclaration n, java.lang.Void arg)- Specified by:
visitin interfacecom.github.javaparser.ast.visitor.VoidVisitor<java.lang.Void>- Overrides:
visitin classcom.github.javaparser.ast.visitor.VoidVisitorAdapter<java.lang.Void>
-
varHandleQueueName
private java.lang.String varHandleQueueName()
-
visit
public void visit(com.github.javaparser.ast.body.ClassOrInterfaceDeclaration node, java.lang.Void arg)- Specified by:
visitin interfacecom.github.javaparser.ast.visitor.VoidVisitor<java.lang.Void>- Overrides:
visitin classcom.github.javaparser.ast.visitor.VoidVisitorAdapter<java.lang.Void>
-
visit
public void visit(com.github.javaparser.ast.expr.CastExpr n, java.lang.Void arg)- Specified by:
visitin interfacecom.github.javaparser.ast.visitor.VoidVisitor<java.lang.Void>- Overrides:
visitin classcom.github.javaparser.ast.visitor.VoidVisitorAdapter<java.lang.Void>
-
visit
public void visit(com.github.javaparser.ast.body.MethodDeclaration n, java.lang.Void arg)- Specified by:
visitin interfacecom.github.javaparser.ast.visitor.VoidVisitor<java.lang.Void>- Overrides:
visitin classcom.github.javaparser.ast.visitor.VoidVisitorAdapter<java.lang.Void>
-
visit
public void visit(com.github.javaparser.ast.expr.ObjectCreationExpr n, java.lang.Void arg)- Specified by:
visitin interfacecom.github.javaparser.ast.visitor.VoidVisitor<java.lang.Void>- Overrides:
visitin classcom.github.javaparser.ast.visitor.VoidVisitorAdapter<java.lang.Void>
-
varHandleFieldName
java.lang.String varHandleFieldName(java.lang.String fieldName)
- Specified by:
varHandleFieldNamein classJavaParsingVarHandleQueueGenerator
-
processSpecialNodeTypes
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 its name and type and if it looks like any of the key type changes between unsafe and VarHandle queues, perform the conversion to change its type.- Specified by:
processSpecialNodeTypesin classJavaParsingVarHandleQueueGenerator
-
patchVarHandleAccessorMethods
private void patchVarHandleAccessorMethods(com.github.javaparser.ast.body.ClassOrInterfaceDeclaration n)
For each method accessor to a field, add in the calls necessary to VarHandle. Only methods start with so/cas/sv/lv/lp/la/xchg followed by the field name are processed. Clearlylv,lpandsvare simple field accesses with onlyso,casandxchgusing the VarHandle.- Parameters:
n- the AST node for the containing class
-
createVarHandleStaticInitializerWithTypes
private com.github.javaparser.ast.body.InitializerDeclaration createVarHandleStaticInitializerWithTypes(java.lang.String className, java.util.List<JavaParsingVarHandleLinkedQueueGenerator.FieldInfo> fieldInfos)Creates a static initializer block for VarHandle initialization with proper field types
-
varHandleGetAndSet
private com.github.javaparser.ast.stmt.BlockStmt varHandleGetAndSet(java.lang.String varHandleFieldName, java.lang.String newValueName, com.github.javaparser.ast.type.Type returnType)Generates something likereturn (LinkedQueueVarHandleNode) VH_PRODUCER_NODE.getAndSet(this, newValue)
-
varHandleRefArrayType
private com.github.javaparser.ast.type.ArrayType varHandleRefArrayType(com.github.javaparser.ast.type.ArrayType in)
-
simpleParametricType
private com.github.javaparser.ast.type.ClassOrInterfaceType simpleParametricType(java.lang.String typeName, java.lang.String... typeParams)
-
-