Fix event related null pointer issues
This commit is contained in:
+3
-11
@@ -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; }
|
||||
|
||||
}
|
||||
+2
-10
@@ -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; }
|
||||
|
||||
|
||||
//==================//
|
||||
|
||||
+2
-10
@@ -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; }
|
||||
|
||||
}
|
||||
+2
-10
@@ -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; }
|
||||
|
||||
|
||||
//==================//
|
||||
|
||||
+2
-10
@@ -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; }
|
||||
|
||||
|
||||
//==================//
|
||||
|
||||
+2
-10
@@ -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; }
|
||||
|
||||
|
||||
//==================//
|
||||
|
||||
+2
-10
@@ -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; }
|
||||
|
||||
}
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user