public T getOrAdd()

in remote/src/main/java/com/spotify/metrics/remote/SemanticAggregatorMetricRegistry.java [63:93]


    public <T extends RemoteMetric> T getOrAdd(
        final MetricId name,
        final List<String> shardKey,
        final SemanticAggregatorMetricBuilder<T> builder
    ) {
        final RemoteMetric metric = metrics.get(name);

        if (metric != null) {
            if (!builder.isInstance(metric)) {
                throw new IllegalArgumentException(
                    name + " is already used for a different type of metric");
            }

            return (T) metric;
        }

        final T addition = builder.newMetric(name, shardKey, remote);

        final RemoteMetric previous = metrics.putIfAbsent(name, addition);

        if (previous == null) {
            return addition;
        }

        if (!builder.isInstance(previous)) {
            throw new IllegalArgumentException(
                name + " is already used for a different type of metric");
        }

        return (T) previous;
    }