From 80eac565c6dcdacbc7c9daebd86e44c9c6938e9e Mon Sep 17 00:00:00 2001 From: Havoc Pennington Date: Thu, 5 Apr 2012 15:24:24 -0400 Subject: [PATCH] remove ignoresFallbacks param from AbstractConfigValue.newCopy Only one subclass ever used this, SimpleConfigObject So now we have withFallbacksIgnored that asserts they are already ignored, for the other classes, and has a special SimpleConfigObject implementation. --- .../config/impl/AbstractConfigObject.java | 7 +++--- .../config/impl/AbstractConfigValue.java | 14 +++++++++--- .../typesafe/config/impl/ConfigBoolean.java | 2 +- .../config/impl/ConfigConcatenation.java | 2 +- .../config/impl/ConfigDelayedMerge.java | 2 +- .../config/impl/ConfigDelayedMergeObject.java | 3 +-- .../typesafe/config/impl/ConfigDouble.java | 2 +- .../com/typesafe/config/impl/ConfigInt.java | 2 +- .../com/typesafe/config/impl/ConfigLong.java | 2 +- .../com/typesafe/config/impl/ConfigNull.java | 2 +- .../typesafe/config/impl/ConfigReference.java | 4 +--- .../typesafe/config/impl/ConfigString.java | 2 +- .../config/impl/ConfigSubstitution.java | 4 ++-- .../config/impl/SimpleConfigList.java | 2 +- .../config/impl/SimpleConfigObject.java | 22 ++++++++++++++----- 15 files changed, 44 insertions(+), 28 deletions(-) diff --git a/config/src/main/java/com/typesafe/config/impl/AbstractConfigObject.java b/config/src/main/java/com/typesafe/config/impl/AbstractConfigObject.java index b2dcd4ce..8f4f94ec 100644 --- a/config/src/main/java/com/typesafe/config/impl/AbstractConfigObject.java +++ b/config/src/main/java/com/typesafe/config/impl/AbstractConfigObject.java @@ -147,12 +147,11 @@ abstract class AbstractConfigObject extends AbstractConfigValue implements Confi return ConfigValueType.OBJECT; } - protected abstract AbstractConfigObject newCopy(ResolveStatus status, boolean ignoresFallbacks, - ConfigOrigin origin); + protected abstract AbstractConfigObject newCopy(ResolveStatus status, ConfigOrigin origin); @Override - protected AbstractConfigObject newCopy(boolean ignoresFallbacks, ConfigOrigin origin) { - return newCopy(resolveStatus(), ignoresFallbacks, origin); + protected AbstractConfigObject newCopy(ConfigOrigin origin) { + return newCopy(resolveStatus(), origin); } @Override diff --git a/config/src/main/java/com/typesafe/config/impl/AbstractConfigValue.java b/config/src/main/java/com/typesafe/config/impl/AbstractConfigValue.java index 629a60ea..88e570ce 100644 --- a/config/src/main/java/com/typesafe/config/impl/AbstractConfigValue.java +++ b/config/src/main/java/com/typesafe/config/impl/AbstractConfigValue.java @@ -122,7 +122,7 @@ abstract class AbstractConfigValue implements ConfigValue, MergeableValue, Seria return this; } - protected abstract AbstractConfigValue newCopy(boolean ignoresFallbacks, ConfigOrigin origin); + protected abstract AbstractConfigValue newCopy(ConfigOrigin origin); // this is virtualized rather than a field because only some subclasses // really need to store the boolean, and they may be able to pack it @@ -133,6 +133,14 @@ abstract class AbstractConfigValue implements ConfigValue, MergeableValue, Seria return resolveStatus() == ResolveStatus.RESOLVED; } + protected AbstractConfigValue withFallbacksIgnored() { + if (ignoresFallbacks()) + return this; + else + throw new ConfigException.BugOrBroken( + "value class doesn't implement forced fallback-ignoring " + this); + } + // the withFallback() implementation is supposed to avoid calling // mergedWith* if we're ignoring fallbacks. protected final void requireNotIgnoringFallbacks() { @@ -189,7 +197,7 @@ abstract class AbstractConfigValue implements ConfigValue, MergeableValue, Seria // falling back to a non-object doesn't merge anything, and also // prohibits merging any objects that we fall back to later. // so we have to switch to ignoresFallbacks mode. - return newCopy(true /* ignoresFallbacks */, origin); + return withFallbacksIgnored(); } else { // if unresolved, we may have to look back to fallbacks as part of // the resolution process, so always delay @@ -219,7 +227,7 @@ abstract class AbstractConfigValue implements ConfigValue, MergeableValue, Seria if (this.origin == origin) return this; else - return newCopy(ignoresFallbacks(), origin); + return newCopy(origin); } // this is only overridden to change the return type diff --git a/config/src/main/java/com/typesafe/config/impl/ConfigBoolean.java b/config/src/main/java/com/typesafe/config/impl/ConfigBoolean.java index 5a5c0f8f..998eda96 100644 --- a/config/src/main/java/com/typesafe/config/impl/ConfigBoolean.java +++ b/config/src/main/java/com/typesafe/config/impl/ConfigBoolean.java @@ -33,7 +33,7 @@ final class ConfigBoolean extends AbstractConfigValue { } @Override - protected ConfigBoolean newCopy(boolean ignoresFallbacks, ConfigOrigin origin) { + protected ConfigBoolean newCopy(ConfigOrigin origin) { return new ConfigBoolean(origin, value); } } diff --git a/config/src/main/java/com/typesafe/config/impl/ConfigConcatenation.java b/config/src/main/java/com/typesafe/config/impl/ConfigConcatenation.java index 806e57b8..0eda954a 100644 --- a/config/src/main/java/com/typesafe/config/impl/ConfigConcatenation.java +++ b/config/src/main/java/com/typesafe/config/impl/ConfigConcatenation.java @@ -48,7 +48,7 @@ final class ConfigConcatenation extends AbstractConfigValue implements Unmergeab } @Override - protected ConfigConcatenation newCopy(boolean ignoresFallbacks, ConfigOrigin newOrigin) { + protected ConfigConcatenation newCopy(ConfigOrigin newOrigin) { return new ConfigConcatenation(newOrigin, pieces); } diff --git a/config/src/main/java/com/typesafe/config/impl/ConfigDelayedMerge.java b/config/src/main/java/com/typesafe/config/impl/ConfigDelayedMerge.java index 3813a593..634084cf 100644 --- a/config/src/main/java/com/typesafe/config/impl/ConfigDelayedMerge.java +++ b/config/src/main/java/com/typesafe/config/impl/ConfigDelayedMerge.java @@ -176,7 +176,7 @@ final class ConfigDelayedMerge extends AbstractConfigValue implements Unmergeabl } @Override - protected AbstractConfigValue newCopy(boolean newIgnoresFallbacks, ConfigOrigin newOrigin) { + protected AbstractConfigValue newCopy(ConfigOrigin newOrigin) { return new ConfigDelayedMerge(newOrigin, stack); } diff --git a/config/src/main/java/com/typesafe/config/impl/ConfigDelayedMergeObject.java b/config/src/main/java/com/typesafe/config/impl/ConfigDelayedMergeObject.java index 8021f019..9f82f705 100644 --- a/config/src/main/java/com/typesafe/config/impl/ConfigDelayedMergeObject.java +++ b/config/src/main/java/com/typesafe/config/impl/ConfigDelayedMergeObject.java @@ -50,8 +50,7 @@ final class ConfigDelayedMergeObject extends AbstractConfigObject implements Unm } @Override - protected ConfigDelayedMergeObject newCopy(ResolveStatus status, boolean ignoresFallbacks, - ConfigOrigin origin) { + protected ConfigDelayedMergeObject newCopy(ResolveStatus status, ConfigOrigin origin) { if (status != resolveStatus()) throw new ConfigException.BugOrBroken( "attempt to create resolved ConfigDelayedMergeObject"); diff --git a/config/src/main/java/com/typesafe/config/impl/ConfigDouble.java b/config/src/main/java/com/typesafe/config/impl/ConfigDouble.java index 8b99db96..8e355f5f 100644 --- a/config/src/main/java/com/typesafe/config/impl/ConfigDouble.java +++ b/config/src/main/java/com/typesafe/config/impl/ConfigDouble.java @@ -47,7 +47,7 @@ final class ConfigDouble extends ConfigNumber { } @Override - protected ConfigDouble newCopy(boolean ignoresFallbacks, ConfigOrigin origin) { + protected ConfigDouble newCopy(ConfigOrigin origin) { return new ConfigDouble(origin, value, originalText); } } diff --git a/config/src/main/java/com/typesafe/config/impl/ConfigInt.java b/config/src/main/java/com/typesafe/config/impl/ConfigInt.java index 8ccb3f87..707534f6 100644 --- a/config/src/main/java/com/typesafe/config/impl/ConfigInt.java +++ b/config/src/main/java/com/typesafe/config/impl/ConfigInt.java @@ -47,7 +47,7 @@ final class ConfigInt extends ConfigNumber { } @Override - protected ConfigInt newCopy(boolean ignoresFallbacks, ConfigOrigin origin) { + protected ConfigInt newCopy(ConfigOrigin origin) { return new ConfigInt(origin, value, originalText); } } diff --git a/config/src/main/java/com/typesafe/config/impl/ConfigLong.java b/config/src/main/java/com/typesafe/config/impl/ConfigLong.java index 6e1a5073..ddda2dfe 100644 --- a/config/src/main/java/com/typesafe/config/impl/ConfigLong.java +++ b/config/src/main/java/com/typesafe/config/impl/ConfigLong.java @@ -47,7 +47,7 @@ final class ConfigLong extends ConfigNumber { } @Override - protected ConfigLong newCopy(boolean ignoresFallbacks, ConfigOrigin origin) { + protected ConfigLong newCopy(ConfigOrigin origin) { return new ConfigLong(origin, value, originalText); } } diff --git a/config/src/main/java/com/typesafe/config/impl/ConfigNull.java b/config/src/main/java/com/typesafe/config/impl/ConfigNull.java index 1dcd32b5..5a1fbe19 100644 --- a/config/src/main/java/com/typesafe/config/impl/ConfigNull.java +++ b/config/src/main/java/com/typesafe/config/impl/ConfigNull.java @@ -43,7 +43,7 @@ final class ConfigNull extends AbstractConfigValue { } @Override - protected ConfigNull newCopy(boolean ignoresFallbacks, ConfigOrigin origin) { + protected ConfigNull newCopy(ConfigOrigin origin) { return new ConfigNull(origin); } } diff --git a/config/src/main/java/com/typesafe/config/impl/ConfigReference.java b/config/src/main/java/com/typesafe/config/impl/ConfigReference.java index b57be5cd..e64abfbe 100644 --- a/config/src/main/java/com/typesafe/config/impl/ConfigReference.java +++ b/config/src/main/java/com/typesafe/config/impl/ConfigReference.java @@ -46,9 +46,7 @@ final class ConfigReference extends AbstractConfigValue implements Unmergeable { } @Override - protected ConfigReference newCopy(boolean ignoresFallbacks, ConfigOrigin newOrigin) { - if (ignoresFallbacks) - throw new ConfigException.BugOrBroken("Cannot ignore fallbacks for " + this); + protected ConfigReference newCopy(ConfigOrigin newOrigin) { return new ConfigReference(newOrigin, expr, prefixLength); } diff --git a/config/src/main/java/com/typesafe/config/impl/ConfigString.java b/config/src/main/java/com/typesafe/config/impl/ConfigString.java index 4bdce3b1..5d6d6623 100644 --- a/config/src/main/java/com/typesafe/config/impl/ConfigString.java +++ b/config/src/main/java/com/typesafe/config/impl/ConfigString.java @@ -38,7 +38,7 @@ final class ConfigString extends AbstractConfigValue { } @Override - protected ConfigString newCopy(boolean ignoresFallbacks, ConfigOrigin origin) { + protected ConfigString newCopy(ConfigOrigin origin) { return new ConfigString(origin, value); } } diff --git a/config/src/main/java/com/typesafe/config/impl/ConfigSubstitution.java b/config/src/main/java/com/typesafe/config/impl/ConfigSubstitution.java index e2a8b3b8..4716d5ec 100644 --- a/config/src/main/java/com/typesafe/config/impl/ConfigSubstitution.java +++ b/config/src/main/java/com/typesafe/config/impl/ConfigSubstitution.java @@ -82,8 +82,8 @@ final class ConfigSubstitution extends AbstractConfigValue implements } @Override - protected AbstractConfigValue newCopy(boolean ignoresFallbacks, ConfigOrigin newOrigin) { - return delegate().newCopy(ignoresFallbacks, newOrigin); + protected AbstractConfigValue newCopy(ConfigOrigin newOrigin) { + return delegate().newCopy(newOrigin); } @Override diff --git a/config/src/main/java/com/typesafe/config/impl/SimpleConfigList.java b/config/src/main/java/com/typesafe/config/impl/SimpleConfigList.java index 9fb4266d..8d255d0c 100644 --- a/config/src/main/java/com/typesafe/config/impl/SimpleConfigList.java +++ b/config/src/main/java/com/typesafe/config/impl/SimpleConfigList.java @@ -396,7 +396,7 @@ final class SimpleConfigList extends AbstractConfigValue implements ConfigList { } @Override - protected SimpleConfigList newCopy(boolean ignoresFallbacks, ConfigOrigin newOrigin) { + protected SimpleConfigList newCopy(ConfigOrigin newOrigin) { return new SimpleConfigList(newOrigin, value); } diff --git a/config/src/main/java/com/typesafe/config/impl/SimpleConfigObject.java b/config/src/main/java/com/typesafe/config/impl/SimpleConfigObject.java index ee7073a1..d61bbd74 100644 --- a/config/src/main/java/com/typesafe/config/impl/SimpleConfigObject.java +++ b/config/src/main/java/com/typesafe/config/impl/SimpleConfigObject.java @@ -132,12 +132,24 @@ final class SimpleConfigObject extends AbstractConfigObject { return value.get(key); } - @Override - protected SimpleConfigObject newCopy(ResolveStatus newStatus, boolean newIgnoresFallbacks, - ConfigOrigin newOrigin) { + private SimpleConfigObject newCopy(ResolveStatus newStatus, ConfigOrigin newOrigin, + boolean newIgnoresFallbacks) { return new SimpleConfigObject(newOrigin, value, newStatus, newIgnoresFallbacks); } + @Override + protected SimpleConfigObject newCopy(ResolveStatus newStatus, ConfigOrigin newOrigin) { + return newCopy(newStatus, newOrigin, ignoresFallbacks); + } + + @Override + protected SimpleConfigObject withFallbacksIgnored() { + if (ignoresFallbacks) + return this; + else + return newCopy(resolveStatus(), origin(), true /* ignoresFallbacks */); + } + @Override ResolveStatus resolveStatus() { return ResolveStatus.fromBoolean(resolved); @@ -201,7 +213,7 @@ final class SimpleConfigObject extends AbstractConfigObject { return new SimpleConfigObject(mergeOrigins(this, fallback), merged, newResolveStatus, newIgnoresFallbacks); else if (newResolveStatus != resolveStatus() || newIgnoresFallbacks != ignoresFallbacks()) - return newCopy(newResolveStatus, newIgnoresFallbacks, origin()); + return newCopy(newResolveStatus, origin(), newIgnoresFallbacks); else return this; } @@ -230,7 +242,7 @@ final class SimpleConfigObject extends AbstractConfigObject { } } if (changes == null) { - return newCopy(resolveStatus(), ignoresFallbacks(), origin()); + return this; } else { Map modified = new HashMap(); boolean sawUnresolved = false;