This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git

commit c5a95fe117c44cd43560257699aafdcbe2846549
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Mon Aug 17 16:49:19 2020 +0200

    CAMEL-15160: Configurer - Generate details what type Map/List contains
---
 .../apache/camel/spi/PropertyConfigurerGetter.java | 14 ++++++++++
 .../camel/impl/ExtendedCamelContextConfigurer.java |  9 +++++++
 .../camel/impl/RestConfigurationConfigurer.java    | 19 +++++++++++++
 ...ToleranceConfigurationDefinitionConfigurer.java |  7 +++++
 .../HystrixConfigurationDefinitionConfigurer.java  |  7 +++++
 ...ilience4jConfigurationDefinitionConfigurer.java |  7 +++++
 ...ToleranceConfigurationPropertiesConfigurer.java |  7 +++++
 ...althCheckConfigurationPropertiesConfigurer.java |  7 +++++
 .../HealthConfigurationPropertiesConfigurer.java   |  9 +++++++
 .../HystrixConfigurationPropertiesConfigurer.java  |  7 +++++
 .../main/LraConfigurationPropertiesConfigurer.java |  7 +++++
 .../MainConfigurationPropertiesConfigurer.java     | 11 ++++++++
 ...ilience4jConfigurationPropertiesConfigurer.java |  7 +++++
 .../RestConfigurationPropertiesConfigurer.java     | 19 +++++++++++++
 ...hreadPoolConfigurationPropertiesConfigurer.java |  9 +++++++
 .../apache/camel/main/MySecondBarConfigurer.java   |  9 +++++++
 .../apache/camel/main/MySecondFooConfigurer.java   |  9 +++++++
 .../DefaultExchangeFormatterConfigurer.java        |  7 +++++
 .../packaging/AbstractGenerateConfigurerMojo.java  | 31 ++++++++++++++++++++--
 .../packaging/PropertyConfigurerGenerator.java     | 28 +++++++++++++++++++
 20 files changed, 228 insertions(+), 2 deletions(-)

diff --git 
a/core/camel-api/src/main/java/org/apache/camel/spi/PropertyConfigurerGetter.java
 
b/core/camel-api/src/main/java/org/apache/camel/spi/PropertyConfigurerGetter.java
index c0d24f9..b50c141 100644
--- 
a/core/camel-api/src/main/java/org/apache/camel/spi/PropertyConfigurerGetter.java
+++ 
b/core/camel-api/src/main/java/org/apache/camel/spi/PropertyConfigurerGetter.java
@@ -38,6 +38,20 @@ public interface PropertyConfigurerGetter {
     Map<String, Object> getAllOptions(Object target);
 
     /**
+     * Gets the nested class type an option supports (such as list, map, or 
arrays)
+     *
+     * For maps, then the nested type returned is the type of the value in the 
map (not the map key type).
+     *
+     * @param target  the target instance such as {@link 
org.apache.camel.Endpoint} or {@link org.apache.camel.Component}.
+     * @param name          the property name
+     * @param ignoreCase    whether to ignore case for matching the property 
name
+     * @return the nested class type, or <tt>null</tt> if the option does not 
has nested types or not possible to resolve.
+     */
+    default Object getOptionNestedType(Object target, String name, boolean 
ignoreCase) {
+        return null;
+    }
+
+    /**
      * Gets the property value
      *
      * @param target  the target instance such as {@link 
org.apache.camel.Endpoint} or {@link org.apache.camel.Component}.
diff --git 
a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
 
b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
index 2ba64b3..5a9386a 100644
--- 
a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
+++ 
b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
@@ -371,5 +371,14 @@ public class ExtendedCamelContextConfigurer extends 
org.apache.camel.support.com
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean 
ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "globaloptions":
+        case "GlobalOptions": return java.lang.String.class;
+        default: return null;
+        }
+    }
 }
 
diff --git 
a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/RestConfigurationConfigurer.java
 
b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/RestConfigurationConfigurer.java
index 003e3ad..6b5ce20 100644
--- 
a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/RestConfigurationConfigurer.java
+++ 
b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/RestConfigurationConfigurer.java
@@ -176,5 +176,24 @@ public class RestConfigurationConfigurer extends 
org.apache.camel.support.compon
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean 
ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "apiproperties":
+        case "ApiProperties": return java.lang.Object.class;
+        case "componentproperties":
+        case "ComponentProperties": return java.lang.Object.class;
+        case "consumerproperties":
+        case "ConsumerProperties": return java.lang.Object.class;
+        case "corsheaders":
+        case "CorsHeaders": return java.lang.String.class;
+        case "dataformatproperties":
+        case "DataFormatProperties": return java.lang.Object.class;
+        case "endpointproperties":
+        case "EndpointProperties": return java.lang.Object.class;
+        default: return null;
+        }
+    }
 }
 
diff --git 
a/core/camel-core-engine/src/generated/java/org/apache/camel/model/FaultToleranceConfigurationDefinitionConfigurer.java
 
b/core/camel-core-engine/src/generated/java/org/apache/camel/model/FaultToleranceConfigurationDefinitionConfigurer.java
index 9d2c49d..3733dbe 100644
--- 
a/core/camel-core-engine/src/generated/java/org/apache/camel/model/FaultToleranceConfigurationDefinitionConfigurer.java
+++ 
b/core/camel-core-engine/src/generated/java/org/apache/camel/model/FaultToleranceConfigurationDefinitionConfigurer.java
@@ -106,5 +106,12 @@ public class 
FaultToleranceConfigurationDefinitionConfigurer extends org.apache.
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean 
ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        default: return null;
+        }
+    }
 }
 
diff --git 
a/core/camel-core-engine/src/generated/java/org/apache/camel/model/HystrixConfigurationDefinitionConfigurer.java
 
b/core/camel-core-engine/src/generated/java/org/apache/camel/model/HystrixConfigurationDefinitionConfigurer.java
index c2bc575..3072426 100644
--- 
a/core/camel-core-engine/src/generated/java/org/apache/camel/model/HystrixConfigurationDefinitionConfigurer.java
+++ 
b/core/camel-core-engine/src/generated/java/org/apache/camel/model/HystrixConfigurationDefinitionConfigurer.java
@@ -196,5 +196,12 @@ public class HystrixConfigurationDefinitionConfigurer 
extends org.apache.camel.s
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean 
ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        default: return null;
+        }
+    }
 }
 
diff --git 
a/core/camel-core-engine/src/generated/java/org/apache/camel/model/Resilience4jConfigurationDefinitionConfigurer.java
 
b/core/camel-core-engine/src/generated/java/org/apache/camel/model/Resilience4jConfigurationDefinitionConfigurer.java
index f397b9c..6e7b4ed 100644
--- 
a/core/camel-core-engine/src/generated/java/org/apache/camel/model/Resilience4jConfigurationDefinitionConfigurer.java
+++ 
b/core/camel-core-engine/src/generated/java/org/apache/camel/model/Resilience4jConfigurationDefinitionConfigurer.java
@@ -136,5 +136,12 @@ public class Resilience4jConfigurationDefinitionConfigurer 
extends org.apache.ca
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean 
ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        default: return null;
+        }
+    }
 }
 
diff --git 
a/core/camel-main/src/generated/java/org/apache/camel/main/FaultToleranceConfigurationPropertiesConfigurer.java
 
b/core/camel-main/src/generated/java/org/apache/camel/main/FaultToleranceConfigurationPropertiesConfigurer.java
index 2bd6e3e..f96afdd 100644
--- 
a/core/camel-main/src/generated/java/org/apache/camel/main/FaultToleranceConfigurationPropertiesConfigurer.java
+++ 
b/core/camel-main/src/generated/java/org/apache/camel/main/FaultToleranceConfigurationPropertiesConfigurer.java
@@ -101,5 +101,12 @@ public class 
FaultToleranceConfigurationPropertiesConfigurer extends org.apache.
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean 
ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        default: return null;
+        }
+    }
 }
 
diff --git 
a/core/camel-main/src/generated/java/org/apache/camel/main/HealthCheckConfigurationPropertiesConfigurer.java
 
b/core/camel-main/src/generated/java/org/apache/camel/main/HealthCheckConfigurationPropertiesConfigurer.java
index 8e03776..9acf78b 100644
--- 
a/core/camel-main/src/generated/java/org/apache/camel/main/HealthCheckConfigurationPropertiesConfigurer.java
+++ 
b/core/camel-main/src/generated/java/org/apache/camel/main/HealthCheckConfigurationPropertiesConfigurer.java
@@ -56,5 +56,12 @@ public class HealthCheckConfigurationPropertiesConfigurer 
extends org.apache.cam
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean 
ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        default: return null;
+        }
+    }
 }
 
diff --git 
a/core/camel-main/src/generated/java/org/apache/camel/main/HealthConfigurationPropertiesConfigurer.java
 
b/core/camel-main/src/generated/java/org/apache/camel/main/HealthConfigurationPropertiesConfigurer.java
index 6aa5c20..0437f56 100644
--- 
a/core/camel-main/src/generated/java/org/apache/camel/main/HealthConfigurationPropertiesConfigurer.java
+++ 
b/core/camel-main/src/generated/java/org/apache/camel/main/HealthConfigurationPropertiesConfigurer.java
@@ -61,5 +61,14 @@ public class HealthConfigurationPropertiesConfigurer extends 
org.apache.camel.su
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean 
ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "config":
+        case "Config": return 
org.apache.camel.main.HealthCheckConfigurationProperties.class;
+        default: return null;
+        }
+    }
 }
 
diff --git 
a/core/camel-main/src/generated/java/org/apache/camel/main/HystrixConfigurationPropertiesConfigurer.java
 
b/core/camel-main/src/generated/java/org/apache/camel/main/HystrixConfigurationPropertiesConfigurer.java
index 166ddad..495f967 100644
--- 
a/core/camel-main/src/generated/java/org/apache/camel/main/HystrixConfigurationPropertiesConfigurer.java
+++ 
b/core/camel-main/src/generated/java/org/apache/camel/main/HystrixConfigurationPropertiesConfigurer.java
@@ -191,5 +191,12 @@ public class HystrixConfigurationPropertiesConfigurer 
extends org.apache.camel.s
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean 
ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        default: return null;
+        }
+    }
 }
 
diff --git 
a/core/camel-main/src/generated/java/org/apache/camel/main/LraConfigurationPropertiesConfigurer.java
 
b/core/camel-main/src/generated/java/org/apache/camel/main/LraConfigurationPropertiesConfigurer.java
index 700c5d7..ad5fade 100644
--- 
a/core/camel-main/src/generated/java/org/apache/camel/main/LraConfigurationPropertiesConfigurer.java
+++ 
b/core/camel-main/src/generated/java/org/apache/camel/main/LraConfigurationPropertiesConfigurer.java
@@ -56,5 +56,12 @@ public class LraConfigurationPropertiesConfigurer extends 
org.apache.camel.suppo
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean 
ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        default: return null;
+        }
+    }
 }
 
diff --git 
a/core/camel-main/src/generated/java/org/apache/camel/main/MainConfigurationPropertiesConfigurer.java
 
b/core/camel-main/src/generated/java/org/apache/camel/main/MainConfigurationPropertiesConfigurer.java
index 102d328..c861558 100644
--- 
a/core/camel-main/src/generated/java/org/apache/camel/main/MainConfigurationPropertiesConfigurer.java
+++ 
b/core/camel-main/src/generated/java/org/apache/camel/main/MainConfigurationPropertiesConfigurer.java
@@ -451,5 +451,16 @@ public class MainConfigurationPropertiesConfigurer extends 
org.apache.camel.supp
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean 
ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "configurations":
+        case "Configurations": return java.lang.Object.class;
+        case "routesbuilders":
+        case "RoutesBuilders": return org.apache.camel.RoutesBuilder.class;
+        default: return null;
+        }
+    }
 }
 
diff --git 
a/core/camel-main/src/generated/java/org/apache/camel/main/Resilience4jConfigurationPropertiesConfigurer.java
 
b/core/camel-main/src/generated/java/org/apache/camel/main/Resilience4jConfigurationPropertiesConfigurer.java
index 1bb5386..4227b05 100644
--- 
a/core/camel-main/src/generated/java/org/apache/camel/main/Resilience4jConfigurationPropertiesConfigurer.java
+++ 
b/core/camel-main/src/generated/java/org/apache/camel/main/Resilience4jConfigurationPropertiesConfigurer.java
@@ -131,5 +131,12 @@ public class Resilience4jConfigurationPropertiesConfigurer 
extends org.apache.ca
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean 
ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        default: return null;
+        }
+    }
 }
 
diff --git 
a/core/camel-main/src/generated/java/org/apache/camel/main/RestConfigurationPropertiesConfigurer.java
 
b/core/camel-main/src/generated/java/org/apache/camel/main/RestConfigurationPropertiesConfigurer.java
index 275583b..be282d2 100644
--- 
a/core/camel-main/src/generated/java/org/apache/camel/main/RestConfigurationPropertiesConfigurer.java
+++ 
b/core/camel-main/src/generated/java/org/apache/camel/main/RestConfigurationPropertiesConfigurer.java
@@ -176,5 +176,24 @@ public class RestConfigurationPropertiesConfigurer extends 
org.apache.camel.supp
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean 
ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "apiproperties":
+        case "ApiProperties": return java.lang.Object.class;
+        case "componentproperties":
+        case "ComponentProperties": return java.lang.Object.class;
+        case "consumerproperties":
+        case "ConsumerProperties": return java.lang.Object.class;
+        case "corsheaders":
+        case "CorsHeaders": return java.lang.String.class;
+        case "dataformatproperties":
+        case "DataFormatProperties": return java.lang.Object.class;
+        case "endpointproperties":
+        case "EndpointProperties": return java.lang.Object.class;
+        default: return null;
+        }
+    }
 }
 
diff --git 
a/core/camel-main/src/generated/java/org/apache/camel/main/ThreadPoolConfigurationPropertiesConfigurer.java
 
b/core/camel-main/src/generated/java/org/apache/camel/main/ThreadPoolConfigurationPropertiesConfigurer.java
index a78e807..d7b70c4 100644
--- 
a/core/camel-main/src/generated/java/org/apache/camel/main/ThreadPoolConfigurationPropertiesConfigurer.java
+++ 
b/core/camel-main/src/generated/java/org/apache/camel/main/ThreadPoolConfigurationPropertiesConfigurer.java
@@ -76,5 +76,14 @@ public class ThreadPoolConfigurationPropertiesConfigurer 
extends org.apache.came
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean 
ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "config":
+        case "Config": return 
org.apache.camel.main.ThreadPoolProfileConfigurationProperties.class;
+        default: return null;
+        }
+    }
 }
 
diff --git 
a/core/camel-main/src/test/java/org/apache/camel/main/MySecondBarConfigurer.java
 
b/core/camel-main/src/test/java/org/apache/camel/main/MySecondBarConfigurer.java
index d31f486..323fb8e 100644
--- 
a/core/camel-main/src/test/java/org/apache/camel/main/MySecondBarConfigurer.java
+++ 
b/core/camel-main/src/test/java/org/apache/camel/main/MySecondBarConfigurer.java
@@ -41,5 +41,14 @@ public class MySecondBarConfigurer extends 
org.apache.camel.support.component.Pr
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean 
ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "names":
+        case "Names": return java.lang.String.class;
+        default: return null;
+        }
+    }
 }
 
diff --git 
a/core/camel-main/src/test/java/org/apache/camel/main/MySecondFooConfigurer.java
 
b/core/camel-main/src/test/java/org/apache/camel/main/MySecondFooConfigurer.java
index 5044c1f..b14c7df 100644
--- 
a/core/camel-main/src/test/java/org/apache/camel/main/MySecondFooConfigurer.java
+++ 
b/core/camel-main/src/test/java/org/apache/camel/main/MySecondFooConfigurer.java
@@ -41,5 +41,14 @@ public class MySecondFooConfigurer extends 
org.apache.camel.support.component.Pr
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean 
ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "bars":
+        case "Bars": return org.apache.camel.main.MySecondBar.class;
+        default: return null;
+        }
+    }
 }
 
diff --git 
a/core/camel-support/src/generated/java/org/apache/camel/support/processor/DefaultExchangeFormatterConfigurer.java
 
b/core/camel-support/src/generated/java/org/apache/camel/support/processor/DefaultExchangeFormatterConfigurer.java
index a1d77ec..0126166 100644
--- 
a/core/camel-support/src/generated/java/org/apache/camel/support/processor/DefaultExchangeFormatterConfigurer.java
+++ 
b/core/camel-support/src/generated/java/org/apache/camel/support/processor/DefaultExchangeFormatterConfigurer.java
@@ -121,5 +121,12 @@ public class DefaultExchangeFormatterConfigurer extends 
org.apache.camel.support
         default: return null;
         }
     }
+
+    @Override
+    public Object getOptionNestedType(Object target, String name, boolean 
ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        default: return null;
+        }
+    }
 }
 
diff --git 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGenerateConfigurerMojo.java
 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGenerateConfigurerMojo.java
index 12fc5a5..2a69649 100644
--- 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGenerateConfigurerMojo.java
+++ 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGenerateConfigurerMojo.java
@@ -39,6 +39,7 @@ import java.util.Set;
 
 import org.apache.camel.tooling.model.BaseOptionModel;
 import org.apache.camel.tooling.util.ReflectionHelper;
+import org.apache.camel.tooling.util.Strings;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
@@ -102,6 +103,11 @@ public abstract class AbstractGenerateConfigurerMojo 
extends AbstractGeneratorMo
             }
             setGetterMethod(getter);
         }
+
+        public void setNestedType(String nestedType) {
+            // trick to use deprecation note for nested type
+            setDeprecationNote(nestedType);
+        }
     }
 
     public AbstractGenerateConfigurerMojo() {
@@ -303,9 +309,12 @@ public abstract class AbstractGenerateConfigurerMojo 
extends AbstractGeneratorMo
                         // ignore as its then assumed to be get
                     }
                 }
+
+                Option option = null;
                 String t = Character.toUpperCase(m.getName().charAt(3)) + 
m.getName().substring(3 + 1);
                 if (names.add(t)) {
-                    answer.add(new Option(t, type, getter));
+                    option = new Option(t, type, getter);
+                    answer.add(option);
                 } else {
                     boolean replace = false;
                     // try to find out what the real type is of the 
correspondent field so we chose among the clash
@@ -316,7 +325,25 @@ public abstract class AbstractGenerateConfigurerMojo 
extends AbstractGeneratorMo
                     }
                     if (replace) {
                         answer.removeIf(o -> o.getName().equals(t));
-                        answer.add(new Option(t, type, getter));
+                        option = new Option(t, type, getter);
+                        answer.add(option);
+                    }
+                }
+
+                if (option != null) {
+                    String desc = type.isArray() ? 
type.getComponentType().getName() : m.toGenericString();
+                    if (desc.contains("<") && desc.contains(">")) {
+                        desc = Strings.between(desc, "<", ">");
+                        // if its a map then it has a key/value, so we only 
want the last part
+                        int pos = desc.indexOf(',');
+                        if (pos != -1) {
+                            desc = desc.substring(pos + 1);
+                        }
+                        desc = desc.replace('$', '.');
+                        desc = desc.trim();
+                        if (!desc.isEmpty()) {
+                            option.setNestedType(desc);
+                        }
                     }
                 }
             }
diff --git 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PropertyConfigurerGenerator.java
 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PropertyConfigurerGenerator.java
index fdf60c0..f22f94e 100644
--- 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PropertyConfigurerGenerator.java
+++ 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PropertyConfigurerGenerator.java
@@ -135,6 +135,34 @@ public final class PropertyConfigurerGenerator {
                 w.write("        }\n");
             }
             w.write("    }\n");
+
+            // nested type was stored in deprecation note as we use 
BaseOptionModel to hold the option data
+            boolean hasNestedTypes = 
options.stream().map(BaseOptionModel::getDeprecationNote).anyMatch(s -> s != 
null && !s.trim().isEmpty());
+            if (hasNestedTypes) {
+                w.write("\n");
+                w.write("    @Override\n");
+                w.write("    public Object getOptionNestedType(Object target, 
String name, boolean ignoreCase) {\n");
+                if (!options.isEmpty()) {
+                    w.write("        switch (ignoreCase ? name.toLowerCase() : 
name) {\n");
+                    for (BaseOptionModel option : options) {
+                        String nestedType = option.getDeprecationNote();
+                        if (nestedType != null && !nestedType.isEmpty()) {
+                            nestedType = nestedType.replace('$', '.');
+                            if 
(!option.getName().toLowerCase().equals(option.getName())) {
+                                w.write(String.format("        case 
\"%s\":\n", option.getName().toLowerCase()));
+                            }
+                            w.write(String.format("        case \"%s\": return 
%s.class;\n", option.getName(), nestedType));
+                        }
+                    }
+                    if (hasSuper) {
+                        w.write("        default: return 
super.getOptionNestedType(target, name, ignoreCase);\n");
+                    } else {
+                        w.write("        default: return null;\n");
+                    }
+                    w.write("        }\n");
+                }
+                w.write("    }\n");
+            }
         }
 
         w.write("}\n");

Reply via email to