TypeDescriptors getTypeDescriptors() { return declaringType.getTypeDescriptors(); }
@Nonnull @Override public Result<Map<TypeDescriptor, String>> subclasses(TypeDescriptor type) { JsonSubTypes jsonSubType = type.getAnnotation(JsonSubTypes.class); if (jsonSubType != null && jsonSubType.value().length > 0) { TypeDescriptors typeDescriptors = type.getTypeDescriptors(); Map<TypeDescriptor, String> aliasesByTypes = asList(jsonSubType.value()).stream() .collect(toMap(subType -> typeDescriptors.get(subType.value()), Type::name)); return Result.of(aliasesByTypes); } return Result.notFound(); }
@Nullable @Override public Result<Map<TypeDescriptor, String>> subclasses(TypeDescriptor type) { Versionable versionable = type.getAnnotation(Versionable.class); if (versionable != null && versionable.subclasses().length > 0) { TypeDescriptors typeDescriptors = type.getTypeDescriptors(); Map<TypeDescriptor, String> aliasesByTypes = asList(versionable.subclasses()).stream() .collect(toMap(subclass -> typeDescriptors.get(subclass.value()), Subclass::alias)); return Result.of(aliasesByTypes); } return Result.notFound(); }
private ValueType functionSetType() { context.describeAsync(path.any(), new TypeContext(setType, elementType)); TypeDescriptor functionType = setType.getTypeDescriptors().get(setKey.by()); TypeDescriptor input = functionType.resolveGenericParameter(Function.class, 0); TypeDescriptor output = functionType.resolveGenericParameter(Function.class, 1); if (!input.isSuperTypeOf(elementType)) { throw new IllegalArgumentException("Input type of Function provided by @SetKey(by=+" + input + ") should be super type of Set's element type " + elementType); } IdentifiableType delegate = requireIdentifiable(context.describeNow(null, new TypeContext(output))); return newSetType(ImmutableList.of((new FunctionKey((Function) functionType.newInstance(), delegate)))); }