• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

jreleaser / jreleaser / #522

29 Jul 2025 09:15PM UTC coverage: 45.397% (-0.07%) from 45.469%
#522

push

github

aalmiray
feat(extensions): Refine JBang extension support

1 of 115 new or added lines in 9 files covered. (0.87%)

4 existing lines in 2 files now uncovered.

24047 of 52970 relevant lines covered (45.4%)

0.45 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/core/jreleaser-model-impl/src/main/java/org/jreleaser/model/internal/extensions/Extension.java
1
/*
2
 * SPDX-License-Identifier: Apache-2.0
3
 *
4
 * Copyright 2020-2025 The JReleaser authors.
5
 *
6
 * Licensed under the Apache License, Version 2.0 (the "License");
7
 * you may not use this file except in compliance with the License.
8
 * You may obtain a copy of the License at
9
 *
10
 *     https://www.apache.org/licenses/LICENSE-2.0
11
 *
12
 * Unless required by applicable law or agreed to in writing, software
13
 * distributed under the License is distributed on an "AS IS" BASIS,
14
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
 * See the License for the specific language governing permissions and
16
 * limitations under the License.
17
 */
18
package org.jreleaser.model.internal.extensions;
19

20
import com.fasterxml.jackson.annotation.JsonIgnore;
21
import org.jreleaser.model.internal.common.AbstractModelObject;
22
import org.jreleaser.model.internal.common.Domain;
23
import org.jreleaser.model.internal.common.EnabledAware;
24
import org.jreleaser.model.internal.tools.Jbang;
25

26
import java.util.ArrayList;
27
import java.util.Collections;
28
import java.util.LinkedHashMap;
29
import java.util.List;
30
import java.util.Map;
31

32
import static java.util.Collections.unmodifiableMap;
33
import static java.util.stream.Collectors.toList;
34

35
/**
36
 * @author Andres Almiray
37
 * @since 1.3.0
38
 */
39
public final class Extension extends AbstractModelObject<Extension> implements Domain, EnabledAware {
×
40
    private static final long serialVersionUID = -4404376822137828992L;
41

42
    private final List<Provider> providers = new ArrayList<>();
×
NEW
43
    private final Jbang jbang = new Jbang();
×
44
    private Boolean enabled;
45
    private String name;
46
    private String gav;
47
    private String directory;
48

UNCOV
49
    @JsonIgnore
×
50
    private final org.jreleaser.model.api.extensions.Extension immutable = new org.jreleaser.model.api.extensions.Extension() {
×
51
        private static final long serialVersionUID = -2686799718269690059L;
52

53
        private List<? extends org.jreleaser.model.api.extensions.Extension.Provider> providers;
54

55
        @Override
56
        public String getName() {
57
            return name;
×
58
        }
59

60
        @Override
61
        public String getGav() {
62
            return gav;
×
63
        }
64

65
        @Override
66
        public String getDirectory() {
67
            return directory;
×
68
        }
69

70
        @Override
71
        public org.jreleaser.model.api.tools.Jbang getJbang() {
NEW
72
            return jbang.asImmutable();
×
73
        }
74

75
        @Override
76
        public List<? extends org.jreleaser.model.api.extensions.Extension.Provider> getProviders() {
77
            if (null == providers) {
×
78
                providers = Extension.this.providers.stream()
×
79
                    .map(Extension.Provider::asImmutable)
×
80
                    .collect(toList());
×
81
            }
82
            return providers;
×
83
        }
84

85
        @Override
86
        public Map<String, Object> asMap(boolean full) {
87
            return unmodifiableMap(Extension.this.asMap(full));
×
88
        }
89

90
        @Override
91
        public boolean isEnabled() {
92
            return Extension.this.isEnabled();
×
93
        }
94
    };
95

96
    public org.jreleaser.model.api.extensions.Extension asImmutable() {
97
        return immutable;
×
98
    }
99

100
    @Override
101
    public void merge(Extension source) {
102
        this.enabled = merge(this.enabled, source.enabled);
×
103
        this.name = merge(this.name, source.name);
×
104
        this.gav = merge(this.gav, source.gav);
×
105
        this.directory = merge(this.directory, source.directory);
×
NEW
106
        setJbang(source.jbang);
×
107
        setProviders(merge(this.providers, source.providers));
×
108
    }
×
109

110
    @Override
111
    public boolean isEnabled() {
112
        return null != enabled && enabled;
×
113
    }
114

115
    @Override
116
    public void setEnabled(Boolean enabled) {
117
        this.enabled = enabled;
×
118
    }
×
119

120
    @Override
121
    public boolean isEnabledSet() {
122
        return null != enabled;
×
123
    }
124

125
    public String getName() {
126
        return name;
×
127
    }
128

129
    public void setName(String name) {
130
        this.name = name;
×
131
    }
×
132

133
    public String getGav() {
134
        return gav;
×
135
    }
136

137
    public void setGav(String gav) {
138
        this.gav = gav;
×
139
    }
×
140

141
    public Jbang getJbang() {
142
        return jbang;
×
143
    }
144

145
    public void setJbang(Jbang jbang) {
NEW
146
        this.jbang.merge(jbang);
×
UNCOV
147
    }
×
148

149
    public String getDirectory() {
150
        return directory;
×
151
    }
152

153
    public void setDirectory(String directory) {
154
        this.directory = directory;
×
155
    }
×
156

157
    public List<Provider> getProviders() {
158
        return providers;
×
159
    }
160

161
    public void setProviders(List<Provider> providers) {
162
        this.providers.clear();
×
163
        this.providers.addAll(providers);
×
164
    }
×
165

166
    public void addProvider(Provider provider) {
167
        if (null != provider) {
×
168
            this.providers.add(provider);
×
169
        }
170
    }
×
171

172
    @Override
173
    public Map<String, Object> asMap(boolean full) {
174
        if (!full && !isEnabled()) return Collections.emptyMap();
×
175

176
        Map<String, Object> props = new LinkedHashMap<>();
×
177
        props.put("enabled", isEnabled());
×
178
        props.put("gav", gav);
×
179
        props.put("directory", directory);
×
NEW
180
        props.put("jbang", jbang.asMap(full));
×
181
        Map<String, Map<String, Object>> m = new LinkedHashMap<>();
×
182
        for (int i = 0; i < providers.size(); i++) {
×
183
            m.put("provider " + i, providers.get(i).asMap(full));
×
184
        }
NEW
185
        props.put("providers", m);
×
186

187
        Map<String, Object> map = new LinkedHashMap<>();
×
188
        map.put(name, props);
×
189
        return map;
×
190
    }
191

192

193
    public static final class Provider extends AbstractModelObject<Provider> implements Domain {
×
194
        private static final long serialVersionUID = -6536770909683740039L;
195

196
        private final Map<String, Object> properties = new LinkedHashMap<>();
×
197
        private String type;
198

199
        @JsonIgnore
×
200
        private final org.jreleaser.model.api.extensions.Extension.Provider immutable = new org.jreleaser.model.api.extensions.Extension.Provider() {
×
201
            private static final long serialVersionUID = 6167354406466230040L;
202

203
            @Override
204
            public String getType() {
205
                return type;
×
206
            }
207

208
            @Override
209
            public Map<String, Object> getProperties() {
210
                return unmodifiableMap(properties);
×
211
            }
212

213
            @Override
214
            public Map<String, Object> asMap(boolean full) {
215
                return unmodifiableMap(Provider.this.asMap(full));
×
216
            }
217
        };
218

219
        public org.jreleaser.model.api.extensions.Extension.Provider asImmutable() {
220
            return immutable;
×
221
        }
222

223
        @Override
224
        public void merge(Provider source) {
225
            this.type = merge(this.type, source.type);
×
226
            setProperties(merge(this.properties, source.properties));
×
227
        }
×
228

229
        public String getType() {
230
            return type;
×
231
        }
232

233
        public void setType(String type) {
234
            this.type = type;
×
235
        }
×
236

237
        public Map<String, Object> getProperties() {
238
            return properties;
×
239
        }
240

241
        public void setProperties(Map<String, Object> properties) {
242
            this.properties.clear();
×
243
            this.properties.putAll(properties);
×
244
        }
×
245

246
        @Override
247
        public Map<String, Object> asMap(boolean full) {
248
            Map<String, Object> map = new LinkedHashMap<>();
×
249
            map.put("type", type);
×
250
            map.put("properties", getProperties());
×
251
            return map;
×
252
        }
253
    }
254
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc