Skip to content

Commit 0f90474

Browse files
committed
add mutable data holder set for nullable and not nullable keys
1 parent aad6251 commit 0f90474

File tree

9 files changed

+55
-20
lines changed

9 files changed

+55
-20
lines changed

VERSION.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,11 @@ Next
180180
* Fix: deprecate `DataKey.getFrom()`
181181
* Fix: replace all `DataHolder.get()` by `DataKey.get()`
182182
* Fix: add nullability annotations to `Node` and a few other classes
183+
* Add: `MutableDataHolder.set(@NotNull DataKey<T>, @NotNull T)` and
184+
`MutableDataHolder.set(@NotNull NullableDataKey<T>, @Nullable T)` to respect nullability of
185+
key's data value.
186+
* Add: `DataKey.set(@NotNull MutableDataHolder, @NotNull T)` and `NullableDataKey.set(@NotNull
187+
MutableDataHolder, @Nullable T)` to allow setting data values via keys, if needed.
183188

184189
0.59.30
185190
-------

flexmark-util/src/main/java/com/vladsch/flexmark/util/ast/Document.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,10 @@ public MutableDataHolder clear() {
3131
}
3232

3333
@Override
34-
public <T> MutableDataSet set(DataKeyBase<T> key, T value) {return dataSet.set(key, value);}
34+
public <T> MutableDataHolder set(DataKey<T> key, @NotNull T value) {return dataSet.set(key, value);}
35+
36+
@Override
37+
public <T> MutableDataHolder set(NullableDataKey<T> key, @Nullable T value) {return dataSet.set(key, value);}
3538

3639
@Override
3740
public MutableDataSet setFrom(MutableDataSetter dataSetter) {return dataSet.setFrom(dataSetter);}

flexmark-util/src/main/java/com/vladsch/flexmark/util/builder/BuilderBase.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.vladsch.flexmark.util.SharedDataKeys;
44
import com.vladsch.flexmark.util.data.*;
55
import org.jetbrains.annotations.NotNull;
6+
import org.jetbrains.annotations.Nullable;
67

78
import java.util.*;
89

@@ -105,7 +106,13 @@ protected void addExtensionApiPoint(Object apiPoint) {
105106
* @return builder
106107
*/
107108
@Override
108-
public <D> MutableDataSet set(DataKeyBase<D> key, D value) {
109+
public <V> MutableDataSet set(DataKey<V> key, @NotNull V value) {
110+
addExtensionApiPoint(key);
111+
return super.set(key, value);
112+
}
113+
114+
@Override
115+
public <V> MutableDataSet set(NullableDataKey<V> key, @Nullable V value) {
109116
addExtensionApiPoint(key);
110117
return super.set(key, value);
111118
}

flexmark-util/src/main/java/com/vladsch/flexmark/util/data/DataKey.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ public DataKey(@NotNull String name, @NotNull T defaultValue, @NotNull DataNotNu
2222
* <p>
2323
* Use this constructor to ensure that factory is never called with null data holder value
2424
*
25-
* @param name See {@link #getName()}.
26-
* @param supplier data value factory for creating a new default value for the key not dependent on dataHolder
25+
* @param name See {@link #getName()}.
26+
* @param supplier data value factory for creating a new default value for the key not dependent on dataHolder
2727
*/
2828
public DataKey(@NotNull String name, @NotNull NotNullValueSupplier<T> supplier) {
2929
super(name, supplier.get(), (holder) -> supplier.get());
@@ -66,9 +66,9 @@ public T get(@Nullable DataHolder holder) {
6666
return super.get(holder);
6767
}
6868

69-
@NotNull
70-
public MutableDataHolder set(@NotNull MutableDataHolder holder, @NotNull T value) {
71-
return super.set(holder, value);
69+
@Override
70+
public @NotNull MutableDataHolder set(@NotNull MutableDataHolder dataHolder, @NotNull T value) {
71+
return dataHolder.set(this, value);
7272
}
7373

7474
@Override

flexmark-util/src/main/java/com/vladsch/flexmark/util/data/DataKeyBase.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import org.jetbrains.annotations.NotNull;
44
import org.jetbrains.annotations.Nullable;
55

6-
public abstract class DataKeyBase<T> {
6+
public abstract class DataKeyBase<T> implements MutableDataValueSetter<T> {
77
private final @NotNull String name;
88
private final @NotNull DataValueFactory<T> factory;
99
private final T defaultValue;
@@ -73,12 +73,6 @@ final public T getFrom(@Nullable DataHolder holder) {
7373
return get(holder);
7474
}
7575

76-
@NotNull
77-
public MutableDataHolder set(@NotNull MutableDataHolder holder, T value) {
78-
holder.set(this, value);
79-
return holder;
80-
}
81-
8276
@Override
8377
public String toString() {
8478
if (defaultValue != null) {

flexmark-util/src/main/java/com/vladsch/flexmark/util/data/MutableDataHolder.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.vladsch.flexmark.util.data;
22

33
import org.jetbrains.annotations.NotNull;
4+
import org.jetbrains.annotations.Nullable;
45

56
public interface MutableDataHolder extends DataHolder, MutableDataSetter {
67
/**
@@ -27,7 +28,17 @@ default <T> T get(@NotNull DataKey<T> key) {
2728
* @param value value to store
2829
* @return mutable data holder for chained calls
2930
*/
30-
<T> MutableDataHolder set(DataKeyBase<T> key, T value);
31+
<T> MutableDataHolder set(DataKey<T> key, @NotNull T value);
32+
33+
/**
34+
* Store the given value for the key
35+
*
36+
* @param <T> data type of the data referred by the key
37+
* @param key data key
38+
* @param value value to store
39+
* @return mutable data holder for chained calls
40+
*/
41+
<T> MutableDataHolder set(NullableDataKey<T> key, @Nullable T value);
3142

3243
/**
3344
* Remove the stored value for the key, used to force to default or to force recompute

flexmark-util/src/main/java/com/vladsch/flexmark/util/data/MutableDataSet.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,16 @@ public MutableDataSet(DataHolder other) {
1313
}
1414

1515
@Override
16-
public <T> MutableDataSet set(DataKeyBase<T> key, T value) {
16+
public <T> MutableDataSet set(DataKey<T> key, @NotNull T value) {
17+
return set((DataKeyBase<T>) key, value);
18+
}
19+
20+
@Override
21+
public <T> MutableDataSet set(NullableDataKey<T> key, @Nullable T value) {
22+
return set((DataKeyBase<T>) key, value);
23+
}
24+
25+
private <T> MutableDataSet set(DataKeyBase<T> key, T value) {
1726
dataSet.put(key, value);
1827
return this;
1928
}
@@ -26,7 +35,6 @@ public MutableDataSet setFrom(MutableDataSetter dataSetter) {
2635

2736
@Override
2837
public MutableDataSet setAll(DataHolder other) {
29-
DataSet original = new DataSet(this); //keep a copy in case we have aggregateAction keys which other also has
3038
dataSet.putAll(other.getAll());
3139
return this;
3240
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.vladsch.flexmark.util.data;
2+
3+
import org.jetbrains.annotations.NotNull;
4+
5+
public interface MutableDataValueSetter<T> {
6+
@NotNull MutableDataHolder set(@NotNull MutableDataHolder dataHolder, T value);
7+
}

flexmark-util/src/main/java/com/vladsch/flexmark/util/data/NullableDataKey.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,9 @@ public T get(@Nullable DataHolder holder) {
8383
return super.get(holder);
8484
}
8585

86-
@NotNull
87-
public MutableDataHolder set(@NotNull MutableDataHolder holder, @Nullable T value) {
88-
return super.set(holder, value);
86+
@Override
87+
public @NotNull MutableDataHolder set(@NotNull MutableDataHolder dataHolder, @Nullable T value) {
88+
return dataHolder.set(this, value);
8989
}
9090

9191
@Override

0 commit comments

Comments
 (0)