Skip to content

Commit 029d4c8

Browse files
committed
Clean up default content initialization to use common code path
1 parent f5d341c commit 029d4c8

File tree

1 file changed

+84
-105
lines changed

1 file changed

+84
-105
lines changed

src/main/java/heronarts/lx/LXRegistry.java

Lines changed: 84 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@
7171
import heronarts.lx.pattern.LXPattern;
7272
import heronarts.lx.pattern.PatternRack;
7373
import 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

Comments
 (0)