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

mybatis / generator / 1942

12 Jan 2026 05:01PM UTC coverage: 88.75% (+0.4%) from 88.365%
1942

push

github

web-flow
Merge pull request #1412 from jeffgbutler/jspecify

Adopt JSpecify

2331 of 3162 branches covered (73.72%)

1800 of 1949 new or added lines in 202 files covered. (92.36%)

18 existing lines in 10 files now uncovered.

11384 of 12827 relevant lines covered (88.75%)

0.89 hits per line

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

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

18
import static org.mybatis.generator.internal.util.StringUtility.composeFullyQualifiedTableName;
19
import static org.mybatis.generator.internal.util.StringUtility.isTrue;
20
import static org.mybatis.generator.internal.util.StringUtility.stringHasValue;
21
import static org.mybatis.generator.internal.util.messages.Messages.getString;
22

23
import java.sql.Connection;
24
import java.sql.SQLException;
25
import java.util.ArrayList;
26
import java.util.Collections;
27
import java.util.List;
28
import java.util.Objects;
29
import java.util.Optional;
30
import java.util.Set;
31

32
import org.jspecify.annotations.Nullable;
33
import org.mybatis.generator.api.CommentGenerator;
34
import org.mybatis.generator.api.GeneratedFile;
35
import org.mybatis.generator.api.GeneratedJavaFile;
36
import org.mybatis.generator.api.GeneratedKotlinFile;
37
import org.mybatis.generator.api.GeneratedXmlFile;
38
import org.mybatis.generator.api.IntrospectedTable;
39
import org.mybatis.generator.api.JavaFormatter;
40
import org.mybatis.generator.api.JavaTypeResolver;
41
import org.mybatis.generator.api.KotlinFormatter;
42
import org.mybatis.generator.api.Plugin;
43
import org.mybatis.generator.api.ProgressCallback;
44
import org.mybatis.generator.api.XmlFormatter;
45
import org.mybatis.generator.internal.JDBCConnectionFactory;
46
import org.mybatis.generator.internal.ObjectFactory;
47
import org.mybatis.generator.internal.PluginAggregator;
48
import org.mybatis.generator.internal.db.DatabaseIntrospector;
49

50
public class Context extends PropertyHolder {
51
    private final String id;
52
    private final @Nullable JDBCConnectionConfiguration jdbcConnectionConfiguration;
53
    private final @Nullable ConnectionFactoryConfiguration connectionFactoryConfiguration;
54
    private final @Nullable SqlMapGeneratorConfiguration sqlMapGeneratorConfiguration;
55
    private final @Nullable JavaTypeResolverConfiguration javaTypeResolverConfiguration;
56
    private final JavaModelGeneratorConfiguration javaModelGeneratorConfiguration;
57
    private final @Nullable JavaClientGeneratorConfiguration javaClientGeneratorConfiguration;
58
    private final List<TableConfiguration> tableConfigurations;
59
    private final ModelType defaultModelType;
60
    private final String beginningDelimiter;
61
    private final String endingDelimiter;
62
    private final @Nullable Boolean autoDelimitKeywords;
63
    private final @Nullable CommentGeneratorConfiguration commentGeneratorConfiguration;
64
    private final List<PluginConfiguration> pluginConfigurations;
65
    private final @Nullable String targetRuntime;
66
    private final @Nullable String introspectedColumnImpl;
67

68
    // the following are not really configurations, they are used in the code generation phase.
69
    // Ultimately, they should be moved out of this class and into the classes executing the generation
70
    private final JavaFormatter javaFormatter;
71
    private final KotlinFormatter kotlinFormatter;
72
    private final XmlFormatter xmlFormatter;
73
    private final CommentGenerator commentGenerator;
74
    // This is timing-dependent. The aggregator should be built before anyone calls it.
75
    private @Nullable PluginAggregator pluginAggregator;
76

77

78
    protected Context(Builder builder) {
79
        super(builder);
1✔
80
        id = Objects.requireNonNull(builder.id, getString("ValidationError.16")); //$NON-NLS-1$);
1✔
81
        defaultModelType = Objects.requireNonNull(builder.defaultModelType);
1✔
82
        tableConfigurations = Collections.unmodifiableList(builder.tableConfigurations);
1✔
83
        pluginConfigurations = Collections.unmodifiableList(builder.pluginConfigurations);
1✔
84
        commentGeneratorConfiguration = builder.commentGeneratorConfiguration;
1✔
85
        jdbcConnectionConfiguration = builder.jdbcConnectionConfiguration;
1✔
86
        connectionFactoryConfiguration = builder.connectionFactoryConfiguration;
1✔
87
        sqlMapGeneratorConfiguration = builder.sqlMapGeneratorConfiguration;
1✔
88
        javaTypeResolverConfiguration = builder.javaTypeResolverConfiguration;
1✔
89
        introspectedColumnImpl = builder.introspectedColumnImpl;
1✔
90
        javaModelGeneratorConfiguration = Objects.requireNonNull(builder.javaModelGeneratorConfiguration,
1✔
91
                getString("ValidationError.8", id)); //$NON-NLS-1$
1✔
92
        javaClientGeneratorConfiguration = builder.javaClientGeneratorConfiguration;
1✔
93
        targetRuntime = builder.targetRuntime;
1✔
94

95
        String property = getProperty(PropertyRegistry.CONTEXT_BEGINNING_DELIMITER);
1✔
96
        beginningDelimiter = property == null ? Defaults.DEFAULT_BEGINNING_DELIMITER : property;
1!
97

98
        property = getProperty(PropertyRegistry.CONTEXT_ENDING_DELIMITER);
1✔
99
        endingDelimiter = property == null ? Defaults.DEFAULT_ENDING_DELIMITER : property;
1!
100

101
        property = getProperty(PropertyRegistry.CONTEXT_AUTO_DELIMIT_KEYWORDS);
1✔
102
        autoDelimitKeywords = isTrue(property);
1✔
103

104
        javaFormatter = ObjectFactory.createJavaFormatter(this);
1✔
105
        kotlinFormatter = ObjectFactory.createKotlinFormatter(this);
1✔
106
        xmlFormatter = ObjectFactory.createXmlFormatter(this);
1✔
107
        commentGenerator = ObjectFactory.createCommentGenerator(this);
1✔
108
    }
1✔
109

110
    public Optional<JavaClientGeneratorConfiguration> getJavaClientGeneratorConfiguration() {
111
        return Optional.ofNullable(javaClientGeneratorConfiguration);
1✔
112
    }
113

114
    public JavaModelGeneratorConfiguration getJavaModelGeneratorConfiguration() {
115
        return Objects.requireNonNull(javaModelGeneratorConfiguration);
1✔
116
    }
117

118
    public Optional<JavaTypeResolverConfiguration> getJavaTypeResolverConfiguration() {
119
        return Optional.ofNullable(javaTypeResolverConfiguration);
1✔
120
    }
121

122
    public Optional<SqlMapGeneratorConfiguration> getSqlMapGeneratorConfiguration() {
123
        return Optional.ofNullable(sqlMapGeneratorConfiguration);
1✔
124
    }
125

126
    /**
127
     * This method does a simple validate, it makes sure that all required fields have been filled in. It does not do
128
     * any more complex operations such as validating that database tables exist or validating that named columns exist
129
     *
130
     * @param errors
131
     *            the errors
132
     */
133
    public void validate(List<String> errors) {
134
        if (!stringHasValue(id)) {
1!
135
            errors.add(getString("ValidationError.16")); //$NON-NLS-1$
×
136
        }
137

138
        if (jdbcConnectionConfiguration == null && connectionFactoryConfiguration == null) {
1✔
139
            // must specify one
140
            errors.add(getString("ValidationError.10", id)); //$NON-NLS-1$
1✔
141
        } else if (jdbcConnectionConfiguration != null && connectionFactoryConfiguration != null) {
1!
142
            // must not specify both
UNCOV
143
            errors.add(getString("ValidationError.10", id)); //$NON-NLS-1$
×
144
        } else if (jdbcConnectionConfiguration != null) {
1✔
145
            jdbcConnectionConfiguration.validate(errors);
1✔
146
        } else {
147
            connectionFactoryConfiguration.validate(errors);
1✔
148
        }
149

150
        javaModelGeneratorConfiguration.validate(errors, id);
1✔
151

152
        if (javaClientGeneratorConfiguration != null) {
1✔
153
            javaClientGeneratorConfiguration.validate(errors, id);
1✔
154
        }
155

156
        IntrospectedTable it = null;
1✔
157
        try {
158
            it = ObjectFactory.createIntrospectedTableForValidation(this);
1✔
159
        } catch (Exception e) {
×
160
            errors.add(getString("ValidationError.25", id)); //$NON-NLS-1$
×
161
        }
1✔
162

163
        if (it != null && it.requiresXMLGenerator()) {
1!
164
            if (sqlMapGeneratorConfiguration == null) {
1✔
165
                errors.add(getString("ValidationError.9", id)); //$NON-NLS-1$
1✔
166
            } else {
167
                sqlMapGeneratorConfiguration.validate(errors, id);
1✔
168
            }
169
        }
170

171
        if (tableConfigurations.isEmpty()) {
1✔
172
            errors.add(getString("ValidationError.3", id)); //$NON-NLS-1$
1✔
173
        } else {
174
            for (int i = 0; i < tableConfigurations.size(); i++) {
1✔
175
                TableConfiguration tc = tableConfigurations.get(i);
1✔
176

177
                tc.validate(errors, i);
1✔
178
            }
179
        }
180

181
        for (PluginConfiguration pluginConfiguration : pluginConfigurations) {
1✔
182
            pluginConfiguration.validate(errors, id);
1✔
183
        }
1✔
184
    }
1✔
185

186
    public String getId() {
187
        return id;
×
188
    }
189

190
    public ModelType getDefaultModelType() {
UNCOV
191
        return defaultModelType;
×
192
    }
193

194
    public String getBeginningDelimiter() {
195
        return beginningDelimiter;
1✔
196
    }
197

198
    public String getEndingDelimiter() {
199
        return endingDelimiter;
1✔
200
    }
201

202
    public CommentGenerator getCommentGenerator() {
203
        return commentGenerator;
1✔
204
    }
205

206
    public JavaFormatter getJavaFormatter() {
207
        return javaFormatter;
1✔
208
    }
209

210
    public KotlinFormatter getKotlinFormatter() {
211
        return kotlinFormatter;
1✔
212
    }
213

214
    public XmlFormatter getXmlFormatter() {
215
        return xmlFormatter;
1✔
216
    }
217

218
    public Optional<CommentGeneratorConfiguration> getCommentGeneratorConfiguration() {
219
        return Optional.ofNullable(commentGeneratorConfiguration);
1✔
220
    }
221

222
    public Plugin getPlugins() {
223
        return Objects.requireNonNull(pluginAggregator);
1✔
224
    }
225

226
    public Optional<String> getTargetRuntime() {
227
        return Optional.ofNullable(targetRuntime);
1✔
228
    }
229

230
    public Optional<String> getIntrospectedColumnImpl() {
231
        return Optional.ofNullable(introspectedColumnImpl);
1✔
232
    }
233

234
    // methods related to code generation.
235
    //
236
    // Methods should be called in this order:
237
    //
238
    // 1. getIntrospectionSteps()
239
    // 2. introspectTables()
240
    // 3. getGenerationSteps()
241
    // 4. generateFiles()
242
    //
243

244
    private final List<IntrospectedTable> introspectedTables = new ArrayList<>();
1✔
245

246
    /**
247
     * This method could be useful for users that use the library for introspection only
248
     * and not for code generation.
249
     *
250
     * @return a list containing the results of table introspection. The list will be empty
251
     *     if this method is called before introspectTables(), or if no tables are found that
252
     *     match the configuration
253
     */
254
    public List<IntrospectedTable> getIntrospectedTables() {
255
        return introspectedTables;
×
256
    }
257

258
    public int getIntrospectionSteps() {
259
        int steps = 0;
1✔
260

261
        steps++; // connect to database
1✔
262

263
        // for each table:
264
        //
265
        // 1. Create introspected table implementation
266

267
        steps += tableConfigurations.size();
1✔
268

269
        return steps;
1✔
270
    }
271

272
    /**
273
     * Introspect tables based on the configuration specified in the
274
     * constructor. This method is long-running.
275
     *
276
     * @param callback
277
     *            a progress callback if progress information is desired, or
278
     *            <code>null</code>
279
     * @param warnings
280
     *            any warning generated from this method will be added to the
281
     *            List. Warnings are always Strings.
282
     * @param fullyQualifiedTableNames
283
     *            a set of table names to generate. The elements of the set must
284
     *            be Strings that exactly match what's specified in the
285
     *            configuration. For example, if table name = "foo" and schema =
286
     *            "bar", then the fully qualified table name is "foo.bar". If
287
     *            the Set is null or empty, then all tables in the configuration
288
     *            will be used for code generation.
289
     *
290
     * @throws SQLException
291
     *             if some error arises while introspecting the specified
292
     *             database tables.
293
     * @throws InterruptedException
294
     *             if the progress callback reports a cancel
295
     */
296
    public void introspectTables(ProgressCallback callback,
297
            List<String> warnings, @Nullable Set<String> fullyQualifiedTableNames)
298
            throws SQLException, InterruptedException {
299

300
        introspectedTables.clear();
1✔
301
        JavaTypeResolver javaTypeResolver = ObjectFactory
1✔
302
                .createJavaTypeResolver(this, warnings);
1✔
303

304
        Connection connection = null;
1✔
305

306
        try {
307
            callback.startTask(getString("Progress.0")); //$NON-NLS-1$
1✔
308
            connection = getConnection();
1✔
309

310
            DatabaseIntrospector databaseIntrospector = new DatabaseIntrospector(
1✔
311
                    this, connection.getMetaData(), javaTypeResolver, warnings);
1✔
312

313
            for (TableConfiguration tc : tableConfigurations) {
1✔
314
                String tableName = composeFullyQualifiedTableName(tc.getCatalog(), tc
1✔
315
                                .getSchema(), tc.getTableName(), '.');
1✔
316

317
                if (fullyQualifiedTableNames != null
1!
318
                        && !fullyQualifiedTableNames.isEmpty()
×
319
                        && !fullyQualifiedTableNames.contains(tableName)) {
×
320
                    continue;
×
321
                }
322

323
                if (!tc.areAnyStatementsEnabled()) {
1!
324
                    warnings.add(getString("Warning.0", tableName)); //$NON-NLS-1$
×
325
                    continue;
×
326
                }
327

328
                callback.startTask(getString("Progress.1", tableName)); //$NON-NLS-1$
1✔
329
                List<IntrospectedTable> tables = databaseIntrospector.introspectTables(tc);
1✔
330
                introspectedTables.addAll(tables);
1✔
331

332
                callback.checkCancel();
1✔
333
            }
1✔
334
        } finally {
335
            closeConnection(connection);
1✔
336
        }
337
    }
1✔
338

339
    public int getGenerationSteps() {
340
        int steps = 0;
1✔
341

342
        for (IntrospectedTable introspectedTable : introspectedTables) {
1✔
343
            steps += introspectedTable.getGenerationSteps();
1✔
344
        }
1✔
345

346
        return steps;
1✔
347
    }
348

349
    public void generateFiles(ProgressCallback callback, List<GeneratedJavaFile> generatedJavaFiles,
350
                              List<GeneratedXmlFile> generatedXmlFiles, List<GeneratedKotlinFile> generatedKotlinFiles,
351
                              List<GeneratedFile> otherGeneratedFiles, List<String> warnings)
352
            throws InterruptedException {
353

354
        pluginAggregator = new PluginAggregator();
1✔
355
        for (PluginConfiguration pluginConfiguration : pluginConfigurations) {
1✔
356
            Plugin plugin = ObjectFactory.createPlugin(this, pluginConfiguration);
1✔
357
            if (plugin.validate(warnings)) {
1✔
358
                pluginAggregator.addPlugin(plugin);
1✔
359
            } else {
360
                warnings.add(getString("Warning.24", //$NON-NLS-1$
1✔
361
                        pluginConfiguration.getConfigurationType()
1✔
362
                                .orElse("Unknown Plugin Type"), id)); //$NON-NLS-1$
1✔
363
            }
364
        }
1✔
365

366
        // initialize everything first before generating. This allows plugins to know about other
367
        // items in the configuration.
368
        for (IntrospectedTable introspectedTable : introspectedTables) {
1✔
369
            callback.checkCancel();
1✔
370
            introspectedTable.initialize();
1✔
371
            introspectedTable.calculateGenerators(warnings, callback);
1✔
372
        }
1✔
373

374
        for (IntrospectedTable introspectedTable : introspectedTables) {
1✔
375
            callback.checkCancel();
1✔
376

377
            if (!pluginAggregator.shouldGenerate(introspectedTable)) {
1✔
378
                continue;
1✔
379
            }
380

381
            generatedJavaFiles.addAll(introspectedTable.getGeneratedJavaFiles());
1✔
382
            generatedXmlFiles.addAll(introspectedTable.getGeneratedXmlFiles());
1✔
383
            generatedKotlinFiles.addAll(introspectedTable.getGeneratedKotlinFiles());
1✔
384

385
            generatedJavaFiles.addAll(pluginAggregator.contextGenerateAdditionalJavaFiles(introspectedTable));
1✔
386
            generatedXmlFiles.addAll(pluginAggregator.contextGenerateAdditionalXmlFiles(introspectedTable));
1✔
387
            generatedKotlinFiles.addAll(pluginAggregator.contextGenerateAdditionalKotlinFiles(introspectedTable));
1✔
388
            otherGeneratedFiles.addAll(pluginAggregator.contextGenerateAdditionalFiles(introspectedTable));
1✔
389
        }
1✔
390

391
        generatedJavaFiles.addAll(pluginAggregator.contextGenerateAdditionalJavaFiles());
1✔
392
        generatedXmlFiles.addAll(pluginAggregator.contextGenerateAdditionalXmlFiles());
1✔
393
        generatedKotlinFiles.addAll(pluginAggregator.contextGenerateAdditionalKotlinFiles());
1✔
394
        otherGeneratedFiles.addAll(pluginAggregator.contextGenerateAdditionalFiles());
1✔
395
    }
1✔
396

397
    /**
398
     * This method creates a new JDBC connection from the values specified in the configuration file.
399
     * If you call this method, then you are responsible
400
     * for closing the connection (See {@link Context#closeConnection(Connection)}). If you do not
401
     * close the connection, then there could be connection leaks.
402
     *
403
     * @return a new connection created from the values in the configuration file
404
     * @throws SQLException if any error occurs while creating the connection
405
     */
406
    public Connection getConnection() throws SQLException {
407
        if (jdbcConnectionConfiguration != null) {
1✔
408
            return new JDBCConnectionFactory(jdbcConnectionConfiguration).getConnection();
1✔
409
        } else {
410
            return ObjectFactory.createConnectionFactory(Objects.requireNonNull(connectionFactoryConfiguration))
1✔
411
                    .getConnection();
1✔
412
        }
413
    }
414

415
    /**
416
     * This method closes a JDBC connection and ignores any errors. If the passed connection is null,
417
     * then the method does nothing.
418
     *
419
     * @param connection a JDBC connection to close, may be null
420
     */
421
    public void closeConnection(@Nullable Connection connection) {
422
        if (connection != null) {
1!
423
            try {
424
                connection.close();
1✔
425
            } catch (SQLException e) {
×
426
                // ignore
427
            }
1✔
428
        }
429
    }
1✔
430

431
    public boolean autoDelimitKeywords() {
432
        return autoDelimitKeywords != null && autoDelimitKeywords;
1!
433
    }
434

435
    public Optional<ConnectionFactoryConfiguration> getConnectionFactoryConfiguration() {
NEW
436
        return Optional.ofNullable(connectionFactoryConfiguration);
×
437
    }
438

439
    public static class Builder extends AbstractBuilder<Builder> {
1✔
440
        private @Nullable String id;
441
        private @Nullable ModelType defaultModelType;
442
        private @Nullable String targetRuntime;
443
        private @Nullable String introspectedColumnImpl;
444
        private final List<PluginConfiguration> pluginConfigurations = new ArrayList<>();
1✔
445
        private final ArrayList<TableConfiguration> tableConfigurations = new ArrayList<>();
1✔
446
        private @Nullable CommentGeneratorConfiguration commentGeneratorConfiguration;
447
        private @Nullable JDBCConnectionConfiguration jdbcConnectionConfiguration;
448
        private @Nullable ConnectionFactoryConfiguration connectionFactoryConfiguration;
449
        private @Nullable SqlMapGeneratorConfiguration sqlMapGeneratorConfiguration;
450
        private @Nullable JavaTypeResolverConfiguration javaTypeResolverConfiguration;
451
        private @Nullable JavaModelGeneratorConfiguration javaModelGeneratorConfiguration;
452
        private @Nullable JavaClientGeneratorConfiguration javaClientGeneratorConfiguration;
453

454
        @Override
455
        protected Builder getThis() {
456
            return this;
1✔
457
        }
458

459
        public Context build() {
460
            return new Context(this);
1✔
461
        }
462

463
        public Builder withId(@Nullable String id) {
464
            this.id = id;
1✔
465
            return this;
1✔
466
        }
467

468
        public Builder withDefaultModelType(ModelType defaultModelType) {
469
            this.defaultModelType = defaultModelType;
1✔
470
            return this;
1✔
471
        }
472

473
        public Builder withTargetRuntime(@Nullable String targetRuntime) {
474
            this.targetRuntime = targetRuntime;
1✔
475
            return this;
1✔
476
        }
477

478
        public Builder withIntrospectedColumnImpl(@Nullable String introspectedColumnImpl) {
479
            this.introspectedColumnImpl = introspectedColumnImpl;
1✔
480
            return this;
1✔
481
        }
482

483
        @SuppressWarnings("UnusedReturnValue")
484
        public Builder withPluginConfiguration(PluginConfiguration pluginConfiguration) {
485
            pluginConfigurations.add(pluginConfiguration);
1✔
486
            return this;
1✔
487
        }
488

489
        @SuppressWarnings("UnusedReturnValue")
490
        public Builder withTableConfiguration(TableConfiguration tableConfiguration) {
491
            tableConfigurations.add(tableConfiguration);
1✔
492
            return this;
1✔
493
        }
494

495
        @SuppressWarnings("UnusedReturnValue")
496
        public Builder withCommentGeneratorConfiguration(CommentGeneratorConfiguration commentGeneratorConfiguration) {
497
            this.commentGeneratorConfiguration = commentGeneratorConfiguration;
1✔
498
            return this;
1✔
499
        }
500

501
        @SuppressWarnings("UnusedReturnValue")
502
        public Builder withJdbcConnectionConfiguration(JDBCConnectionConfiguration jdbcConnectionConfiguration) {
503
            this.jdbcConnectionConfiguration = jdbcConnectionConfiguration;
1✔
504
            return this;
1✔
505
        }
506

507
        @SuppressWarnings("UnusedReturnValue")
508
        public Builder withSqlMapGeneratorConfiguration(SqlMapGeneratorConfiguration sqlMapGeneratorConfiguration) {
509
            this.sqlMapGeneratorConfiguration = sqlMapGeneratorConfiguration;
1✔
510
            return this;
1✔
511
        }
512

513
        public Builder withConnectionFactoryConfiguration(
514
                ConnectionFactoryConfiguration connectionFactoryConfiguration) {
515
            this.connectionFactoryConfiguration = connectionFactoryConfiguration;
1✔
516
            return this;
1✔
517
        }
518

519
        @SuppressWarnings("UnusedReturnValue")
520
        public Builder withJavaTypeResolverConfiguration(JavaTypeResolverConfiguration javaTypeResolverConfiguration) {
521
            this.javaTypeResolverConfiguration = javaTypeResolverConfiguration;
1✔
522
            return this;
1✔
523
        }
524

525
        public Builder withJavaModelGeneratorConfiguration(
526
                JavaModelGeneratorConfiguration javaModelGeneratorConfiguration) {
527
            this.javaModelGeneratorConfiguration = javaModelGeneratorConfiguration;
1✔
528
            return this;
1✔
529
        }
530

531
        @SuppressWarnings("UnusedReturnValue")
532
        public Builder withJavaClientGeneratorConfiguration(
533
                JavaClientGeneratorConfiguration javaClientGeneratorConfiguration) {
534
            this.javaClientGeneratorConfiguration = javaClientGeneratorConfiguration;
1✔
535
            return this;
1✔
536
        }
537
    }
538
}
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