}
for (Map.Entry<String, Class<?>> entry : restyResolver.getIdClassMap().entrySet()) {
JClassType entryType = BaseSourceCreator.find(entry.getValue(), logger, context);
if (!isLeaf || classType.equals(entryType))
possibleTypes.add(new Subtype(entry.getKey(), entryType));
}
if (isLeaf && possibleTypes.size() == 0)
{
logger.log(BaseSourceCreator.ERROR, "Could not find entry in " + restyResolver.getClass().getName() + " for type: " + classType);
throw new UnableToCompleteException();
}
} else if (types != null) {
for (JsonSubTypes.Type type : types) {
if (type.name() != null && !type.name().isEmpty()) {
JClassType typeClass = BaseSourceCreator.find(type.value(), logger, context);
if (!isLeaf || classType.equals(typeClass))
possibleTypes.add(new Subtype(type.name(), typeClass));
} else {
JsonTypeName nameAnnotation = type.value().getAnnotation(JsonTypeName.class);
if (nameAnnotation == null || nameAnnotation.value() == null || nameAnnotation.value().isEmpty())
{
logger.log(BaseSourceCreator.ERROR, "Cannot find @JsonTypeName annotation for type: " + type.value());
throw new UnableToCompleteException();
}
JClassType typeClass = BaseSourceCreator.find(type.value(), logger, context);
if (!isLeaf || classType.equals(typeClass))
possibleTypes.add(new Subtype(nameAnnotation.value(), typeClass));
}
}
if (isLeaf && possibleTypes.size() == 0)
{