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

mybatis / generator / 1947

14 Jan 2026 02:31PM UTC coverage: 88.838% (+0.04%) from 88.799%
1947

push

github

web-flow
Merge pull request #1411 from mybatis/renovate/github-codeql-action-digest

Update github/codeql-action digest to cdefb33

2347 of 3184 branches covered (73.71%)

11517 of 12964 relevant lines covered (88.84%)

0.89 hits per line

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

95.15
/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.isTrue;
19
import static org.mybatis.generator.internal.util.StringUtility.stringHasValue;
20
import static org.mybatis.generator.internal.util.messages.Messages.getString;
21

22
import java.util.ArrayList;
23
import java.util.Collections;
24
import java.util.List;
25
import java.util.Objects;
26
import java.util.Optional;
27
import java.util.stream.Stream;
28

29
import org.jspecify.annotations.Nullable;
30
import org.mybatis.generator.api.IntrospectedTable;
31
import org.mybatis.generator.internal.ObjectFactory;
32

33
public class Context extends PropertyHolder {
34
    private final String id;
35
    private final @Nullable JDBCConnectionConfiguration jdbcConnectionConfiguration;
36
    private final @Nullable ConnectionFactoryConfiguration connectionFactoryConfiguration;
37
    private final @Nullable SqlMapGeneratorConfiguration sqlMapGeneratorConfiguration;
38
    private final @Nullable JavaTypeResolverConfiguration javaTypeResolverConfiguration;
39
    private final JavaModelGeneratorConfiguration javaModelGeneratorConfiguration;
40
    private final @Nullable JavaClientGeneratorConfiguration javaClientGeneratorConfiguration;
41
    private final List<TableConfiguration> tableConfigurations;
42
    private final ModelType defaultModelType;
43
    private final String beginningDelimiter;
44
    private final String endingDelimiter;
45
    private final @Nullable Boolean autoDelimitKeywords;
46
    private final @Nullable CommentGeneratorConfiguration commentGeneratorConfiguration;
47
    private final List<PluginConfiguration> pluginConfigurations;
48
    private final @Nullable String targetRuntime;
49
    private final @Nullable String introspectedColumnImpl;
50

51

52

53
    protected Context(Builder builder) {
54
        super(builder);
1✔
55
        id = Objects.requireNonNull(builder.id, getString("ValidationError.16")); //$NON-NLS-1$);
1✔
56
        defaultModelType = Objects.requireNonNull(builder.defaultModelType);
1✔
57
        tableConfigurations = Collections.unmodifiableList(builder.tableConfigurations);
1✔
58
        pluginConfigurations = Collections.unmodifiableList(builder.pluginConfigurations);
1✔
59
        commentGeneratorConfiguration = builder.commentGeneratorConfiguration;
1✔
60
        jdbcConnectionConfiguration = builder.jdbcConnectionConfiguration;
1✔
61
        connectionFactoryConfiguration = builder.connectionFactoryConfiguration;
1✔
62
        sqlMapGeneratorConfiguration = builder.sqlMapGeneratorConfiguration;
1✔
63
        javaTypeResolverConfiguration = builder.javaTypeResolverConfiguration;
1✔
64
        introspectedColumnImpl = builder.introspectedColumnImpl;
1✔
65
        javaModelGeneratorConfiguration = Objects.requireNonNull(builder.javaModelGeneratorConfiguration,
1✔
66
                getString("ValidationError.8", id)); //$NON-NLS-1$
1✔
67
        javaClientGeneratorConfiguration = builder.javaClientGeneratorConfiguration;
1✔
68
        targetRuntime = builder.targetRuntime;
1✔
69

70
        String property = getProperty(PropertyRegistry.CONTEXT_BEGINNING_DELIMITER);
1✔
71
        beginningDelimiter = property == null ? Defaults.DEFAULT_BEGINNING_DELIMITER : property;
1!
72

73
        property = getProperty(PropertyRegistry.CONTEXT_ENDING_DELIMITER);
1✔
74
        endingDelimiter = property == null ? Defaults.DEFAULT_ENDING_DELIMITER : property;
1!
75

76
        property = getProperty(PropertyRegistry.CONTEXT_AUTO_DELIMIT_KEYWORDS);
1✔
77
        autoDelimitKeywords = isTrue(property);
1✔
78
    }
1✔
79

80
    public Optional<JavaClientGeneratorConfiguration> getJavaClientGeneratorConfiguration() {
81
        return Optional.ofNullable(javaClientGeneratorConfiguration);
1✔
82
    }
83

84
    public JavaModelGeneratorConfiguration getJavaModelGeneratorConfiguration() {
85
        return Objects.requireNonNull(javaModelGeneratorConfiguration);
1✔
86
    }
87

88
    public Optional<JavaTypeResolverConfiguration> getJavaTypeResolverConfiguration() {
89
        return Optional.ofNullable(javaTypeResolverConfiguration);
1✔
90
    }
91

92
    public Optional<SqlMapGeneratorConfiguration> getSqlMapGeneratorConfiguration() {
93
        return Optional.ofNullable(sqlMapGeneratorConfiguration);
1✔
94
    }
95

96
    /**
97
     * This method does a simple validate, it makes sure that all required fields have been filled in. It does not do
98
     * any more complex operations such as validating that database tables exist or validating that named columns exist
99
     *
100
     * @param errors
101
     *            the errors
102
     */
103
    public void validate(List<String> errors) {
104
        if (!stringHasValue(id)) {
1!
105
            errors.add(getString("ValidationError.16")); //$NON-NLS-1$
×
106
        }
107

108
        if (jdbcConnectionConfiguration == null && connectionFactoryConfiguration == null) {
1✔
109
            // must specify one
110
            errors.add(getString("ValidationError.10", id)); //$NON-NLS-1$
1✔
111
        } else if (jdbcConnectionConfiguration != null && connectionFactoryConfiguration != null) {
1!
112
            // must not specify both
113
            errors.add(getString("ValidationError.10", id)); //$NON-NLS-1$
×
114
        } else if (jdbcConnectionConfiguration != null) {
1✔
115
            jdbcConnectionConfiguration.validate(errors);
1✔
116
        } else {
117
            connectionFactoryConfiguration.validate(errors);
1✔
118
        }
119

120
        javaModelGeneratorConfiguration.validate(errors, id);
1✔
121

122
        if (javaClientGeneratorConfiguration != null) {
1✔
123
            javaClientGeneratorConfiguration.validate(errors, id);
1✔
124
        }
125

126
        IntrospectedTable it = null;
1✔
127
        try {
128
            it = ObjectFactory.createIntrospectedTableForValidation(this);
1✔
129
        } catch (Exception e) {
×
130
            errors.add(getString("ValidationError.25", id)); //$NON-NLS-1$
×
131
        }
1✔
132

133
        if (it != null && it.requiresXMLGenerator()) {
1!
134
            if (sqlMapGeneratorConfiguration == null) {
1✔
135
                errors.add(getString("ValidationError.9", id)); //$NON-NLS-1$
1✔
136
            } else {
137
                sqlMapGeneratorConfiguration.validate(errors, id);
1✔
138
            }
139
        }
140

141
        if (tableConfigurations.isEmpty()) {
1✔
142
            errors.add(getString("ValidationError.3", id)); //$NON-NLS-1$
1✔
143
        } else {
144
            for (int i = 0; i < tableConfigurations.size(); i++) {
1✔
145
                TableConfiguration tc = tableConfigurations.get(i);
1✔
146

147
                tc.validate(errors, i);
1✔
148
            }
149
        }
150

151
        for (PluginConfiguration pluginConfiguration : pluginConfigurations) {
1✔
152
            pluginConfiguration.validate(errors, id);
1✔
153
        }
1✔
154
    }
1✔
155

156
    public String getId() {
157
        return id;
1✔
158
    }
159

160
    public ModelType getDefaultModelType() {
161
        return defaultModelType;
×
162
    }
163

164
    public String getBeginningDelimiter() {
165
        return beginningDelimiter;
1✔
166
    }
167

168
    public String getEndingDelimiter() {
169
        return endingDelimiter;
1✔
170
    }
171

172
    public Optional<CommentGeneratorConfiguration> getCommentGeneratorConfiguration() {
173
        return Optional.ofNullable(commentGeneratorConfiguration);
1✔
174
    }
175

176
    public Optional<String> getTargetRuntime() {
177
        return Optional.ofNullable(targetRuntime);
1✔
178
    }
179

180
    public Optional<String> getIntrospectedColumnImpl() {
181
        return Optional.ofNullable(introspectedColumnImpl);
1✔
182
    }
183

184

185
    public int getIntrospectionSteps() {
186
        int steps = 0;
1✔
187

188
        steps++; // connect to database
1✔
189

190
        // for each table:
191
        //
192
        // 1. Create introspected table implementation
193

194
        steps += tableConfigurations.size();
1✔
195

196
        return steps;
1✔
197
    }
198

199
    public Stream<PluginConfiguration> pluginConfigurations() {
200
        return pluginConfigurations.stream();
1✔
201
    }
202

203
    public Stream<TableConfiguration> tableConfigurations() {
204
        return tableConfigurations.stream();
1✔
205
    }
206

207
    public boolean autoDelimitKeywords() {
208
        return autoDelimitKeywords != null && autoDelimitKeywords;
1!
209
    }
210

211
    public @Nullable ConnectionFactoryConfiguration getConnectionFactoryConfiguration() {
212
        return connectionFactoryConfiguration;
1✔
213
    }
214

215
    public @Nullable JDBCConnectionConfiguration getJDBCConnectionConfiguration() {
216
        return jdbcConnectionConfiguration;
1✔
217
    }
218

219
    public static class Builder extends AbstractBuilder<Builder> {
1✔
220
        private @Nullable String id;
221
        private @Nullable ModelType defaultModelType;
222
        private @Nullable String targetRuntime;
223
        private @Nullable String introspectedColumnImpl;
224
        private final List<PluginConfiguration> pluginConfigurations = new ArrayList<>();
1✔
225
        private final ArrayList<TableConfiguration> tableConfigurations = new ArrayList<>();
1✔
226
        private @Nullable CommentGeneratorConfiguration commentGeneratorConfiguration;
227
        private @Nullable JDBCConnectionConfiguration jdbcConnectionConfiguration;
228
        private @Nullable ConnectionFactoryConfiguration connectionFactoryConfiguration;
229
        private @Nullable SqlMapGeneratorConfiguration sqlMapGeneratorConfiguration;
230
        private @Nullable JavaTypeResolverConfiguration javaTypeResolverConfiguration;
231
        private @Nullable JavaModelGeneratorConfiguration javaModelGeneratorConfiguration;
232
        private @Nullable JavaClientGeneratorConfiguration javaClientGeneratorConfiguration;
233

234
        @Override
235
        protected Builder getThis() {
236
            return this;
1✔
237
        }
238

239
        public Context build() {
240
            return new Context(this);
1✔
241
        }
242

243
        public Builder withId(@Nullable String id) {
244
            this.id = id;
1✔
245
            return this;
1✔
246
        }
247

248
        public Builder withDefaultModelType(ModelType defaultModelType) {
249
            this.defaultModelType = defaultModelType;
1✔
250
            return this;
1✔
251
        }
252

253
        public Builder withTargetRuntime(@Nullable String targetRuntime) {
254
            this.targetRuntime = targetRuntime;
1✔
255
            return this;
1✔
256
        }
257

258
        public Builder withIntrospectedColumnImpl(@Nullable String introspectedColumnImpl) {
259
            this.introspectedColumnImpl = introspectedColumnImpl;
1✔
260
            return this;
1✔
261
        }
262

263
        @SuppressWarnings("UnusedReturnValue")
264
        public Builder withPluginConfiguration(PluginConfiguration pluginConfiguration) {
265
            pluginConfigurations.add(pluginConfiguration);
1✔
266
            return this;
1✔
267
        }
268

269
        @SuppressWarnings("UnusedReturnValue")
270
        public Builder withTableConfiguration(TableConfiguration tableConfiguration) {
271
            tableConfigurations.add(tableConfiguration);
1✔
272
            return this;
1✔
273
        }
274

275
        @SuppressWarnings("UnusedReturnValue")
276
        public Builder withCommentGeneratorConfiguration(CommentGeneratorConfiguration commentGeneratorConfiguration) {
277
            this.commentGeneratorConfiguration = commentGeneratorConfiguration;
1✔
278
            return this;
1✔
279
        }
280

281
        @SuppressWarnings("UnusedReturnValue")
282
        public Builder withJdbcConnectionConfiguration(JDBCConnectionConfiguration jdbcConnectionConfiguration) {
283
            this.jdbcConnectionConfiguration = jdbcConnectionConfiguration;
1✔
284
            return this;
1✔
285
        }
286

287
        @SuppressWarnings("UnusedReturnValue")
288
        public Builder withSqlMapGeneratorConfiguration(SqlMapGeneratorConfiguration sqlMapGeneratorConfiguration) {
289
            this.sqlMapGeneratorConfiguration = sqlMapGeneratorConfiguration;
1✔
290
            return this;
1✔
291
        }
292

293
        public Builder withConnectionFactoryConfiguration(
294
                ConnectionFactoryConfiguration connectionFactoryConfiguration) {
295
            this.connectionFactoryConfiguration = connectionFactoryConfiguration;
1✔
296
            return this;
1✔
297
        }
298

299
        @SuppressWarnings("UnusedReturnValue")
300
        public Builder withJavaTypeResolverConfiguration(JavaTypeResolverConfiguration javaTypeResolverConfiguration) {
301
            this.javaTypeResolverConfiguration = javaTypeResolverConfiguration;
1✔
302
            return this;
1✔
303
        }
304

305
        public Builder withJavaModelGeneratorConfiguration(
306
                JavaModelGeneratorConfiguration javaModelGeneratorConfiguration) {
307
            this.javaModelGeneratorConfiguration = javaModelGeneratorConfiguration;
1✔
308
            return this;
1✔
309
        }
310

311
        @SuppressWarnings("UnusedReturnValue")
312
        public Builder withJavaClientGeneratorConfiguration(
313
                JavaClientGeneratorConfiguration javaClientGeneratorConfiguration) {
314
            this.javaClientGeneratorConfiguration = javaClientGeneratorConfiguration;
1✔
315
            return this;
1✔
316
        }
317
    }
318
}
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