@Override public void visitObject(ObjectType objectType) { if (objectType.isOpen()) { objectType.getOpenRestriction().get().accept(this); } else { declarer.withType(objectType); } }
private void checkValidType(ConnectableComponentModel componentModel, ExtensionModel extensionModel, MetadataType metadataType, ProblemsReporter problemsReporter) { String componentTypeName = getComponentModelTypeName(componentModel); getType(metadataType).ifPresent(type -> { String declarationMessageModifier = ""; MetadataType modelType = componentModel.getOutput().getType(); if (modelType instanceof ArrayType) { declarationMessageModifier = "a collection of "; } else if (modelType instanceof ObjectType && ((ObjectType) modelType).isOpen()) { declarationMessageModifier = "a map of "; } if (Object.class.equals(type)) { problemsReporter.addError(new Problem(extensionModel, format("%s '%s' declares %s'%s' as its return type. Components that return a type " + "such as Object or Map (or a collection of any of those) must have defined an OutputResolver", capitalize(componentTypeName), componentModel.getName(), declarationMessageModifier, type))); } else if (isInvalidInterface(metadataType, type)) { problemsReporter.addError(new Problem(extensionModel, format("%s '%s' declares %s'%s' as its return type. Components that return an interface " + "(or a collection of interfaces) must have defined an OutputResolver", capitalize(componentTypeName), componentModel.getName(), declarationMessageModifier, type))); } }); }
@Override public void visitObject(ObjectType objectType) { if (objectType.isOpen()) { objectType.getOpenRestriction().get().accept(this); } else { declarer.withType(objectType); } }
private void assertMapTypes(Class<? extends Map> mapType, Class containerType, Class valueType) { assertThat(handler.handles(mapType), is(true)); objectFieldHandler.handleFields(containerType, createDefault(), new ParsingContext(), typeBuilder); List<ObjectFieldType> fields = getFields(typeBuilder); assertThat(fields.isEmpty(), is(false)); ObjectType field = (ObjectType) fields.get(0).getValue(); assertThat(field.isOpen(), is(true)); assertThat(field.getOpenRestriction().get(), instanceOf(valueType)); }