Package org.jctools.queues.varhandle
Class JavaParsingVarHandleArrayQueueGenerator
- java.lang.Object
-
- com.github.javaparser.ast.visitor.VoidVisitorAdapter<java.lang.Void>
-
- org.jctools.queues.varhandle.JavaParsingVarHandleQueueGenerator
-
- org.jctools.queues.varhandle.JavaParsingVarHandleArrayQueueGenerator
-
- All Implemented Interfaces:
com.github.javaparser.ast.visitor.VoidVisitor<java.lang.Void>,JCToolsGenerator
- Direct Known Subclasses:
JavaParsingVarHandleUnpaddedArrayQueueGenerator
public class JavaParsingVarHandleArrayQueueGenerator extends JavaParsingVarHandleQueueGenerator
This generator takes in an JCTools 'ArrayQueue' Java source file and patchesUnsafeaccesses intoVarHandle. It outputs a Java source file with these patches.An 'ArrayQueue' is one that is backed by a circular array and use a
producerLimitand aconsumerLimitfield to track the positions of each.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static classJavaParsingVarHandleArrayQueueGenerator.FieldInfoHelper class to track field information
-
Field Summary
-
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 JavaParsingVarHandleArrayQueueGenerator(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<JavaParsingVarHandleArrayQueueGenerator.FieldInfo> fieldInfos)Creates a static initializer block for VarHandle initialization with proper field typesstatic voidmain(java.lang.String[] args)private voidpatchMethodAsDeprecatedRedirector(com.github.javaparser.ast.body.MethodDeclaration methodToPatch, java.lang.String toMethodName, com.github.javaparser.ast.type.Type returnType, com.github.javaparser.ast.body.Parameter... parameters)Given a method declaration node this method will replace it's code and signature with code to redirect all calls to it to thenewMethodName.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)(package private) java.lang.StringvarHandleFieldName(java.lang.String fieldName)voidvisit(com.github.javaparser.ast.body.ClassOrInterfaceDeclaration node, java.lang.Void arg)voidvisit(com.github.javaparser.ast.body.ConstructorDeclaration 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, 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
-
processSpecialNodeTypes
void processSpecialNodeTypes(com.github.javaparser.ast.nodeTypes.NodeWithType<?,com.github.javaparser.ast.type.Type> node, java.lang.String name)- Specified by:
processSpecialNodeTypesin classJavaParsingVarHandleQueueGenerator
-
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>
-
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>
-
varHandleFieldName
java.lang.String varHandleFieldName(java.lang.String fieldName)
- Specified by:
varHandleFieldNamein classJavaParsingVarHandleQueueGenerator
-
patchMethodAsDeprecatedRedirector
private void patchMethodAsDeprecatedRedirector(com.github.javaparser.ast.body.MethodDeclaration methodToPatch, java.lang.String toMethodName, com.github.javaparser.ast.type.Type returnType, com.github.javaparser.ast.body.Parameter... parameters)Given a method declaration node this method will replace it's code and signature with code to redirect all calls to it to thenewMethodName. Method signatures of both methods must match exactly.
-
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 followed by the field name are processed.- 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<JavaParsingVarHandleArrayQueueGenerator.FieldInfo> fieldInfos)Creates a static initializer block for VarHandle initialization with proper field types
-
-