This is an automated email from the ASF dual-hosted git repository.
btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
The following commit(s) were added to refs/heads/master by this push:
new 903902834c JAMES-3896 Fix Mailet doc for non-default constructors
(#1504)
903902834c is described below
commit 903902834c2e317f50e0d88563d9545533132ce8
Author: Benoit TELLIER <[email protected]>
AuthorDate: Mon Mar 27 10:25:51 2023 +0200
JAMES-3896 Fix Mailet doc for non-default constructors (#1504)
---
.../james/mailet/DefaultDescriptorsExtractor.java | 18 ++++++-
.../mailet/DefaultDescriptorsExtractorTest.java | 19 +++++++
.../mailet/constructor/ConstructorMailet.java | 58 ++++++++++++++++++++++
3 files changed, 93 insertions(+), 2 deletions(-)
diff --git
a/mailet/mailetdocs-maven-plugin/src/main/java/org/apache/james/mailet/DefaultDescriptorsExtractor.java
b/mailet/mailetdocs-maven-plugin/src/main/java/org/apache/james/mailet/DefaultDescriptorsExtractor.java
index b78ac1dfe1..57fa2b7bfd 100644
---
a/mailet/mailetdocs-maven-plugin/src/main/java/org/apache/james/mailet/DefaultDescriptorsExtractor.java
+++
b/mailet/mailetdocs-maven-plugin/src/main/java/org/apache/james/mailet/DefaultDescriptorsExtractor.java
@@ -20,6 +20,7 @@
package org.apache.james.mailet;
import java.io.File;
+import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.net.MalformedURLException;
import java.net.URL;
@@ -171,8 +172,9 @@ public class DefaultDescriptorsExtractor {
private Optional<String> fetchInfo(Log log, String nameOfClass, Class<?>
klass, String infoMethodName, Type type) {
try {
- final Object instance =
klass.getDeclaredConstructor().newInstance();
- final String info = (String)
klass.getMethod(infoMethodName).invoke(instance);
+ Object instance = instantiateClass(klass);
+ String info = (String)
klass.getMethod(infoMethodName).invoke(instance);
+
if (info != null && info.length() > 0) {
return Optional.of(info);
}
@@ -184,6 +186,18 @@ public class DefaultDescriptorsExtractor {
return Optional.empty();
}
+ private Object instantiateClass(Class<?> klass) throws
IllegalAccessException, InvocationTargetException, InstantiationException,
NoSuchMethodException {
+ Constructor<?>[] constructors = klass.getConstructors();
+ if (constructors.length > 0) {
+ Constructor<?> constructor = constructors[0];
+ Object[] studentObjects = new
Object[constructor.getParameterCount()];
+
+ return constructor.newInstance(studentObjects);
+ }
+ return klass.getDeclaredConstructor()
+ .newInstance();
+ }
+
private boolean isExperimental(JavaClass javaClass) {
return javaClass.getAnnotations()
diff --git
a/mailet/mailetdocs-maven-plugin/src/test/java/org/apache/james/mailet/DefaultDescriptorsExtractorTest.java
b/mailet/mailetdocs-maven-plugin/src/test/java/org/apache/james/mailet/DefaultDescriptorsExtractorTest.java
index 7be8ee03ee..86171f5ec2 100644
---
a/mailet/mailetdocs-maven-plugin/src/test/java/org/apache/james/mailet/DefaultDescriptorsExtractorTest.java
+++
b/mailet/mailetdocs-maven-plugin/src/test/java/org/apache/james/mailet/DefaultDescriptorsExtractorTest.java
@@ -71,6 +71,25 @@ class DefaultDescriptorsExtractorTest {
assertThat(descriptors).containsOnly(experimentalMailet,
nonExperimentalMailet);
}
+
+ @Test
+ void extractShouldSupportArgumentsInConstructor() {
+ when(mavenProject.getCompileSourceRoots())
+
.thenReturn(ImmutableList.of("src/test/java/org/apache/james/mailet/constructor"));
+
+ List<MailetMatcherDescriptor> descriptors =
testee.extract(mavenProject, log)
+ .descriptors();
+
+ MailetMatcherDescriptor mailet = MailetMatcherDescriptor.builder()
+ .name("ConstructorMailet")
+
.fullyQualifiedClassName("org.apache.james.mailet.constructor.ConstructorMailet")
+ .type(Type.MAILET)
+ .info("info")
+ .noClassDocs()
+ .isNotExperimental();
+
+ assertThat(descriptors).containsOnly(mailet);
+ }
@Test
void extractShouldExcludeAnnotatedClassesWhenScanningMailets() {
diff --git
a/mailet/mailetdocs-maven-plugin/src/test/java/org/apache/james/mailet/constructor/ConstructorMailet.java
b/mailet/mailetdocs-maven-plugin/src/test/java/org/apache/james/mailet/constructor/ConstructorMailet.java
new file mode 100644
index 0000000000..35a8fca48c
--- /dev/null
+++
b/mailet/mailetdocs-maven-plugin/src/test/java/org/apache/james/mailet/constructor/ConstructorMailet.java
@@ -0,0 +1,58 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.james.mailet.constructor;
+
+import javax.mail.MessagingException;
+
+import org.apache.mailet.Experimental;
+import org.apache.mailet.Mail;
+import org.apache.mailet.Mailet;
+import org.apache.mailet.MailetConfig;
+
+public class ConstructorMailet implements Mailet {
+ private final String arg;
+
+ public ConstructorMailet(String arg) {
+ this.arg = arg;
+ }
+
+ @Override
+ public void init(MailetConfig config) throws MessagingException {
+ }
+
+ @Override
+ public void service(Mail mail) throws MessagingException {
+ }
+
+ @Override
+ public void destroy() {
+ }
+
+ @Override
+ public MailetConfig getMailetConfig() {
+ return null;
+ }
+
+ @Override
+ public String getMailetInfo() {
+ return "info";
+ }
+
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]