Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import java.util.stream.Collectors;

import edu.umd.cs.findbugs.annotations.NonNull;
import nl.talsmasoftware.lazy4j.Lazy;

/**
* The base class for {@link IArrayItem} implementations, that provides an
Expand All @@ -35,12 +36,19 @@ public abstract class AbstractArrayItem<ITEM extends ICollectionValue>
implements IArrayItem<ITEM>, IFeatureCollectionFunctionItem {
@NonNull
private static final IEnhancedQName QNAME = IEnhancedQName.of("array");
/**
* The function arguments, lazily initialized to prevent class initialization
* deadlock when multiple threads trigger class loading simultaneously.
*/
@NonNull
private static final List<IArgument> ARGUMENTS = ObjectUtils.notNull(List.of(
IArgument.builder().name("position").type(IIntegerItem.type()).one().build()));

private static final Lazy<List<IArgument>> ARGUMENTS = ObjectUtils.notNull(Lazy.of(() -> ObjectUtils.notNull(List.of(
IArgument.builder().name("position").type(IIntegerItem.type()).one().build()))));
/**
* An empty array item singleton, lazily initialized to prevent class
* initialization deadlock.
*/
@NonNull
private static final IArrayItem<?> EMPTY = new ArrayItemN<>();
private static final Lazy<IArrayItem<?>> EMPTY = ObjectUtils.notNull(Lazy.of(ArrayItemN::new));

/**
* Get an immutable array item that is empty.
Expand All @@ -52,7 +60,7 @@ public abstract class AbstractArrayItem<ITEM extends ICollectionValue>
@SuppressWarnings("unchecked")
@NonNull
public static <T extends ICollectionValue> IArrayItem<T> empty() {
return (IArrayItem<T>) EMPTY;
return (IArrayItem<T>) EMPTY.get();
}

@Override
Expand All @@ -62,7 +70,7 @@ public IEnhancedQName getQName() {

@Override
public List<IArgument> getArguments() {
return ARGUMENTS;
return ARGUMENTS.get();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import java.util.stream.Collectors;

import edu.umd.cs.findbugs.annotations.NonNull;
import nl.talsmasoftware.lazy4j.Lazy;

/**
* The base class for {@link IMapItem} implementations, that provide an
Expand All @@ -43,13 +44,18 @@ public abstract class AbstractMapItem<VALUE extends ICollectionValue>
@NonNull
private static final IEnhancedQName QNAME = IEnhancedQName.of("map");
/**
* The function arguments.
* The function arguments, lazily initialized to prevent class initialization
* deadlock when multiple threads trigger class loading simultaneously.
*/
@NonNull
private static final List<IArgument> ARGUMENTS = ObjectUtils.notNull(List.of(
IArgument.builder().name("key").type(IAnyAtomicItem.type()).one().build()));
private static final Lazy<List<IArgument>> ARGUMENTS = ObjectUtils.notNull(Lazy.of(() -> ObjectUtils.notNull(List.of(
IArgument.builder().name("key").type(IAnyAtomicItem.type()).one().build()))));
/**
* An empty map item singleton, lazily initialized to prevent class
* initialization deadlock.
*/
@NonNull
private static final IMapItem<?> EMPTY = new MapItemN<>();
private static final Lazy<IMapItem<?>> EMPTY = ObjectUtils.notNull(Lazy.of(MapItemN::new));

/**
* Get an immutable map item that is empty.
Expand All @@ -62,7 +68,7 @@ public abstract class AbstractMapItem<VALUE extends ICollectionValue>
@SuppressWarnings("unchecked")
@NonNull
public static <V extends ICollectionValue> IMapItem<V> empty() {
return (IMapItem<V>) EMPTY;
return (IMapItem<V>) EMPTY.get();
}

@Override
Expand All @@ -72,7 +78,7 @@ public IEnhancedQName getQName() {

@Override
public List<IArgument> getArguments() {
return ARGUMENTS;
return ARGUMENTS.get();
}

@Override
Expand Down
Loading