Skip to content

Commit cca7bdd

Browse files
committed
Fixed #100 (double-prefixing of mrbean generated impl class names)
1 parent e30583b commit cca7bdd

File tree

2 files changed

+21
-6
lines changed

2 files changed

+21
-6
lines changed

mrbean/src/main/java/com/fasterxml/jackson/module/mrbean/AbstractTypeMaterializer.java

+20-6
Original file line numberDiff line numberDiff line change
@@ -232,28 +232,42 @@ public Class<?> materializeGenericType(MapperConfig<?> config, JavaType type)
232232
String abstractName = _defaultPackage+"abstract." +cls.getName()+"_TYPE_RESOLVE";
233233
TypeBuilder tb = new TypeBuilder(type);
234234
byte[] code = tb.buildAbstractBase(abstractName);
235-
Class<?> raw = _classLoader.loadAndResolve(abstractName, code, cls);
235+
Class<?> raw = _loadAndResolve(abstractName, code, cls);
236236
// and only with that intermediate non-generic type, do actual materialization
237237
AnnotatedClass ac = AnnotatedClassResolver.resolve(config,
238238
config.getTypeFactory().constructType(raw), config);
239-
return materializeRawType(config, ac);
239+
final String implClassName = _defaultPackage + cls.getName();
240+
return _materializeRawType(config, ac, implClassName);
240241
}
241242

242243
/**
243244
* NOTE: should not be called for generic types.
244245
*
245246
* @since 2.4
246247
*/
247-
public Class<?> materializeRawType(MapperConfig<?> config, AnnotatedClass typeDef)
248+
public Class<?> materializeRawType(MapperConfig<?> config, AnnotatedClass typeDef) {
249+
Class<?> rawType = typeDef.getRawType();
250+
final String implClassName = _defaultPackage + rawType.getName();
251+
return _materializeRawType(config, typeDef, implClassName);
252+
}
253+
254+
// @since 2.12 refactored to allow passing specific name to use; needed to support
255+
// both generic and non-generic cases
256+
protected Class<?> _materializeRawType(MapperConfig<?> config, AnnotatedClass typeDef,
257+
String nameToUse)
248258
{
249259
final JavaType type = typeDef.getType();
250260
Class<?> rawType = type.getRawClass();
251-
String newName = _defaultPackage+rawType.getName();
252261
BeanBuilder builder = BeanBuilder.construct(config, type, typeDef);
253-
byte[] bytecode = builder.implement(isEnabled(Feature.FAIL_ON_UNMATERIALIZED_METHOD)).build(newName);
254-
return _classLoader.loadAndResolve(newName, bytecode, rawType);
262+
byte[] bytecode = builder.implement(isEnabled(Feature.FAIL_ON_UNMATERIALIZED_METHOD)).build(nameToUse);
263+
return _loadAndResolve(nameToUse, bytecode, rawType);
255264
}
256265

266+
// @since 2.12
267+
protected Class<?> _loadAndResolve(String className, byte[] bytecode, Class<?> rawType) {
268+
return _classLoader.loadAndResolve(className, bytecode, rawType);
269+
}
270+
257271
// private until 2.9.9
258272
protected boolean _suitableType(JavaType type)
259273
{

release-notes/VERSION-2.x

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ Modules:
1212

1313
2.12.0 (not yet released)
1414

15+
#100: Prevent "double-prefixing" Mr Bean generated classes
1516
- Add Gradle Module Metadata (https://blog.gradle.org/alignment-with-gradle-module-metadata)
1617

1718
2.11.2 (not yet released)

0 commit comments

Comments
 (0)