summaryrefslogtreecommitdiff
path: root/src/main/java/core
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2025-06-20 17:18:45 +0300
committerPaul Buetow <paul@buetow.org>2025-06-20 17:18:45 +0300
commit5e16f7f37c984d7ee1d1f0484cf0a8154bbb849d (patch)
treeb163049ab785dcfba3bc46cb159156e1c8566bf1 /src/main/java/core
parent28beef18a728ec4c35e47378c514ad826c2f9a31 (diff)
Improve code quality: Replace instanceof with polymorphism and extract constants
Major improvements: 1. Replace instanceof checks with polymorphic methods in VSAbstractEvent hierarchy - Added isInternalEvent(), isMessageReceiveEvent(), etc. methods - Added getEventPriority() for clean event ordering - Added shouldIncreaseTimestamps() to control timestamp behavior - Refactored VSTask to use these polymorphic methods 2. Extract magic numbers and strings to constants - Created VSConstants class for centralized configuration values - Added event priority constants (PRIORITY_HIGHEST, PRIORITY_HIGH, etc.) - Extracted string constants like CLASS_PREFIX - Moved magic numbers to named constants (PERCENTAGE_RANGE, etc.) 3. Update tests to work with new polymorphic approach - Fixed mocking in VSTaskTest to return correct values - All 132 tests passing These changes improve maintainability, reduce coupling, and make the codebase more self-documenting. The polymorphic approach eliminates type checking and makes it easier to add new event types. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Diffstat (limited to 'src/main/java/core')
-rw-r--r--src/main/java/core/VSInternalProcess.java2
-rw-r--r--src/main/java/core/VSTask.java58
2 files changed, 10 insertions, 50 deletions
diff --git a/src/main/java/core/VSInternalProcess.java b/src/main/java/core/VSInternalProcess.java
index 81cc3fd..8116471 100644
--- a/src/main/java/core/VSInternalProcess.java
+++ b/src/main/java/core/VSInternalProcess.java
@@ -155,7 +155,7 @@ public class VSInternalProcess extends VSAbstractProcess {
* @return A random percentage 0..100.
*/
public synchronized int getRandomPercentage() {
- return random.nextInt() % 101;
+ return random.nextInt() % constants.VSConstants.PERCENTAGE_RANGE;
}
/**
diff --git a/src/main/java/core/VSTask.java b/src/main/java/core/VSTask.java
index 54d7ff1..cc43f1c 100644
--- a/src/main/java/core/VSTask.java
+++ b/src/main/java/core/VSTask.java
@@ -6,11 +6,6 @@ import java.io.ObjectOutputStream;
import events.VSAbstractEvent;
import events.VSRegisteredEvents;
-import events.implementations.VSProcessCrashEvent;
-import events.implementations.VSProcessRecoverEvent;
-import events.internal.VSAbstractInternalEvent;
-import events.internal.VSMessageReceiveEvent;
-import events.internal.VSProtocolEvent;
import exceptions.VSEventNotCopyableException;
import prefs.VSPrefs;
import protocols.VSAbstractProtocol;
@@ -165,7 +160,7 @@ public class VSTask implements Comparable<Object>, VSSerializable {
* @return true, if the task is using an internal event
*/
public boolean hasInternalEvent() {
- return event instanceof VSAbstractInternalEvent;
+ return event.isInternalEvent();
}
/**
@@ -174,7 +169,7 @@ public class VSTask implements Comparable<Object>, VSSerializable {
* @return true, if the task should not get serialized
*/
public boolean hasNotSerializableEvent() {
- return event instanceof VSNotSerializable;
+ return !event.isSerializable();
}
/**
@@ -183,7 +178,7 @@ public class VSTask implements Comparable<Object>, VSSerializable {
* @return true, if it is a message receive event
*/
public boolean hasMessageReceiveEvent() {
- return event instanceof VSMessageReceiveEvent;
+ return event.isMessageReceiveEvent();
}
/**
@@ -192,7 +187,7 @@ public class VSTask implements Comparable<Object>, VSSerializable {
* @return true, if it is a process recover event
*/
public boolean hasProcessRecoverEvent() {
- return event instanceof VSProcessRecoverEvent;
+ return event.isProcessRecoverEvent();
}
/**
@@ -268,8 +263,7 @@ public class VSTask implements Comparable<Object>, VSSerializable {
if (event.getProcess() == null)
event.init(process);
- if (!(event instanceof VSMessageReceiveEvent)
- && !(event instanceof VSAbstractProtocol))
+ if (event.shouldIncreaseTimestamps())
process.increaseVectorAndLamportTimeIfAll();
event.onStart();
@@ -370,44 +364,10 @@ public class VSTask implements Comparable<Object>, VSSerializable {
VSAbstractEvent event2 = task.getEvent();
- /* If it's a recovering, it should get handled very first */
- boolean a = event instanceof VSProcessRecoverEvent;
- boolean b = event2 instanceof VSProcessRecoverEvent;
-
- if (a && b)
- return 0;
-
- if (a)
- return -1;
-
- if (b)
- return 1;
-
- /* If it's a crash, it should get handled second first */
- a = event instanceof VSProcessCrashEvent;
- b = event2 instanceof VSProcessCrashEvent;
-
- if (a && b)
- return 0;
-
- if (a)
- return -1;
-
- if (b)
- return 1;
-
- /* If it's a VSProtocolEvent, it should get handled third */
- a = event instanceof VSProtocolEvent;
- b = event2 instanceof VSProtocolEvent;
-
- if (a && b)
- return 0;
-
- if (a)
- return -1;
-
- if (b)
- return 1;
+ /* Use priority-based comparison for event ordering */
+ int priorityDiff = event.getEventPriority() - event2.getEventPriority();
+ if (priorityDiff != 0)
+ return priorityDiff;
String shortname = event.getShortname();
String shortname2 = event2.getShortname();