7171import heronarts .lx .pattern .LXPattern ;
7272import heronarts .lx .pattern .PatternRack ;
7373import heronarts .lx .structure .LXFixture ;
74- import heronarts .lx .utils .LXUtils ;
7574
7675/**
7776 * Registry container for content classes used by the LX implementation
@@ -142,71 +141,73 @@ public LXRegistry removeListener(Listener listener) {
142141 return this ;
143142 }
144143
145- private static final List <Class <? extends LXPattern >> DEFAULT_PATTERNS ;
146- static {
147- DEFAULT_PATTERNS = new ArrayList <Class <? extends LXPattern >>();
148- DEFAULT_PATTERNS .add (heronarts .lx .dmx .DmxPattern .class );
149- DEFAULT_PATTERNS .add (heronarts .lx .pattern .PatternRack .class );
150- DEFAULT_PATTERNS .add (heronarts .lx .pattern .audio .SoundObjectPattern .class );
151- DEFAULT_PATTERNS .add (heronarts .lx .pattern .color .GradientPattern .class );
152- DEFAULT_PATTERNS .add (heronarts .lx .pattern .color .SolidPattern .class );
153- DEFAULT_PATTERNS .add (heronarts .lx .pattern .form .PlanesPattern .class );
154- DEFAULT_PATTERNS .add (heronarts .lx .pattern .strip .ChasePattern .class );
155- DEFAULT_PATTERNS .add (heronarts .lx .pattern .texture .NoisePattern .class );
156- DEFAULT_PATTERNS .add (heronarts .lx .pattern .texture .SparklePattern .class );
157- DEFAULT_PATTERNS .add (heronarts .lx .pattern .test .TestPattern .class );
144+ private static final Class <?>[] DEFAULT_PATTERNS = {
145+ heronarts .lx .dmx .DmxPattern .class ,
146+ heronarts .lx .pattern .PatternRack .class ,
147+ heronarts .lx .pattern .audio .SoundObjectPattern .class ,
148+ heronarts .lx .pattern .color .GradientPattern .class ,
149+ heronarts .lx .pattern .color .SolidPattern .class ,
150+ heronarts .lx .pattern .form .PlanesPattern .class ,
151+ heronarts .lx .pattern .strip .ChasePattern .class ,
152+ heronarts .lx .pattern .texture .NoisePattern .class ,
153+ heronarts .lx .pattern .texture .SparklePattern .class ,
154+ heronarts .lx .pattern .test .TestPattern .class ,
158155 };
159156
160- private static final List <Class <? extends LXEffect >> DEFAULT_EFFECTS ;
161- static {
162- DEFAULT_EFFECTS = new ArrayList <Class <? extends LXEffect >>();
163- DEFAULT_EFFECTS .add (heronarts .lx .effect .audio .SoundObjectEffect .class );
164- DEFAULT_EFFECTS .add (heronarts .lx .effect .BlurEffect .class );
165- DEFAULT_EFFECTS .add (heronarts .lx .effect .FreezeEffect .class );
166- DEFAULT_EFFECTS .add (heronarts .lx .effect .color .ColorizeEffect .class );
167- DEFAULT_EFFECTS .add (heronarts .lx .effect .color .ColorMaskEffect .class );
168- DEFAULT_EFFECTS .add (heronarts .lx .effect .color .GradientMaskEffect .class );
169- DEFAULT_EFFECTS .add (heronarts .lx .effect .color .TransparifyEffect .class );
170- DEFAULT_EFFECTS .add (heronarts .lx .effect .DynamicsEffect .class );
171- DEFAULT_EFFECTS .add (heronarts .lx .effect .InvertEffect .class );
172- DEFAULT_EFFECTS .add (heronarts .lx .effect .HueSaturationEffect .class );
173- DEFAULT_EFFECTS .add (heronarts .lx .effect .LinearMaskEffect .class );
174- DEFAULT_EFFECTS .add (heronarts .lx .effect .SparkleEffect .class );
175- DEFAULT_EFFECTS .add (heronarts .lx .effect .StrobeEffect .class );
176- DEFAULT_EFFECTS .add (heronarts .lx .effect .midi .GateEffect .class );
157+ private static final Class <?>[] DEFAULT_EFFECTS = {
158+ heronarts .lx .effect .audio .SoundObjectEffect .class ,
159+ heronarts .lx .effect .BlurEffect .class ,
160+ heronarts .lx .effect .FreezeEffect .class ,
161+ heronarts .lx .effect .color .ColorizeEffect .class ,
162+ heronarts .lx .effect .color .ColorMaskEffect .class ,
163+ heronarts .lx .effect .color .GradientMaskEffect .class ,
164+ heronarts .lx .effect .color .TransparifyEffect .class ,
165+ heronarts .lx .effect .DynamicsEffect .class ,
166+ heronarts .lx .effect .InvertEffect .class ,
167+ heronarts .lx .effect .HueSaturationEffect .class ,
168+ heronarts .lx .effect .LinearMaskEffect .class ,
169+ heronarts .lx .effect .SparkleEffect .class ,
170+ heronarts .lx .effect .StrobeEffect .class ,
171+ heronarts .lx .effect .midi .GateEffect .class ,
177172 };
178173
179- private static final List <Class <? extends LXModulator >> DEFAULT_MODULATORS ;
180- static {
181- DEFAULT_MODULATORS = new ArrayList <Class <? extends LXModulator >>();
182- DEFAULT_MODULATORS .add (heronarts .lx .audio .BandFilter .class );
183- DEFAULT_MODULATORS .add (heronarts .lx .audio .BandGate .class );
184- DEFAULT_MODULATORS .add (heronarts .lx .audio .SoundObject .class );
185- DEFAULT_MODULATORS .add (heronarts .lx .dmx .DmxModulator .class );
186- DEFAULT_MODULATORS .add (heronarts .lx .dmx .DmxColorModulator .class );
187- DEFAULT_MODULATORS .add (heronarts .lx .modulator .BooleanLogic .class );
188- DEFAULT_MODULATORS .add (heronarts .lx .modulator .ComparatorModulator .class );
189- DEFAULT_MODULATORS .add (heronarts .lx .modulator .CycleModulator .class );
190- DEFAULT_MODULATORS .add (heronarts .lx .modulator .Damper .class );
191- DEFAULT_MODULATORS .add (heronarts .lx .modulator .Interval .class );
192- DEFAULT_MODULATORS .add (heronarts .lx .modulator .MacroKnobs .class );
193- DEFAULT_MODULATORS .add (heronarts .lx .modulator .MacroSwitches .class );
194- DEFAULT_MODULATORS .add (heronarts .lx .modulator .MacroTriggers .class );
195- DEFAULT_MODULATORS .add (heronarts .lx .modulator .MidiNoteTrigger .class );
196- DEFAULT_MODULATORS .add (heronarts .lx .modulator .MultiStageEnvelope .class );
197- DEFAULT_MODULATORS .add (heronarts .lx .modulator .MultiModeEnvelope .class );
198- DEFAULT_MODULATORS .add (heronarts .lx .modulator .MultiTrig .class );
199- DEFAULT_MODULATORS .add (heronarts .lx .modulator .NoiseModulator .class );
200- DEFAULT_MODULATORS .add (heronarts .lx .modulator .OperatorModulator .class );
201- DEFAULT_MODULATORS .add (heronarts .lx .modulator .Quantizer .class );
202- DEFAULT_MODULATORS .add (heronarts .lx .modulator .Randomizer .class );
203- DEFAULT_MODULATORS .add (heronarts .lx .modulator .Scaler .class );
204- DEFAULT_MODULATORS .add (heronarts .lx .modulator .Smoother .class );
205- DEFAULT_MODULATORS .add (heronarts .lx .modulator .Spring .class );
206- DEFAULT_MODULATORS .add (heronarts .lx .modulator .Stepper .class );
207- DEFAULT_MODULATORS .add (heronarts .lx .modulator .StepSequencer .class );
208- DEFAULT_MODULATORS .add (heronarts .lx .modulator .Timer .class );
209- DEFAULT_MODULATORS .add (heronarts .lx .modulator .VariableLFO .class );
174+ private static final Class <?>[] DEFAULT_MODULATORS = {
175+ heronarts .lx .audio .BandFilter .class ,
176+ heronarts .lx .audio .BandGate .class ,
177+ heronarts .lx .audio .SoundObject .class ,
178+ heronarts .lx .dmx .DmxModulator .class ,
179+ heronarts .lx .dmx .DmxColorModulator .class ,
180+ heronarts .lx .modulator .BooleanLogic .class ,
181+ heronarts .lx .modulator .ComparatorModulator .class ,
182+ heronarts .lx .modulator .CycleModulator .class ,
183+ heronarts .lx .modulator .Damper .class ,
184+ heronarts .lx .modulator .Interval .class ,
185+ heronarts .lx .modulator .MacroKnobs .class ,
186+ heronarts .lx .modulator .MacroSwitches .class ,
187+ heronarts .lx .modulator .MacroTriggers .class ,
188+ heronarts .lx .modulator .MidiNoteTrigger .class ,
189+ heronarts .lx .modulator .MultiStageEnvelope .class ,
190+ heronarts .lx .modulator .MultiModeEnvelope .class ,
191+ heronarts .lx .modulator .MultiTrig .class ,
192+ heronarts .lx .modulator .NoiseModulator .class ,
193+ heronarts .lx .modulator .OperatorModulator .class ,
194+ heronarts .lx .modulator .Quantizer .class ,
195+ heronarts .lx .modulator .Randomizer .class ,
196+ heronarts .lx .modulator .Scaler .class ,
197+ heronarts .lx .modulator .Smoother .class ,
198+ heronarts .lx .modulator .Spring .class ,
199+ heronarts .lx .modulator .Stepper .class ,
200+ heronarts .lx .modulator .StepSequencer .class ,
201+ heronarts .lx .modulator .Timer .class ,
202+ heronarts .lx .modulator .VariableLFO .class ,
203+ };
204+
205+ private static final Class <?>[] DEFAULT_FIXTURES = {
206+ heronarts .lx .structure .ArcFixture .class ,
207+ heronarts .lx .structure .GridFixture .class ,
208+ heronarts .lx .structure .PointFixture .class ,
209+ heronarts .lx .structure .SpiralFixture .class ,
210+ heronarts .lx .structure .StripFixture .class ,
210211 };
211212
212213 private static final List <Class <? extends LXBlend >> DEFAULT_CHANNEL_BLENDS ;
@@ -223,7 +224,6 @@ public LXRegistry removeListener(Listener listener) {
223224 DEFAULT_CHANNEL_BLENDS .add (SpotlightBlend .class );
224225 DEFAULT_CHANNEL_BLENDS .add (LightestBlend .class );
225226 DEFAULT_CHANNEL_BLENDS .add (DarkestBlend .class );
226-
227227 }
228228
229229 private static final List <Class <? extends LXBlend >> DEFAULT_TRANSITION_BLENDS ;
@@ -248,51 +248,39 @@ public LXRegistry removeListener(Listener listener) {
248248 DEFAULT_CROSSFADER_BLENDS .add (DifferenceBlend .class );
249249 }
250250
251- private static final List <Class <? extends LXFixture >> DEFAULT_FIXTURES ;
252- static {
253- DEFAULT_FIXTURES = new ArrayList <Class <? extends LXFixture >>();
254- DEFAULT_FIXTURES .add (heronarts .lx .structure .ArcFixture .class );
255- DEFAULT_FIXTURES .add (heronarts .lx .structure .GridFixture .class );
256- DEFAULT_FIXTURES .add (heronarts .lx .structure .PointFixture .class );
257- DEFAULT_FIXTURES .add (heronarts .lx .structure .SpiralFixture .class );
258- DEFAULT_FIXTURES .add (heronarts .lx .structure .StripFixture .class );
259- };
260-
261251 /**
262252 * The list of globally registered pattern classes
263253 */
264- private final List <Class <? extends LXPattern >> mutablePatterns =
265- new ArrayList <Class <? extends LXPattern >>(DEFAULT_PATTERNS );
254+ private final List <Class <? extends LXPattern >> mutablePatterns = new ArrayList <>(DEFAULT_PATTERNS .length );
266255
267256 public final List <Class <? extends LXPattern >> patterns =
268257 Collections .unmodifiableList (this .mutablePatterns );
269258
270- private final List <Class <? extends LXEffect >> mutableEffects =
271- new ArrayList <Class <? extends LXEffect >>(DEFAULT_EFFECTS );
259+ private final List <Class <? extends LXEffect >> mutableEffects = new ArrayList <>(DEFAULT_EFFECTS .length );
272260
273261 /**
274262 * The list of globally registered effects
275263 */
276264 public final List <Class <? extends LXEffect >> effects =
277265 Collections .unmodifiableList (this .mutableEffects );
278266
279- private final List <Class <? extends LXModulator >> mutableModulators =
280- new ArrayList <Class <? extends LXModulator >>(DEFAULT_MODULATORS );
267+ private final List <Class <? extends LXModulator >> mutableModulators = new ArrayList <>(DEFAULT_MODULATORS .length );
281268
282269 /**
283270 * The list of globally registered effects
284271 */
285272 public final List <Class <? extends LXModulator >> modulators =
286273 Collections .unmodifiableList (this .mutableModulators );
287274
288- private final Map <Class <? extends LXComponent >, List <String >> mutableTags =
289- new HashMap <>();
275+ private final List <Class <? extends LXFixture >> mutableFixtures = new ArrayList <>(DEFAULT_FIXTURES .length );
290276
291277 /**
292- * Globally registered tags
278+ * List of globally registered fixtures.
293279 */
294- private final Map <Class <? extends LXComponent >, List <String >> tags =
295- new HashMap <>();
280+ public final List <Class <? extends LXFixture >> fixtures =
281+ Collections .unmodifiableList (this .mutableFixtures );
282+
283+ private final Map <Class <? extends LXComponent >, List <String >> mutableTags = new HashMap <>();
296284
297285 private final List <Class <? extends LXBlend >> mutableChannelBlends =
298286 new ArrayList <Class <? extends LXBlend >>(DEFAULT_CHANNEL_BLENDS );
@@ -321,15 +309,6 @@ public LXRegistry removeListener(Listener listener) {
321309 public final List <Class <? extends LXBlend >> crossfaderBlends =
322310 Collections .unmodifiableList (this .mutableCrossfaderBlends );
323311
324- private final List <Class <? extends LXFixture >> mutableFixtures =
325- new ArrayList <Class <? extends LXFixture >>(DEFAULT_FIXTURES );
326-
327- /**
328- * List of globally registered fixtures.
329- */
330- public final List <Class <? extends LXFixture >> fixtures =
331- Collections .unmodifiableList (this .mutableFixtures );
332-
333312 /**
334313 * JSON fixture type
335314 */
@@ -557,18 +536,20 @@ public LXRegistry(LX lx) {
557536 this .lx = lx ;
558537 this .classLoader = new LXClassLoader (lx );
559538
560- for (Class <? extends LXPattern > pattern : DEFAULT_PATTERNS ) {
561- addDefaultTags (pattern );
539+ this .contentReloading = true ;
540+ for (Class <?> pattern : DEFAULT_PATTERNS ) {
541+ addPattern (pattern .asSubclass (LXPattern .class ));
562542 }
563- for (Class <? extends LXEffect > effect : DEFAULT_EFFECTS ) {
564- addDefaultTags (effect );
543+ for (Class <?> effect : DEFAULT_EFFECTS ) {
544+ addEffect (effect . asSubclass ( LXEffect . class ) );
565545 }
566- for (Class <? extends LXModulator > modulator : DEFAULT_MODULATORS ) {
567- addDefaultTags (modulator );
546+ for (Class <?> modulator : DEFAULT_MODULATORS ) {
547+ addModulator (modulator . asSubclass ( LXModulator . class ) );
568548 }
569- for (Class <? extends LXFixture > fixture : DEFAULT_FIXTURES ) {
570- addDefaultTags (fixture );
549+ for (Class <?> fixture : DEFAULT_FIXTURES ) {
550+ addFixture (fixture . asSubclass ( LXFixture . class ) );
571551 }
552+ this .contentReloading = false ;
572553 }
573554
574555 public LXClassLoader getClassLoader () {
@@ -1207,9 +1188,7 @@ public LXRegistry addTag(Class<? extends LXComponent> component, String tag) {
12071188 List <String > tags = this .mutableTags .get (component );
12081189 if (tags == null ) {
12091190 tags = new ArrayList <String >();
1210- List <String > unmodifiableTags = Collections .unmodifiableList (tags );
12111191 this .mutableTags .put (component , tags );
1212- this .tags .put (component , unmodifiableTags );
12131192 }
12141193 if (tags .contains (tag )) {
12151194 LX .error ("Cannot add duplicate tag \" " + tag + "\" to class " + component .getName ());
@@ -1235,7 +1214,6 @@ public LXRegistry removeTag(Class<? extends LXComponent> component, String tag)
12351214 tags .remove (tag );
12361215 if (tags .isEmpty ()) {
12371216 this .mutableTags .remove (component );
1238- this .tags .remove (component );
12391217 }
12401218 return this ;
12411219 }
@@ -1247,7 +1225,8 @@ public LXRegistry removeTag(Class<? extends LXComponent> component, String tag)
12471225 * @return An unmodifiable list of tags, or null if no tags exist
12481226 */
12491227 public List <String > getTags (Class <? extends LXComponent > component ) {
1250- return this .tags .get (component );
1228+ final List <String > tags = this .mutableTags .get (component );
1229+ return (tags == null ) ? null : Collections .unmodifiableList (tags );
12511230 }
12521231
12531232 /**
0 commit comments