This is an automated email from the ASF dual-hosted git repository.

ifesdjeen pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/cassandra-simulator.git

commit 8fcc63389bbe71a028eee37023d0ebdc38cfceb0
Author: Alex Petrov <[email protected]>
AuthorDate: Tue Aug 4 07:06:27 2026 +0200

    Rename
---
 .../simulator/asm/{Utils.java => AsmUtils.java}    |  2 +-
 .../cassandra/simulator/asm/ClassTransformer.java  | 20 ++++----
 .../simulator/asm/GlobalMethodTransformer.java     |  2 +-
 .../cassandra/simulator/asm/InterceptAgent.java    |  2 +-
 .../cassandra/simulator/asm/InterceptClasses.java  |  6 +--
 .../apache/cassandra/simulator/asm/Simulate.java   | 56 ++++++++++++++++++++++
 .../org/apache/cassandra/simulator/Simulator.java  |  1 +
 7 files changed, 73 insertions(+), 16 deletions(-)

diff --git 
a/simulator-asm/src/main/java/org/apache/cassandra/simulator/asm/Utils.java 
b/simulator-asm/src/main/java/org/apache/cassandra/simulator/asm/AsmUtils.java
similarity index 99%
rename from 
simulator-asm/src/main/java/org/apache/cassandra/simulator/asm/Utils.java
rename to 
simulator-asm/src/main/java/org/apache/cassandra/simulator/asm/AsmUtils.java
index d710ffe..55b9255 100644
--- a/simulator-asm/src/main/java/org/apache/cassandra/simulator/asm/Utils.java
+++ 
b/simulator-asm/src/main/java/org/apache/cassandra/simulator/asm/AsmUtils.java
@@ -37,7 +37,7 @@ import static org.objectweb.asm.Opcodes.ATHROW;
 import static org.objectweb.asm.Opcodes.F_SAME1;
 import static org.objectweb.asm.Opcodes.INVOKESTATIC;
 
-public class Utils
+public class AsmUtils
 {
     public static String toInternalName(Class<?> clazz)
     {
diff --git 
a/simulator-asm/src/main/java/org/apache/cassandra/simulator/asm/ClassTransformer.java
 
b/simulator-asm/src/main/java/org/apache/cassandra/simulator/asm/ClassTransformer.java
index b79715c..eb900f2 100644
--- 
a/simulator-asm/src/main/java/org/apache/cassandra/simulator/asm/ClassTransformer.java
+++ 
b/simulator-asm/src/main/java/org/apache/cassandra/simulator/asm/ClassTransformer.java
@@ -43,9 +43,9 @@ import static org.apache.cassandra.simulator.asm.Flag.NEMESIS;
 import static org.apache.cassandra.simulator.asm.Flag.NO_PROXY_METHODS;
 import static org.apache.cassandra.simulator.asm.TransformationKind.HASHCODE;
 import static 
org.apache.cassandra.simulator.asm.TransformationKind.SYNCHRONIZED;
-import static org.apache.cassandra.simulator.asm.Utils.deterministicToString;
-import static 
org.apache.cassandra.simulator.asm.Utils.generateTryFinallyProxyCall;
-import static org.apache.cassandra.simulator.asm.Utils.visitEachRefType;
+import static 
org.apache.cassandra.simulator.asm.AsmUtils.deterministicToString;
+import static 
org.apache.cassandra.simulator.asm.AsmUtils.generateTryFinallyProxyCall;
+import static org.apache.cassandra.simulator.asm.AsmUtils.visitEachRefType;
 import static org.objectweb.asm.Opcodes.ACC_PRIVATE;
 import static org.objectweb.asm.Opcodes.ACC_STATIC;
 import static org.objectweb.asm.Opcodes.ACC_SYNTHETIC;
@@ -67,35 +67,35 @@ class ClassTransformer extends ClassVisitor implements 
MethodWriterSink
         public void visitTypeInsn(int opcode, String type)
         {
             super.visitTypeInsn(opcode, type);
-            Utils.visitIfRefType(type, dependentTypes);
+            AsmUtils.visitIfRefType(type, dependentTypes);
         }
 
         @Override
         public void visitFieldInsn(int opcode, String owner, String name, 
String descriptor)
         {
             super.visitFieldInsn(opcode, owner, name, descriptor);
-            Utils.visitIfRefType(descriptor, dependentTypes);
+            AsmUtils.visitIfRefType(descriptor, dependentTypes);
         }
 
         @Override
         public void visitMethodInsn(int opcode, String owner, String name, 
String descriptor, boolean isInterface)
         {
             super.visitMethodInsn(opcode, owner, name, descriptor, 
isInterface);
-            Utils.visitEachRefType(descriptor, dependentTypes);
+            AsmUtils.visitEachRefType(descriptor, dependentTypes);
         }
 
         @Override
         public void visitInvokeDynamicInsn(String name, String descriptor, 
Handle bootstrapMethodHandle, Object... bootstrapMethodArguments)
         {
             super.visitInvokeDynamicInsn(name, descriptor, 
bootstrapMethodHandle, bootstrapMethodArguments);
-            Utils.visitEachRefType(descriptor, dependentTypes);
+            AsmUtils.visitEachRefType(descriptor, dependentTypes);
         }
 
         @Override
         public void visitLocalVariable(String name, String descriptor, String 
signature, Label start, Label end, int index)
         {
             super.visitLocalVariable(name, descriptor, signature, start, end, 
index);
-            Utils.visitIfRefType(descriptor, dependentTypes);
+            AsmUtils.visitIfRefType(descriptor, dependentTypes);
         }
     }
 
@@ -207,7 +207,7 @@ class ClassTransformer extends ClassVisitor implements 
MethodWriterSink
     public FieldVisitor visitField(int access, String name, String descriptor, 
String signature, Object value)
     {
         if (dependentTypes != null)
-            Utils.visitIfRefType(descriptor, dependentTypes);
+            AsmUtils.visitIfRefType(descriptor, dependentTypes);
         // 
org.apache.cassandra.simulator.systems.SimulatedTime.InstanceTime.nanoTime does 
not change between invokes which causes AbstractQueuedSynchronizer to loop 
forever,
         // so need to make the threshold negative to avoid the spin loop.
         if 
(className.equals("java/util/concurrent/locks/AbstractQueuedSynchronizer") && 
name.equals("SPIN_FOR_TIMEOUT_THRESHOLD"))
@@ -308,7 +308,7 @@ class ClassTransformer extends ClassVisitor implements 
MethodWriterSink
     @Override
     public AnnotationVisitor visitAnnotation(String descriptor, boolean 
visible)
     {
-        return Utils.checkForSimulationAnnotations(api, descriptor, 
super.visitAnnotation(descriptor, visible), (flag, add) -> {
+        return AsmUtils.checkForSimulationAnnotations(api, descriptor, 
super.visitAnnotation(descriptor, visible), (flag, add) -> {
             if (add) flags.add(flag);
             else flags.remove(flag);
         });
diff --git 
a/simulator-asm/src/main/java/org/apache/cassandra/simulator/asm/GlobalMethodTransformer.java
 
b/simulator-asm/src/main/java/org/apache/cassandra/simulator/asm/GlobalMethodTransformer.java
index 562104d..a09e0b1 100644
--- 
a/simulator-asm/src/main/java/org/apache/cassandra/simulator/asm/GlobalMethodTransformer.java
+++ 
b/simulator-asm/src/main/java/org/apache/cassandra/simulator/asm/GlobalMethodTransformer.java
@@ -311,7 +311,7 @@ class GlobalMethodTransformer extends MethodVisitor
     @Override
     public AnnotationVisitor visitAnnotation(String descriptor, boolean 
visible)
     {
-        return Utils.checkForSimulationAnnotations(api, descriptor, 
super.visitAnnotation(descriptor, visible), (flag, add) -> {
+        return AsmUtils.checkForSimulationAnnotations(api, descriptor, 
super.visitAnnotation(descriptor, visible), (flag, add) -> {
             switch (flag)
             {
                 default: throw new AssertionError();
diff --git 
a/simulator-asm/src/main/java/org/apache/cassandra/simulator/asm/InterceptAgent.java
 
b/simulator-asm/src/main/java/org/apache/cassandra/simulator/asm/InterceptAgent.java
index aa33906..4d95090 100644
--- 
a/simulator-asm/src/main/java/org/apache/cassandra/simulator/asm/InterceptAgent.java
+++ 
b/simulator-asm/src/main/java/org/apache/cassandra/simulator/asm/InterceptAgent.java
@@ -212,7 +212,7 @@ public class InterceptAgent
             public MethodVisitor visitMethod(int access, String name, String 
descriptor, String signature, String[] exceptions)
             {
                 if (descriptor.equals("()Ljava/lang/String;") && 
name.equals("toString"))
-                    return 
Utils.deterministicToString(super.visitMethod(access, name, descriptor, 
signature, exceptions));
+                    return 
AsmUtils.deterministicToString(super.visitMethod(access, name, descriptor, 
signature, exceptions));
                 else
                     return super.visitMethod(access, name, descriptor, 
signature, exceptions);
             }
diff --git 
a/simulator-asm/src/main/java/org/apache/cassandra/simulator/asm/InterceptClasses.java
 
b/simulator-asm/src/main/java/org/apache/cassandra/simulator/asm/InterceptClasses.java
index 69e36b6..16942ff 100644
--- 
a/simulator-asm/src/main/java/org/apache/cassandra/simulator/asm/InterceptClasses.java
+++ 
b/simulator-asm/src/main/java/org/apache/cassandra/simulator/asm/InterceptClasses.java
@@ -312,7 +312,7 @@ public class InterceptClasses implements BiFunction<String, 
byte[], byte[]>
 
     static final String shadowRootExternalType = 
"org.apache.cassandra.simulator.systems.InterceptibleConcurrentHashMap";
     static final String shadowRootType = 
"org/apache/cassandra/simulator/systems/InterceptibleConcurrentHashMap";
-    static final String originalRootType = 
Utils.toInternalName(ConcurrentHashMap.class);
+    static final String originalRootType = 
AsmUtils.toInternalName(ConcurrentHashMap.class);
     static final String shadowOuterTypePrefix = shadowRootType + '$';
     static final String originalOuterTypePrefix = originalRootType + '$';
 
@@ -323,7 +323,7 @@ public class InterceptClasses implements BiFunction<String, 
byte[], byte[]>
 
         try
         {
-            String originalType, shadowType = 
Utils.toInternalName(externalName);
+            String originalType, shadowType = 
AsmUtils.toInternalName(externalName);
             if (!shadowType.startsWith(shadowOuterTypePrefix))
                 originalType = originalRootType;
             else
@@ -339,7 +339,7 @@ public class InterceptClasses implements BiFunction<String, 
byte[], byte[]>
                                                    originalType, shadowType, 
originalRootType, shadowRootType,
                                                    originalOuterTypePrefix, 
shadowOuterTypePrefix,
                                                    flags, 
monitorDelayChance.apply(hashCode), nemesis, nemesisFieldSelector, null);
-            transformer.readAndTransform(Utils.readDefinition(originalType + 
".class"));
+            transformer.readAndTransform(AsmUtils.readDefinition(originalType 
+ ".class"));
             return transformer.toBytes();
         }
         catch (IOException e)
diff --git 
a/simulator-asm/src/main/java/org/apache/cassandra/simulator/asm/Simulate.java 
b/simulator-asm/src/main/java/org/apache/cassandra/simulator/asm/Simulate.java
new file mode 100644
index 0000000..0426e3f
--- /dev/null
+++ 
b/simulator-asm/src/main/java/org/apache/cassandra/simulator/asm/Simulate.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.cassandra.simulator.asm;
+
+/**
+ * Enable certain features for a specific method or class.
+ *
+ * Note that presently class level annotations are not inherited by inner 
classes.
+ *
+ * TODO: support package level, and apply to all nested classes
+ */
+public @interface Simulate
+{
+    enum With
+    {
+        /**
+         * Calls to FBUtilities.timestampMicros() will be guaranteed globally 
monotonically increasing.
+         *
+         * May be annotated at the method or class level.
+         */
+        GLOBAL_CLOCK,
+
+        /**
+         * synchronized methods and blocks, and wait/notify.
+         *
+         * May be annotated at the class level.
+         */
+        MONITORS,
+
+        /**
+         * Usages of LockSupport. This defaults to ON for all classes, 
including system classes.
+         *
+         * May be annotated at the method or class level.
+         */
+        LOCK_SUPPORT
+    }
+
+    With[] with() default {};
+    With[] without() default {};
+}
\ No newline at end of file
diff --git 
a/simulator-core/src/main/java/org/apache/cassandra/simulator/Simulator.java 
b/simulator-core/src/main/java/org/apache/cassandra/simulator/Simulator.java
index 709b976..88625e1 100644
--- a/simulator-core/src/main/java/org/apache/cassandra/simulator/Simulator.java
+++ b/simulator-core/src/main/java/org/apache/cassandra/simulator/Simulator.java
@@ -108,6 +108,7 @@ public class Simulator implements AutoCloseable
     private final Debug debug;
     private final ClassLoader classLoader;
     private final ThreadGroup threadGroup;
+    // TODO: this should be improved; rather than storing the prefix here, we 
should instead store the policy
     private final String classTransformationPrefix;
     private final AtomicReference<Throwable> firstUncaught = new 
AtomicReference<>();
     private final float monitorDelayChance;


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to