Skip to content

Commit 36bcb22

Browse files
committed
Refactoring: moved getLanguageDriver() from MapperBuilderAssistant to Configuration
- In ProviderSqlSource, it is better not to assume the driver is already registered. - Replaced Class#newInstance() with Constructor#newInstance().
1 parent 17fe64e commit 36bcb22

File tree

6 files changed

+19
-14
lines changed

6 files changed

+19
-14
lines changed

src/main/java/org/apache/ibatis/builder/MapperBuilderAssistant.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -457,13 +457,12 @@ public ResultMapping buildResultMapping(Class<?> resultType, String property, St
457457
nestedResultMap, notNullColumn, columnPrefix, typeHandler, flags, null, null, configuration.isLazyLoadingEnabled());
458458
}
459459

460+
/**
461+
* @deprecated Use {@link Configuration#getLanguageDriver(Class)}
462+
*/
463+
@Deprecated
460464
public LanguageDriver getLanguageDriver(Class<? extends LanguageDriver> langClass) {
461-
if (langClass != null) {
462-
configuration.getLanguageRegistry().register(langClass);
463-
} else {
464-
langClass = configuration.getLanguageRegistry().getDefaultDriverClass();
465-
}
466-
return configuration.getLanguageRegistry().getDriver(langClass);
465+
return configuration.getLanguageDriver(langClass);
467466
}
468467

469468
/** Backward compatibility signature. */

src/main/java/org/apache/ibatis/builder/annotation/MapperAnnotationBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,7 @@ private LanguageDriver getLanguageDriver(Method method) {
387387
if (lang != null) {
388388
langClass = lang.value();
389389
}
390-
return assistant.getLanguageDriver(langClass);
390+
return configuration.getLanguageDriver(langClass);
391391
}
392392

393393
private Class<?> getParameterType(Method method) {

src/main/java/org/apache/ibatis/builder/annotation/ProviderSqlSource.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,7 @@ public ProviderSqlSource(Configuration configuration, Object provider, Class<?>
5959
try {
6060
this.configuration = configuration;
6161
Lang lang = mapperMethod == null ? null : mapperMethod.getAnnotation(Lang.class);
62-
this.languageDriver = lang == null ?
63-
configuration.getLanguageRegistry().getDefaultDriver() :
64-
configuration.getLanguageRegistry().getDriver(lang.value());
62+
this.languageDriver = configuration.getLanguageDriver(lang == null ? null : lang.value());
6563
this.providerType = (Class<?>) provider.getClass().getMethod("type").invoke(provider);
6664
providerMethodName = (String) provider.getClass().getMethod("method").invoke(provider);
6765

src/main/java/org/apache/ibatis/builder/xml/XMLStatementBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ private LanguageDriver getLanguageDriver(String lang) {
197197
if (lang != null) {
198198
langClass = resolveClass(lang);
199199
}
200-
return builderAssistant.getLanguageDriver(langClass);
200+
return configuration.getLanguageDriver(langClass);
201201
}
202202

203203
}

src/main/java/org/apache/ibatis/scripting/LanguageDriverRegistry.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,13 @@ public void register(Class<? extends LanguageDriver> cls) {
3131
if (cls == null) {
3232
throw new IllegalArgumentException("null is not a valid Language Driver");
3333
}
34-
if (!LANGUAGE_DRIVER_MAP.containsKey(cls)) {
34+
LANGUAGE_DRIVER_MAP.computeIfAbsent(cls, k -> {
3535
try {
36-
LANGUAGE_DRIVER_MAP.put(cls, cls.newInstance());
36+
return k.getDeclaredConstructor().newInstance();
3737
} catch (Exception ex) {
3838
throw new ScriptingException("Failed to load language driver for " + cls.getName(), ex);
3939
}
40-
}
40+
});
4141
}
4242

4343
public void register(LanguageDriver instance) {

src/main/java/org/apache/ibatis/session/Configuration.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -536,6 +536,14 @@ public LanguageDriver getDefaultScriptingLanguageInstance() {
536536
return languageRegistry.getDefaultDriver();
537537
}
538538

539+
public LanguageDriver getLanguageDriver(Class<? extends LanguageDriver> langClass) {
540+
if (langClass == null) {
541+
return languageRegistry.getDefaultDriver();
542+
}
543+
languageRegistry.register(langClass);
544+
return languageRegistry.getDriver(langClass);
545+
}
546+
539547
/**
540548
* @deprecated Use {@link #getDefaultScriptingLanguageInstance()}
541549
*/

0 commit comments

Comments
 (0)