if (node.has("javaType")) {
String fqn = substringBefore(node.get("javaType").asText(), "<");
String[] genericArguments = split(substringBetween(node.get("javaType").asText(), "<", ">"), ",");
if (isPrimitive(fqn, _package.owner())) {
throw new ClassAlreadyExistsException(primitiveType(fqn, _package.owner()));
}
int index = fqn.lastIndexOf(".") + 1;
if(index >= 0 && index<fqn.length()) {
fqn = fqn.substring(0, index) + ruleFactory.getGenerationConfig().getClassNamePrefix() + fqn.substring(index) +ruleFactory.getGenerationConfig().getClassNameSuffix();
}
try {
JClass existingClass = _package.owner().ref(Thread.currentThread().getContextClassLoader().loadClass(fqn));
if (isNotEmpty(genericArguments)) {
existingClass = addGenericArguments(_package, existingClass, genericArguments);
}
throw new ClassAlreadyExistsException(existingClass);
} catch (ClassNotFoundException e) {
if (usePolymorphicDeserialization) {
newType = _package.owner()._class(JMod.PUBLIC, fqn, ClassType.CLASS);
} else {
newType = _package.owner()._class(fqn);
}
}
} else {
if (usePolymorphicDeserialization) {
newType = _package._class(JMod.PUBLIC, getClassName(nodeName, _package),
ClassType.CLASS);
} else {
newType = _package._class(getClassName(nodeName, _package));
}
}
} catch (JClassAlreadyExistsException e) {
throw new ClassAlreadyExistsException(e.getExistingClass());
}
ruleFactory.getAnnotator().propertyInclusion(newType, node);
return newType;