Fix event related null pointer issues

This commit is contained in:
James Seibel
2022-11-24 23:09:00 -06:00
parent 0647d212d6
commit d6a83c8b61
12 changed files with 55 additions and 111 deletions
@@ -24,17 +24,9 @@ public abstract class DhApiAfterDhInitEvent implements IDhApiEvent<Void>
this.afterDistantHorizonsInit();
return false;
}
private static boolean firstTimeSetupComplete = false;
public DhApiAfterDhInitEvent()
{
if (!firstTimeSetupComplete)
{
firstTimeSetupComplete = true;
ApiEventDefinitionHandler.setEventDefinition(DhApiAfterDhInitEvent.class, new DhApiEventDefinition(false, true));
}
}
public final static DhApiEventDefinition EVENT_DEFINITION = new DhApiEventDefinition(false, true);
@Override
public final DhApiEventDefinition getEventDefinition() { return ApiEventDefinitionHandler.getEventDefinition(DhApiAfterDhInitEvent.class); }
public final DhApiEventDefinition getEventDefinition() { return EVENT_DEFINITION; }
}
@@ -26,17 +26,9 @@ public abstract class DhApiAfterRenderEvent implements IDhApiEvent<DhApiAfterRen
return false;
}
private static boolean firstTimeSetupComplete = false;
public DhApiAfterRenderEvent()
{
if (!firstTimeSetupComplete)
{
firstTimeSetupComplete = true;
ApiEventDefinitionHandler.setEventDefinition(DhApiAfterRenderEvent.class, new DhApiEventDefinition(false, false));
}
}
public final static DhApiEventDefinition EVENT_DEFINITION = new DhApiEventDefinition(false, false);
@Override
public final DhApiEventDefinition getEventDefinition() { return ApiEventDefinitionHandler.getEventDefinition(DhApiAfterRenderEvent.class); }
public final DhApiEventDefinition getEventDefinition() { return EVENT_DEFINITION; }
//==================//
@@ -27,16 +27,8 @@ public abstract class DhApiBeforeDhInitEvent implements IDhApiEvent<Void>
return false;
}
private static boolean firstTimeSetupComplete = false;
public DhApiBeforeDhInitEvent()
{
if (!firstTimeSetupComplete)
{
firstTimeSetupComplete = true;
ApiEventDefinitionHandler.setEventDefinition(DhApiBeforeDhInitEvent.class, new DhApiEventDefinition(false, true));
}
}
public final static DhApiEventDefinition EVENT_DEFINITION = new DhApiEventDefinition(false, true);
@Override
public final DhApiEventDefinition getEventDefinition() { return ApiEventDefinitionHandler.getEventDefinition(DhApiBeforeDhInitEvent.class); }
public final DhApiEventDefinition getEventDefinition() { return EVENT_DEFINITION; }
}
@@ -26,17 +26,9 @@ public abstract class DhApiBeforeRenderEvent implements IDhApiEvent<DhApiBeforeR
@Override
public final boolean fireEvent(EventParam input) { return this.beforeRender(input); }
private static boolean firstTimeSetupComplete = false;
public DhApiBeforeRenderEvent()
{
if (!firstTimeSetupComplete)
{
firstTimeSetupComplete = true;
ApiEventDefinitionHandler.setEventDefinition(DhApiBeforeRenderEvent.class, new DhApiEventDefinition(true, false));
}
}
public final static DhApiEventDefinition EVENT_DEFINITION = new DhApiEventDefinition(true, false);
@Override
public final DhApiEventDefinition getEventDefinition() { return ApiEventDefinitionHandler.getEventDefinition(DhApiBeforeRenderEvent.class); }
public final DhApiEventDefinition getEventDefinition() { return EVENT_DEFINITION; }
//==================//
@@ -26,17 +26,9 @@ public abstract class DhApiLevelLoadEvent implements IDhApiEvent<DhApiLevelLoadE
return false;
}
private static boolean firstTimeSetupComplete = false;
public DhApiLevelLoadEvent()
{
if (!firstTimeSetupComplete)
{
firstTimeSetupComplete = true;
ApiEventDefinitionHandler.setEventDefinition(DhApiLevelLoadEvent.class, new DhApiEventDefinition(false, false));
}
}
public final static DhApiEventDefinition EVENT_DEFINITION = new DhApiEventDefinition(false, false);
@Override
public final DhApiEventDefinition getEventDefinition() { return ApiEventDefinitionHandler.getEventDefinition(DhApiLevelLoadEvent.class); }
public final DhApiEventDefinition getEventDefinition() { return EVENT_DEFINITION; }
//==================//
@@ -26,17 +26,9 @@ public abstract class DhApiLevelSaveEvent implements IDhApiEvent<DhApiLevelSaveE
return false;
}
private static boolean firstTimeSetupComplete = false;
public DhApiLevelSaveEvent()
{
if (!firstTimeSetupComplete)
{
firstTimeSetupComplete = true;
ApiEventDefinitionHandler.setEventDefinition(DhApiLevelSaveEvent.class, new DhApiEventDefinition(false, false));
}
}
public final static DhApiEventDefinition EVENT_DEFINITION = new DhApiEventDefinition(false, false);
@Override
public final DhApiEventDefinition getEventDefinition() { return ApiEventDefinitionHandler.getEventDefinition(DhApiLevelSaveEvent.class); }
public final DhApiEventDefinition getEventDefinition() { return EVENT_DEFINITION; }
//==================//
@@ -26,17 +26,9 @@ public abstract class DhApiLevelUnloadEvent implements IDhApiEvent<DhApiLevelUnl
return false;
}
private static boolean firstTimeSetupComplete = false;
public DhApiLevelUnloadEvent()
{
if (!firstTimeSetupComplete)
{
firstTimeSetupComplete = true;
ApiEventDefinitionHandler.setEventDefinition(DhApiLevelUnloadEvent.class, new DhApiEventDefinition(false, false));
}
}
public final static DhApiEventDefinition EVENT_DEFINITION = new DhApiEventDefinition(false, false);
@Override
public final DhApiEventDefinition getEventDefinition() { return ApiEventDefinitionHandler.getEventDefinition(DhApiLevelUnloadEvent.class); }
public final DhApiEventDefinition getEventDefinition() { return EVENT_DEFINITION; }
//==================//
@@ -53,7 +53,7 @@ public class ApiEventInjector extends DependencyInjector<IDhApiEvent> implements
public void bind(Class<? extends IDhApiEvent> abstractEvent, IDhApiEvent eventImplementation) throws IllegalStateException, IllegalArgumentException
{
// is this a one time event?
if (ApiEventDefinitionHandler.getEventDefinition(abstractEvent).isOneTimeEvent)
if (ApiEventDefinitionHandler.INSTANCE.getEventDefinition(abstractEvent).isOneTimeEvent)
{
// has this one time event been fired yet?
if (firedOneTimeEventParamsByEventInterface.containsKey(abstractEvent))
@@ -120,7 +120,7 @@ public class ApiEventInjector extends DependencyInjector<IDhApiEvent> implements
boolean cancelEvent = false;
// if this is a one time event, record that it was called
if (ApiEventDefinitionHandler.getEventDefinition(abstractEvent).isOneTimeEvent &&
if (ApiEventDefinitionHandler.INSTANCE.getEventDefinition(abstractEvent).isOneTimeEvent &&
!firedOneTimeEventParamsByEventInterface.containsKey(abstractEvent))
{
firedOneTimeEventParamsByEventInterface.put(abstractEvent, eventParameterObject);
@@ -19,7 +19,7 @@
package com.seibel.lod.core.events;
import com.seibel.lod.api.methods.events.abstractEvents.DhApiBeforeDhInitEvent;
import com.seibel.lod.api.methods.events.abstractEvents.*;
import com.seibel.lod.api.methods.events.interfaces.IDhApiEvent;
import com.seibel.lod.api.objects.events.DhApiEventDefinition;
import org.apache.logging.log4j.LogManager;
@@ -45,7 +45,20 @@ public class ApiEventDefinitionHandler
private ApiEventDefinitionHandler() { }
private ApiEventDefinitionHandler() { this.addInitialBindings(); }
public void addInitialBindings()
{
this.setEventDefinition(DhApiAfterDhInitEvent.class, DhApiAfterDhInitEvent.EVENT_DEFINITION);
this.setEventDefinition(DhApiAfterRenderEvent.class, DhApiAfterRenderEvent.EVENT_DEFINITION);
this.setEventDefinition(DhApiBeforeDhInitEvent.class, DhApiBeforeDhInitEvent.EVENT_DEFINITION);
this.setEventDefinition(DhApiBeforeRenderEvent.class, DhApiBeforeRenderEvent.EVENT_DEFINITION);
this.setEventDefinition(DhApiLevelLoadEvent.class, DhApiLevelLoadEvent.EVENT_DEFINITION);
this.setEventDefinition(DhApiLevelSaveEvent.class, DhApiLevelSaveEvent.EVENT_DEFINITION);
this.setEventDefinition(DhApiLevelUnloadEvent.class, DhApiLevelUnloadEvent.EVENT_DEFINITION);
}
/**
* This should only be used for unit testing.
@@ -55,24 +68,27 @@ public class ApiEventDefinitionHandler
public static void setEventDefinition(Class<? extends IDhApiEvent> eventInterface, DhApiEventDefinition definition)
public void setEventDefinition(Class<? extends IDhApiEvent> eventInterface, DhApiEventDefinition definition)
{
if (INSTANCE.DEFINITIONS_BY_EVENT_INTERFACE.containsKey(eventInterface))
if (this.DEFINITIONS_BY_EVENT_INTERFACE.containsKey(eventInterface))
{
LOGGER.warn("duplicate key added [" + eventInterface.getSimpleName() + "]");
}
INSTANCE.DEFINITIONS_BY_EVENT_INTERFACE.put(eventInterface, definition);
this.DEFINITIONS_BY_EVENT_INTERFACE.put(eventInterface, definition);
}
public static DhApiEventDefinition getEventDefinition(Class<? extends IDhApiEvent> eventInterface)
public DhApiEventDefinition getEventDefinition(Class<? extends IDhApiEvent> eventInterface)
{
if (!INSTANCE.DEFINITIONS_BY_EVENT_INTERFACE.containsKey(eventInterface))
if (!this.DEFINITIONS_BY_EVENT_INTERFACE.containsKey(eventInterface))
{
// attempt to get the definition for this class
throw new NullPointerException("event definition missing for: [" + eventInterface.getSimpleName() + "]");
}
return INSTANCE.DEFINITIONS_BY_EVENT_INTERFACE.get(eventInterface);
return this.DEFINITIONS_BY_EVENT_INTERFACE.get(eventInterface);
}
}
@@ -2,7 +2,6 @@ package testItems.events.abstractObjects;
import com.seibel.lod.api.methods.events.interfaces.IDhApiEvent;
import com.seibel.lod.api.objects.events.DhApiEventDefinition;
import com.seibel.lod.core.events.ApiEventDefinitionHandler;
/**
* A dummy event implementation used for unit testing.
@@ -30,17 +29,8 @@ public abstract class DhApiOneTimeTestEvent implements IDhApiEvent<Boolean>
return input;
}
public static boolean firstTimeSetupComplete = false;
public DhApiOneTimeTestEvent()
{
if (!firstTimeSetupComplete)
{
firstTimeSetupComplete = true;
ApiEventDefinitionHandler.setEventDefinition(DhApiOneTimeTestEvent.class, new DhApiEventDefinition(false, true));
}
}
public final static DhApiEventDefinition EVENT_DEFINITION = new DhApiEventDefinition(false, true);
@Override
public final DhApiEventDefinition getEventDefinition() { return ApiEventDefinitionHandler.getEventDefinition(DhApiOneTimeTestEvent.class); }
public final DhApiEventDefinition getEventDefinition() { return EVENT_DEFINITION; }
}
@@ -2,7 +2,6 @@ package testItems.events.abstractObjects;
import com.seibel.lod.api.methods.events.interfaces.IDhApiEvent;
import com.seibel.lod.api.objects.events.DhApiEventDefinition;
import com.seibel.lod.core.events.ApiEventDefinitionHandler;
/**
* A dummy event implementation used for unit testing.
@@ -31,17 +30,8 @@ public abstract class DhApiTestEvent implements IDhApiEvent<Boolean>
return input;
}
public static boolean firstTimeSetupComplete = false;
public DhApiTestEvent()
{
if (!firstTimeSetupComplete)
{
firstTimeSetupComplete = true;
ApiEventDefinitionHandler.setEventDefinition(DhApiTestEvent.class, new DhApiEventDefinition(false, false));
}
}
public final static DhApiEventDefinition EVENT_DEFINITION = new DhApiEventDefinition(false, false);
@Override
public final DhApiEventDefinition getEventDefinition() { return ApiEventDefinitionHandler.getEventDefinition(DhApiTestEvent.class); }
public final DhApiEventDefinition getEventDefinition() { return EVENT_DEFINITION; }
}
+10 -6
View File
@@ -1,13 +1,12 @@
package tests;
import com.seibel.lod.api.methods.events.abstractEvents.DhApiAfterDhInitEvent;
import com.seibel.lod.api.objects.events.DhApiEventDefinition;
import com.seibel.lod.core.DependencyInjection.ApiEventInjector;
import com.seibel.lod.core.events.ApiEventDefinitionHandler;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Order;
import testItems.events.abstractObjects.DhApiOneTimeTestEvent;
import testItems.events.objects.DhOneTimeTestEventHandler;
import testItems.events.objects.DhOneTimeTestEventHandlerAlt;
@@ -31,8 +30,12 @@ public class EventInjectorTest
ApiEventInjector.INSTANCE.clear();
ApiEventDefinitionHandler.INSTANCE.clear();
DhApiTestEvent.firstTimeSetupComplete = false;
DhApiOneTimeTestEvent.firstTimeSetupComplete = false;
// register test events
ApiEventDefinitionHandler.INSTANCE.setEventDefinition(DhApiTestEvent.class, DhApiTestEvent.EVENT_DEFINITION);
ApiEventDefinitionHandler.INSTANCE.setEventDefinition(DhApiOneTimeTestEvent.class, DhApiOneTimeTestEvent.EVENT_DEFINITION);
ApiEventDefinitionHandler.INSTANCE.addInitialBindings();
}
@@ -108,8 +111,9 @@ public class EventInjectorTest
public void testEventDefinition()
{
String errorMessagePrefix = "Missing " + DhApiEventDefinition.class.getSimpleName() + " for event class [";
Assert.assertNotNull(errorMessagePrefix + DhApiTestEvent.class.getSimpleName() + "]", ApiEventDefinitionHandler.getEventDefinition(DhApiTestEvent.class));
Assert.assertNotNull(errorMessagePrefix + DhApiOneTimeTestEvent.class.getSimpleName() + "]", ApiEventDefinitionHandler.getEventDefinition(DhApiOneTimeTestEvent.class));
Assert.assertNotNull(errorMessagePrefix + DhApiTestEvent.class.getSimpleName() + "]", ApiEventDefinitionHandler.INSTANCE.getEventDefinition(DhApiTestEvent.class));
Assert.assertNotNull(errorMessagePrefix + DhApiOneTimeTestEvent.class.getSimpleName() + "]", ApiEventDefinitionHandler.INSTANCE.getEventDefinition(DhApiOneTimeTestEvent.class));
Assert.assertNotNull(errorMessagePrefix + DhApiAfterDhInitEvent.class.getSimpleName() + "]", ApiEventDefinitionHandler.INSTANCE.getEventDefinition(DhApiAfterDhInitEvent.class));
}
@Test