|
54 | 54 | import io.micronaut.inject.ast.GenericPlaceholderElement;
|
55 | 55 | import io.micronaut.inject.ast.MemberElement;
|
56 | 56 | import io.micronaut.inject.ast.PropertyElement;
|
| 57 | +import io.micronaut.inject.ast.PropertyElementQuery; |
57 | 58 | import io.micronaut.inject.ast.TypedElement;
|
58 | 59 | import io.micronaut.inject.ast.WildcardElement;
|
59 | 60 | import io.micronaut.inject.visitor.VisitorContext;
|
@@ -2721,8 +2722,17 @@ private void populateSchemaProperties(OpenAPI openAPI, VisitorContext context, E
|
2721 | 2722 | if (classElement != null && !ClassUtils.isJavaLangType(classElement.getName())) {
|
2722 | 2723 | List<PropertyElement> beanProperties;
|
2723 | 2724 | try {
|
2724 |
| - beanProperties = classElement.getBeanProperties().stream() |
2725 |
| - .filter(p -> !"groovy.lang.MetaClass".equals(p.getType().getName())) |
| 2725 | + beanProperties = classElement.getBeanProperties( |
| 2726 | + PropertyElementQuery.of(classElement) |
| 2727 | + .excludedAnnotations(Set.of( |
| 2728 | + Hidden.class.getName(), |
| 2729 | + JsonIgnore.class.getName() |
| 2730 | + )) |
| 2731 | + ).stream() |
| 2732 | + .filter(p -> |
| 2733 | + !"groovy.lang.MetaClass".equals(p.getType().getName()) |
| 2734 | + && !"java.lang.Class".equals(p.getType().getName()) |
| 2735 | + ) |
2726 | 2736 | .toList();
|
2727 | 2737 | } catch (Exception e) {
|
2728 | 2738 | warn("Error with getting properties for class " + classElement.getName() + ": " + e + "\n" + Utils.printStackTrace(e), context, classElement);
|
@@ -2794,14 +2804,7 @@ private void processPropertyElements(OpenAPI openAPI, VisitorContext context, El
|
2794 | 2804 | }
|
2795 | 2805 |
|
2796 | 2806 | for (TypedElement publicField : publicFields) {
|
2797 |
| - boolean isHidden = getAnnotationMetadata(publicField).booleanValue(io.swagger.v3.oas.annotations.media.Schema.class, PROP_HIDDEN).orElse(false); |
2798 |
| - var jsonAnySetterAnn = getAnnotation(publicField, JsonAnySetter.class); |
2799 |
| - if (isAnnotationPresent(publicField, JsonIgnore.class) |
2800 |
| - || isAnnotationPresent(publicField, Hidden.class) |
2801 |
| - || (jsonAnySetterAnn != null && jsonAnySetterAnn.booleanValue("enabled").orElse(true)) |
2802 |
| - || isHidden) { |
2803 |
| - continue; |
2804 |
| - } |
| 2807 | + if (isHiddenElement(publicField)) continue; |
2805 | 2808 |
|
2806 | 2809 | var isGetterOverridden = false;
|
2807 | 2810 | JavadocDescription fieldJavadoc = null;
|
@@ -2849,6 +2852,17 @@ private void processPropertyElements(OpenAPI openAPI, VisitorContext context, El
|
2849 | 2852 | }
|
2850 | 2853 | }
|
2851 | 2854 |
|
| 2855 | + private static boolean isHiddenElement(TypedElement elementType) { |
| 2856 | + boolean isHidden = getAnnotationMetadata(elementType) |
| 2857 | + .booleanValue(io.swagger.v3.oas.annotations.media.Schema.class, PROP_HIDDEN).orElse(false); |
| 2858 | + var jsonAnySetterAnn = getAnnotation(elementType, JsonAnySetter.class); |
| 2859 | + return elementType.getType().isAssignable(Class.class) |
| 2860 | + || isAnnotationPresent(elementType, JsonIgnore.class) |
| 2861 | + || isAnnotationPresent(elementType, Hidden.class) |
| 2862 | + || (jsonAnySetterAnn != null && jsonAnySetterAnn.booleanValue("enabled").orElse(true)) |
| 2863 | + || isHidden; |
| 2864 | + } |
| 2865 | + |
2852 | 2866 | private boolean allowedByJsonView(TypedElement publicField, String[] classLvlJsonViewClasses, ClassElement jsonViewClassEl, VisitorContext context) {
|
2853 | 2867 | String[] fieldJsonViewClasses = getAnnotationMetadata(publicField).stringValues(JsonView.class);
|
2854 | 2868 | if (ArrayUtils.isEmpty(fieldJsonViewClasses)) {
|
|
0 commit comments