Class JavaParsingVarHandleLinkedQueueGenerator
java.lang.Object
com.github.javaparser.ast.visitor.VoidVisitorAdapter<Void>
org.jctools.queues.varhandle.JavaParsingVarHandleQueueGenerator
org.jctools.queues.varhandle.JavaParsingVarHandleLinkedQueueGenerator
- All Implemented Interfaces:
com.github.javaparser.ast.visitor.VoidVisitor<Void>, JCToolsGenerator
- Direct Known Subclasses:
JavaParsingVarHandleUnpaddedLinkedQueueGenerator
This generator takes in an JCTools 'LinkedQueue' Java source file and patches
Unsafe accesses into
VarHandle. It outputs a Java source file with these patches.
A 'LinkedQueue' is one that is backed by a linked list and uses a producerNode and a
consumerNode field to track the positions of each.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static classHelper class to track field information -
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate com.github.javaparser.ast.body.InitializerDeclarationcreateVarHandleStaticInitializerWithTypes(String className, List<JavaParsingVarHandleLinkedQueueGenerator.FieldInfo> fieldInfos) Creates a static initializer block for VarHandle initialization with proper field typesstatic voidprivate 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, 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(String typeName, String... typeParams) (package private) StringvarHandleFieldName(String fieldName) private com.github.javaparser.ast.stmt.BlockStmtvarHandleGetAndSet(String varHandleFieldName, String newValueName, com.github.javaparser.ast.type.Type returnType) Generates something likereturn (LinkedQueueVarHandleNode) VH_PRODUCER_NODE.getAndSet(this, newValue) private Stringprivate com.github.javaparser.ast.type.ArrayTypevarHandleRefArrayType(com.github.javaparser.ast.type.ArrayType in) voidvoidvoidvoidvoidMethods inherited from class 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, visitMethods 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, visitMethods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface JCToolsGenerator
visit
-
Field Details
-
mpscLinkedQueueName
-
-
Constructor Details
-
JavaParsingVarHandleLinkedQueueGenerator
-
-
Method Details
-
main
-
visit
-
varHandleQueueName
-
visit
-
visit
-
visit
-
visit
-
varHandleFieldName
- Specified by:
varHandleFieldNamein classJavaParsingVarHandleQueueGenerator
-
processSpecialNodeTypes
void processSpecialNodeTypes(com.github.javaparser.ast.nodeTypes.NodeWithType<?, com.github.javaparser.ast.type.Type> node, 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(String className, List<JavaParsingVarHandleLinkedQueueGenerator.FieldInfo> fieldInfos) Creates a static initializer block for VarHandle initialization with proper field types -
varHandleGetAndSet
-
varHandleRefArrayType
private com.github.javaparser.ast.type.ArrayType varHandleRefArrayType(com.github.javaparser.ast.type.ArrayType in) -
simpleParametricType
-