summaryrefslogtreecommitdiffstats
path: root/src/main/java/org
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org')
-rw-r--r--src/main/java/org/bukkit/metadata/FixedMetadataValue.java25
-rw-r--r--src/main/java/org/bukkit/metadata/LazyMetadataValue.java9
2 files changed, 26 insertions, 8 deletions
diff --git a/src/main/java/org/bukkit/metadata/FixedMetadataValue.java b/src/main/java/org/bukkit/metadata/FixedMetadataValue.java
index 41f89a0e..be1c5aa0 100644
--- a/src/main/java/org/bukkit/metadata/FixedMetadataValue.java
+++ b/src/main/java/org/bukkit/metadata/FixedMetadataValue.java
@@ -6,9 +6,15 @@ import java.util.concurrent.Callable;
/**
* A FixedMetadataValue is a special case metadata item that contains the same value forever after initialization.
- * Invalidating a FixedMetadataValue has no affect.
+ * Invalidating a FixedMetadataValue has no effect.
+ *
+ * This class extends LazyMetadataValue for historical reasons, even though it overrides all the implementation
+ * methods. it is possible that in the future that the inheritance hierarchy may change.
*/
public class FixedMetadataValue extends LazyMetadataValue {
+ /** Store the internal value that is represented by this fixed value. */
+ private final Object internalValue;
+
/**
* Initializes a FixedMetadataValue with an Object
*
@@ -16,10 +22,17 @@ public class FixedMetadataValue extends LazyMetadataValue {
* @param value the value assigned to this metadata value.
*/
public FixedMetadataValue(Plugin owningPlugin, final Object value) {
- super(owningPlugin, CacheStrategy.CACHE_ETERNALLY, new Callable<Object>() {
- public Object call() throws Exception {
- return value;
- }
- });
+ super(owningPlugin);
+ this.internalValue = value;
+ }
+
+ @Override
+ public void invalidate() {
+
+ }
+
+ @Override
+ public Object value() {
+ return internalValue;
}
}
diff --git a/src/main/java/org/bukkit/metadata/LazyMetadataValue.java b/src/main/java/org/bukkit/metadata/LazyMetadataValue.java
index 57fdc502..d67e633c 100644
--- a/src/main/java/org/bukkit/metadata/LazyMetadataValue.java
+++ b/src/main/java/org/bukkit/metadata/LazyMetadataValue.java
@@ -16,7 +16,7 @@ import org.bukkit.plugin.Plugin;
public class LazyMetadataValue extends MetadataValueAdapter implements MetadataValue {
private Callable<Object> lazyValue;
private CacheStrategy cacheStrategy;
- private SoftReference<Object> internalValue = new SoftReference<Object>(null);
+ private SoftReference<Object> internalValue;
private static final Object ACTUALLY_NULL = new Object();
/**
@@ -40,11 +40,16 @@ public class LazyMetadataValue extends MetadataValueAdapter implements MetadataV
super(owningPlugin);
Validate.notNull(cacheStrategy, "cacheStrategy cannot be null");
Validate.notNull(lazyValue, "lazyValue cannot be null");
-
+ this.internalValue = new SoftReference<Object>(null);
this.lazyValue = lazyValue;
this.cacheStrategy = cacheStrategy;
}
+ /** Protected special constructor used by FixedMetadataValue to bypass standard setup. */
+ protected LazyMetadataValue(Plugin owningPlugin) {
+ super(owningPlugin);
+ }
+
public Object value() {
eval();
Object value = internalValue.get();