You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2020/12/11 15:43:05 UTC
[isis] branch master updated: ISIS-2473: j2adoc: add support for
field and enum constant processing
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push:
new be33aaf ISIS-2473: j2adoc: add support for field and enum constant processing
be33aaf is described below
commit be33aaf4a24ccbf50876ee71de9d37c56198a3c9
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Dec 11 16:42:48 2020 +0100
ISIS-2473: j2adoc: add support for field and enum constant processing
---
.../services/wrapper/control/ExecutionMode.java | 4 --
.../org/apache/isis/tooling/j2adoc/J2AdocUnit.java | 11 ++-
.../tooling/j2adoc/convert/J2AdocConverter.java | 7 +-
.../j2adoc/convert/J2AdocConverterDefault.java | 81 +++++++++++++++++-----
.../isis/tooling/j2adoc/format/UnitFormatter.java | 10 +++
.../j2adoc/format/UnitFormatterAbstract.java | 20 ++++++
.../j2adoc/format/UnitFormatterCompact.java | 12 ++++
.../UnitFormatterWithSourceAndFootNotes.java | 24 +++++++
.../isis/tooling/j2adoc/test/J2AdocTest.java | 2 +-
.../tooling/javamodel/ast/AnyTypeDeclaration.java | 32 ++++++---
.../ast/ClassOrInterfaceDeclarations.java | 26 +++++++
.../javamodel/ast/ConstructorDeclarations.java | 45 +++++++++---
...arations.java => EnumConstantDeclarations.java} | 25 ++-----
...faceDeclarations.java => EnumDeclarations.java} | 46 ++++++++++--
.../tooling/javamodel/ast/FieldDeclarations.java | 74 ++++++++++++++++++++
.../isis/tooling/javamodel/ast/Javadocs.java | 19 +++++
.../tooling/javamodel/ast/MethodDeclarations.java | 52 ++++++++++----
.../tooling/javamodel/ast/TypeDeclarations.java | 7 ++
.../isis/tooling/javamodel/test/AnalyzerTest.java | 4 +-
19 files changed, 421 insertions(+), 80 deletions(-)
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/wrapper/control/ExecutionMode.java b/api/applib/src/main/java/org/apache/isis/applib/services/wrapper/control/ExecutionMode.java
index d5db4b5..4fd7081 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/wrapper/control/ExecutionMode.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/wrapper/control/ExecutionMode.java
@@ -21,9 +21,6 @@ package org.apache.isis.applib.services.wrapper.control;
import org.apache.isis.applib.services.wrapper.WrapperFactory;
import org.apache.isis.commons.collections.ImmutableEnumSet;
-import lombok.AccessLevel;
-import lombok.RequiredArgsConstructor;
-
/**
* Whether interactions with the wrapper are actually passed onto the
* underlying domain object.
@@ -32,7 +29,6 @@ import lombok.RequiredArgsConstructor;
*
* @since 2.0 {@index}
*/
-@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
public enum ExecutionMode {
/**
* Skip all business rules.
diff --git a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2AdocUnit.java b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2AdocUnit.java
index 8ccff38..46dd429 100644
--- a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2AdocUnit.java
+++ b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2AdocUnit.java
@@ -24,6 +24,8 @@ import java.util.stream.Stream;
import com.github.javaparser.StaticJavaParser;
import com.github.javaparser.ast.body.ConstructorDeclaration;
+import com.github.javaparser.ast.body.EnumConstantDeclaration;
+import com.github.javaparser.ast.body.FieldDeclaration;
import com.github.javaparser.ast.body.MethodDeclaration;
import com.github.javaparser.javadoc.Javadoc;
@@ -88,6 +90,14 @@ public final class J2AdocUnit {
public String getDeclarationKeyword() {
return atd.getKind().name().toLowerCase();
}
+
+ public Can<EnumConstantDeclaration> getEnumConstantDeclarations() {
+ return atd.getEnumConstantDeclarations();
+ }
+
+ public Can<FieldDeclaration> getPublicFieldDeclarations() {
+ return atd.getPublicFieldDeclarations();
+ }
public Can<ConstructorDeclaration> getPublicConstructorDeclarations() {
return atd.getPublicConstructorDeclarations();
@@ -102,7 +112,6 @@ public final class J2AdocUnit {
public String getAsciiDocXref(
final @NonNull J2AdocContext j2aContext) {
-
return j2aContext.getConverter().xref(this);
}
diff --git a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/convert/J2AdocConverter.java b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/convert/J2AdocConverter.java
index 6e24b9b..930840f 100644
--- a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/convert/J2AdocConverter.java
+++ b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/convert/J2AdocConverter.java
@@ -19,6 +19,8 @@
package org.apache.isis.tooling.j2adoc.convert;
import com.github.javaparser.ast.body.ConstructorDeclaration;
+import com.github.javaparser.ast.body.EnumConstantDeclaration;
+import com.github.javaparser.ast.body.FieldDeclaration;
import com.github.javaparser.ast.body.MethodDeclaration;
import com.github.javaparser.javadoc.Javadoc;
@@ -31,6 +33,10 @@ public interface J2AdocConverter {
String javadoc(Javadoc javadoc, int level);
+ String enumConstantDeclaration(EnumConstantDeclaration ecd);
+
+ String fieldDeclaration(FieldDeclaration fd);
+
String constructorDeclaration(ConstructorDeclaration cd);
String methodDeclaration(MethodDeclaration md);
@@ -42,7 +48,6 @@ public interface J2AdocConverter {
public static J2AdocConverter createDefault(final @NonNull J2AdocContext context) {
return J2AdocConverterDefault.of(context);
}
-
}
diff --git a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/convert/J2AdocConverterDefault.java b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/convert/J2AdocConverterDefault.java
index 305971e..ac2a06f 100644
--- a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/convert/J2AdocConverterDefault.java
+++ b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/convert/J2AdocConverterDefault.java
@@ -19,11 +19,13 @@
package org.apache.isis.tooling.j2adoc.convert;
import java.util.stream.Collectors;
+import java.util.stream.Stream;
import javax.annotation.Nullable;
-import com.github.javaparser.ast.NodeList;
import com.github.javaparser.ast.body.ConstructorDeclaration;
+import com.github.javaparser.ast.body.EnumConstantDeclaration;
+import com.github.javaparser.ast.body.FieldDeclaration;
import com.github.javaparser.ast.body.MethodDeclaration;
import com.github.javaparser.ast.body.Parameter;
import com.github.javaparser.ast.expr.SimpleName;
@@ -42,7 +44,10 @@ import org.apache.isis.commons.collections.Can;
import org.apache.isis.commons.internal._Constants;
import org.apache.isis.tooling.j2adoc.J2AdocContext;
import org.apache.isis.tooling.j2adoc.J2AdocUnit;
+import org.apache.isis.tooling.javamodel.ast.ConstructorDeclarations;
+import org.apache.isis.tooling.javamodel.ast.FieldDeclarations;
import org.apache.isis.tooling.javamodel.ast.Javadocs;
+import org.apache.isis.tooling.javamodel.ast.MethodDeclarations;
import org.apache.isis.tooling.model4adoc.AsciiDocFactory;
import org.apache.isis.tooling.model4adoc.AsciiDocWriter;
@@ -54,6 +59,47 @@ import lombok.val;
final class J2AdocConverterDefault implements J2AdocConverter {
private final J2AdocContext j2aContext;
+
+ @Override
+ public String enumConstantDeclaration(final @NonNull EnumConstantDeclaration ecd) {
+ val isDeprecated = ecd.getAnnotations().stream()
+ .anyMatch(a->a.getNameAsString().equals("Deprecated"))
+ || ecd.getJavadoc()
+ .map(Javadocs::hasDeprecated)
+ .orElse(false);
+
+ val memberNameFormat = isDeprecated
+ ? j2aContext.getDeprecatedStaticMemberNameFormat()
+ : j2aContext.getStaticMemberNameFormat();
+
+ val enumConstFormat = j2aContext.getFormatter().getEnumConstantFormat();
+
+ return String.format(enumConstFormat,
+ String.format(memberNameFormat, ecd.getNameAsString()));
+ }
+
+ @Override
+ public String fieldDeclaration(final @NonNull FieldDeclaration fd) {
+ val isDeprecated = fd.getAnnotations().stream()
+ .anyMatch(a->a.getNameAsString().equals("Deprecated"))
+ || fd.getJavadoc()
+ .map(Javadocs::hasDeprecated)
+ .orElse(false);
+
+ val memberNameFormat = isDeprecated
+ ? fd.isStatic()
+ ? j2aContext.getDeprecatedStaticMemberNameFormat()
+ : j2aContext.getDeprecatedMemberNameFormat()
+ : fd.isStatic()
+ ? j2aContext.getStaticMemberNameFormat()
+ : j2aContext.getMemberNameFormat();
+
+ val fieldFormat = j2aContext.getFormatter().getFieldFormat();
+
+ return String.format(fieldFormat,
+ type(fd.getCommonType()),
+ String.format(memberNameFormat, FieldDeclarations.toNormalizedFieldDeclaration(fd)));
+ }
@Override
public String constructorDeclaration(final @NonNull ConstructorDeclaration cd) {
@@ -71,19 +117,18 @@ final class J2AdocConverterDefault implements J2AdocConverter {
? j2aContext.getStaticMemberNameFormat()
: j2aContext.getMemberNameFormat();
- val isGenericMember = cd.getTypeParameters().isNonEmpty();
+ val typeParams = ConstructorDeclarations.getTypeParameters(cd);
+
+ val isGenericMember = !typeParams.isEmpty();
val constructorFormat = isGenericMember
? j2aContext.getFormatter().getGenericConstructorFormat()
: j2aContext.getFormatter().getConstructorFormat();
val args = Can.<Object>of(
- isGenericMember ? typeParamters(cd.getTypeParameters()) : null, // Cans do ignored null
- String.format(memberNameFormat, cd.getNameAsString()),
- cd.getParameters()
- .stream()
- .map(this::parameterDeclaration)
- .collect(Collectors.joining(", "))
+ isGenericMember ? typeParamters(typeParams) : null, // Cans do ignored null
+ String.format(memberNameFormat, cd.getNameAsString()),
+ parameters(cd.getParameters().stream())
);
return String.format(constructorFormat, args.toArray(_Constants.emptyObjects));
@@ -106,28 +151,32 @@ final class J2AdocConverterDefault implements J2AdocConverter {
? j2aContext.getStaticMemberNameFormat()
: j2aContext.getMemberNameFormat();
- val isGenericMember = md.getTypeParameters().isNonEmpty();
+ val typeParams = MethodDeclarations.getTypeParameters(md);
+
+ val isGenericMember = !typeParams.isEmpty();
val methodFormat = isGenericMember
? j2aContext.getFormatter().getGenericMethodFormat()
: j2aContext.getFormatter().getMethodFormat();
val args = Can.<Object>of(
- isGenericMember ? typeParamters(md.getTypeParameters()) : null, // Cans do ignored null
+ isGenericMember ? typeParamters(typeParams) : null, // Cans do ignored null
type(md.getType()),
String.format(memberNameFormat, md.getNameAsString()),
- md.getParameters()
- .stream()
- .map(this::parameterDeclaration)
- .collect(Collectors.joining(", "))
+ parameters(md.getParameters().stream())
);
return String.format(methodFormat, args.toArray(_Constants.emptyObjects));
}
-
- public String typeParamters(final @Nullable NodeList<TypeParameter> typeParamters) {
+ public String parameters(final @NonNull Stream<Parameter> parameterStream) {
+ return parameterStream
+ .map(this::parameterDeclaration)
+ .collect(Collectors.joining(", "));
+ }
+
+ public String typeParamters(final @Nullable Can<TypeParameter> typeParamters) {
if(typeParamters == null
|| typeParamters.isEmpty()) {
return "";
diff --git a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/format/UnitFormatter.java b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/format/UnitFormatter.java
index e1c8239..5018b5d 100644
--- a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/format/UnitFormatter.java
+++ b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/format/UnitFormatter.java
@@ -28,6 +28,16 @@ public interface UnitFormatter
extends Function<J2AdocUnit, Document> {
/**
+ * name
+ */
+ String getEnumConstantFormat();
+
+ /**
+ * type | name
+ */
+ String getFieldFormat();
+
+ /**
* name | param-list
*/
String getConstructorFormat();
diff --git a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/format/UnitFormatterAbstract.java b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/format/UnitFormatterAbstract.java
index 98414ab..4293a75 100644
--- a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/format/UnitFormatterAbstract.java
+++ b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/format/UnitFormatterAbstract.java
@@ -59,6 +59,26 @@ implements UnitFormatter {
val sb = new StringBuilder();
+ unit.getEnumConstantDeclarations().forEach(ecd->{
+ ecd.getJavadoc()
+ .ifPresent(javadoc->{
+ sb.append(String.format(getContext().getFormatter().getMemberDescriptionFormat(),
+ getConverter().enumConstantDeclaration(ecd),
+ getConverter().javadoc(javadoc, 1)));
+ });
+ });
+
+ unit.getPublicFieldDeclarations().forEach(fd->{
+
+ fd.getJavadoc()
+ .ifPresent(javadoc->{
+ sb.append(String.format(getContext().getFormatter().getMemberDescriptionFormat(),
+ getConverter().fieldDeclaration(fd),
+ getConverter().javadoc(javadoc, 1)));
+ });
+
+ });
+
unit.getPublicConstructorDeclarations().forEach(cd->{
cd.getJavadoc()
diff --git a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/format/UnitFormatterCompact.java b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/format/UnitFormatterCompact.java
index 03e0ff6..ca9946b 100644
--- a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/format/UnitFormatterCompact.java
+++ b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/format/UnitFormatterCompact.java
@@ -28,6 +28,16 @@ extends UnitFormatterAbstract {
}
@Override
+ public String getEnumConstantFormat() {
+ return "`%s`";
+ }
+
+ @Override
+ public String getFieldFormat() {
+ return "`%1$s %2$s`";
+ }
+
+ @Override
public String getConstructorFormat() {
return "`%1$s(%2$s)`";
}
@@ -52,4 +62,6 @@ extends UnitFormatterAbstract {
return "\n* %s\n%s\n";
}
+
+
}
diff --git a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/format/UnitFormatterWithSourceAndFootNotes.java b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/format/UnitFormatterWithSourceAndFootNotes.java
index 51e6357..b138e58 100644
--- a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/format/UnitFormatterWithSourceAndFootNotes.java
+++ b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/format/UnitFormatterWithSourceAndFootNotes.java
@@ -23,6 +23,8 @@ import java.util.Optional;
import org.apache.isis.tooling.j2adoc.J2AdocContext;
import org.apache.isis.tooling.j2adoc.J2AdocUnit;
import org.apache.isis.tooling.javamodel.ast.ConstructorDeclarations;
+import org.apache.isis.tooling.javamodel.ast.EnumConstantDeclarations;
+import org.apache.isis.tooling.javamodel.ast.FieldDeclarations;
import org.apache.isis.tooling.javamodel.ast.MethodDeclarations;
import org.apache.isis.tooling.model4adoc.AsciiDocFactory;
@@ -43,6 +45,18 @@ extends UnitFormatterAbstract {
unit.getDeclarationKeyword(),
unit.getSimpleName()));
+ unit.getEnumConstantDeclarations().forEach(ecd->{
+ java.append(String.format("\n %s // <.>\n",
+ EnumConstantDeclarations.toNormalizedEnumConstantDeclaration(ecd)));
+ });
+
+ unit.getPublicFieldDeclarations().forEach(fd->{
+
+ java.append(String.format("\n %s // <.>\n",
+ FieldDeclarations.toNormalizedFieldDeclaration(fd)));
+
+ });
+
unit.getPublicConstructorDeclarations().forEach(cd->{
java.append(String.format("\n %s // <.>\n",
@@ -64,8 +78,18 @@ extends UnitFormatterAbstract {
AsciiDocFactory.SourceFactory.java(java.toString(), unit.getName()));
}
+
+ @Override
+ public String getEnumConstantFormat() {
+ return "`%s`";
+ }
@Override
+ public String getFieldFormat() {
+ return "`%s %s`";
+ }
+
+ @Override
public String getConstructorFormat() {
return "`%s(%s)`";
}
diff --git a/tooling/java2adoc/src/test/java/org/apache/isis/tooling/j2adoc/test/J2AdocTest.java b/tooling/java2adoc/src/test/java/org/apache/isis/tooling/j2adoc/test/J2AdocTest.java
index 775c508..b673a6f 100644
--- a/tooling/java2adoc/src/test/java/org/apache/isis/tooling/j2adoc/test/J2AdocTest.java
+++ b/tooling/java2adoc/src/test/java/org/apache/isis/tooling/j2adoc/test/J2AdocTest.java
@@ -59,7 +59,7 @@ class J2AdocTest {
analyzerConfig.getSources(JAVA)
.stream()
.filter(source->source.toString().contains("ExecutionMode"))
- .peek(source->System.out.println("parsing source: " + source))
+ //.peek(source->System.out.println("parsing source: " + source))
.forEach(j2aContext::add);
j2aContext.streamUnits()
diff --git a/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/AnyTypeDeclaration.java b/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/AnyTypeDeclaration.java
index 1c8b190..2b375fc 100644
--- a/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/AnyTypeDeclaration.java
+++ b/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/AnyTypeDeclaration.java
@@ -19,12 +19,13 @@
package org.apache.isis.tooling.javamodel.ast;
import java.util.Optional;
-import java.util.stream.Stream;
import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
import com.github.javaparser.ast.body.ConstructorDeclaration;
+import com.github.javaparser.ast.body.EnumConstantDeclaration;
import com.github.javaparser.ast.body.EnumDeclaration;
+import com.github.javaparser.ast.body.FieldDeclaration;
import com.github.javaparser.ast.body.MethodDeclaration;
import com.github.javaparser.ast.body.TypeDeclaration;
import com.github.javaparser.ast.nodeTypes.NodeWithSimpleName;
@@ -40,7 +41,7 @@ import lombok.RequiredArgsConstructor;
@Getter
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
-public class AnyTypeDeclaration {
+public final class AnyTypeDeclaration {
public static enum Kind {
CLASS,
@@ -57,9 +58,12 @@ public class AnyTypeDeclaration {
private final ClassOrInterfaceDeclaration classOrInterfaceDeclaration;
private final EnumDeclaration enumDeclaration;
+ private final Can<EnumConstantDeclaration> enumConstantDeclarations;
+ private final Can<FieldDeclaration> publicFieldDeclarations;
private final Can<ConstructorDeclaration> publicConstructorDeclarations;
private final Can<MethodDeclaration> publicMethodDeclarations;
+
// -- FACTORIES
public static AnyTypeDeclaration of(
@@ -69,6 +73,10 @@ public class AnyTypeDeclaration {
classOrInterfaceDeclaration,
classOrInterfaceDeclaration,
null,
+ Can.empty(),
+ ClassOrInterfaceDeclarations.streamPublicFieldDeclarations(classOrInterfaceDeclaration)
+ .filter(Javadocs::presentAndNotHidden)
+ .collect(Can.toCan()),
ClassOrInterfaceDeclarations.streamPublicConstructorDeclarations(classOrInterfaceDeclaration)
.filter(Javadocs::presentAndNotHidden)
.collect(Can.toCan()),
@@ -85,8 +93,19 @@ public class AnyTypeDeclaration {
enumDeclaration,
null,
enumDeclaration,
- Can.empty(),
- Can.empty());
+ EnumDeclarations.streamEnumConstantDeclarations(enumDeclaration)
+ .filter(Javadocs::presentAndNotHidden)
+ .collect(Can.toCan()),
+ EnumDeclarations.streamPublicFieldDeclarations(enumDeclaration)
+ .filter(Javadocs::presentAndNotHidden)
+ .collect(Can.toCan()),
+ EnumDeclarations.streamPublicConstructorDeclarations(enumDeclaration)
+ .filter(Javadocs::presentAndNotHidden)
+ .collect(Can.toCan()),
+ EnumDeclarations.streamPublicMethodDeclarations(enumDeclaration)
+ .filter(Javadocs::presentAndNotHidden)
+ .collect(Can.toCan())
+ );
}
public static AnyTypeDeclaration auto(
@@ -103,10 +122,6 @@ public class AnyTypeDeclaration {
// -- UTILITY
- public Stream<MethodDeclaration> streamMethodDeclarations() {
- return td.getMethods().stream();
- }
-
public Optional<Javadoc> getJavadoc() {
return td.getJavadoc();
}
@@ -139,5 +154,6 @@ public class AnyTypeDeclaration {
}
return name;
}
+
}
diff --git a/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/ClassOrInterfaceDeclarations.java b/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/ClassOrInterfaceDeclarations.java
index 42c49e0..3e44f6c 100644
--- a/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/ClassOrInterfaceDeclarations.java
+++ b/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/ClassOrInterfaceDeclarations.java
@@ -22,12 +22,28 @@ import java.util.stream.Stream;
import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
import com.github.javaparser.ast.body.ConstructorDeclaration;
+import com.github.javaparser.ast.body.FieldDeclaration;
import com.github.javaparser.ast.body.MethodDeclaration;
import lombok.NonNull;
public final class ClassOrInterfaceDeclarations {
+ // -- FIELDS
+
+ public static <T> Stream<FieldDeclaration> streamFieldDeclarations(
+ final @NonNull ClassOrInterfaceDeclaration typeDeclaration) {
+ return typeDeclaration.getFields().stream();
+ }
+
+ public static <T> Stream<FieldDeclaration> streamPublicFieldDeclarations(
+ final @NonNull ClassOrInterfaceDeclaration typeDeclaration) {
+ return streamFieldDeclarations(typeDeclaration)
+ .filter(fd->FieldDeclarations.isEffectivePublic(fd, typeDeclaration));
+ }
+
+ // -- CONSTRUCTORS
+
public static <T> Stream<ConstructorDeclaration> streamConstructorDeclarations(
final @NonNull ClassOrInterfaceDeclaration typeDeclaration) {
return typeDeclaration.getConstructors().stream();
@@ -39,6 +55,8 @@ public final class ClassOrInterfaceDeclarations {
.filter(cd->ConstructorDeclarations.isEffectivePublic(cd, typeDeclaration));
}
+ // -- METHODS
+
public static <T> Stream<MethodDeclaration> streamMethodDeclarations(
final @NonNull ClassOrInterfaceDeclaration typeDeclaration) {
return typeDeclaration.getMethods().stream();
@@ -50,4 +68,12 @@ public final class ClassOrInterfaceDeclarations {
.filter(md->MethodDeclarations.isEffectivePublic(md, typeDeclaration));
}
+ // -- CONTEXT
+
+ public static boolean isEffectivePublic(final @NonNull ClassOrInterfaceDeclaration td) {
+ return !td.isPrivate()
+ && !td.isProtected()
+ ;
+ }
+
}
diff --git a/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/ConstructorDeclarations.java b/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/ConstructorDeclarations.java
index 1048fad..eb26860 100644
--- a/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/ConstructorDeclarations.java
+++ b/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/ConstructorDeclarations.java
@@ -20,31 +20,56 @@ package org.apache.isis.tooling.javamodel.ast;
import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
import com.github.javaparser.ast.body.ConstructorDeclaration;
+import com.github.javaparser.ast.body.EnumDeclaration;
+import com.github.javaparser.ast.type.TypeParameter;
+
+import org.apache.isis.commons.collections.Can;
import lombok.NonNull;
+//TODO effective public might require more context
public final class ConstructorDeclarations {
+ /**
+ * Returns given {@link ConstructorDeclaration} as normal text, without formatting.
+ */
+ public static String toNormalizedConstructorDeclaration(final @NonNull ConstructorDeclaration cd) {
+ return cd.getDeclarationAsString(false, false, true).trim();
+ }
+
+ public static Can<TypeParameter> getTypeParameters(final @NonNull ConstructorDeclaration cd) {
+ return Can.ofStream(cd.getTypeParameters().stream());
+ }
+
public static boolean isEffectivePublic(
- final @NonNull ConstructorDeclaration cd, final @NonNull ClassOrInterfaceDeclaration td) {
+ final @NonNull ConstructorDeclaration cd,
+ final @NonNull ClassOrInterfaceDeclaration context) {
- if(td.isInterface()) {
+ if(!ClassOrInterfaceDeclarations.isEffectivePublic(context)) {
+ return false;
+ }
+ if(context.isInterface()) {
return true;
}
- //TODO effective public requires more context, eg. is the container an interface
return !cd.isPrivate()
&& !cd.isAbstract()
&& !cd.isProtected()
- //&& !md.isDefault()
;
}
-
- /**
- * Returns given {@link ConstructorDeclaration} as normal text, without formatting.
- */
- public static String toNormalizedConstructorDeclaration(final @NonNull ConstructorDeclaration cd) {
- return cd.getDeclarationAsString(false, false, true).trim();
+
+ public static boolean isEffectivePublic(
+ final @NonNull ConstructorDeclaration cd,
+ final @NonNull EnumDeclaration context) {
+
+ if(!EnumDeclarations.isEffectivePublic(context)) {
+ return false;
+ }
+
+ return !cd.isPrivate()
+ && !cd.isAbstract()
+ && !cd.isProtected()
+ ;
}
}
diff --git a/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/TypeDeclarations.java b/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/EnumConstantDeclarations.java
similarity index 56%
copy from tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/TypeDeclarations.java
copy to tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/EnumConstantDeclarations.java
index 66d80eb..06704d3 100644
--- a/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/TypeDeclarations.java
+++ b/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/EnumConstantDeclarations.java
@@ -18,30 +18,17 @@
*/
package org.apache.isis.tooling.javamodel.ast;
-import com.github.javaparser.ast.body.TypeDeclaration;
+import com.github.javaparser.ast.body.EnumConstantDeclaration;
import lombok.NonNull;
-import lombok.val;
-
-public final class TypeDeclarations {
+public final class EnumConstantDeclarations {
+
/**
- * Whether to include given {@link TypeDeclaration} with the index.
- * <p>
- * This is decided base on whether the type's java-doc has a
- * {@literal @since} tag that contains the literal {@literal {@index}}.
+ * Returns given {@link EnumConstantDeclaration} as normal text, without formatting.
*/
- public static boolean hasIndexDirective(final @NonNull TypeDeclaration<?> td) {
- return td.getJavadoc()
- .map(javadoc->{
-
- val toBeIncluded = Javadocs.streamTagContent(javadoc, "since")
- .anyMatch(since->since.toText().contains("{@index}"));
-
- return toBeIncluded;
-
- })
- .orElse(false);
+ public static String toNormalizedEnumConstantDeclaration(final @NonNull EnumConstantDeclaration ecd) {
+ return ecd.toString().trim();
}
}
diff --git a/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/ClassOrInterfaceDeclarations.java b/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/EnumDeclarations.java
similarity index 55%
copy from tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/ClassOrInterfaceDeclarations.java
copy to tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/EnumDeclarations.java
index 42c49e0..a19cd4b 100644
--- a/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/ClassOrInterfaceDeclarations.java
+++ b/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/EnumDeclarations.java
@@ -20,34 +20,68 @@ package org.apache.isis.tooling.javamodel.ast;
import java.util.stream.Stream;
-import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
import com.github.javaparser.ast.body.ConstructorDeclaration;
+import com.github.javaparser.ast.body.EnumConstantDeclaration;
+import com.github.javaparser.ast.body.EnumDeclaration;
+import com.github.javaparser.ast.body.FieldDeclaration;
import com.github.javaparser.ast.body.MethodDeclaration;
import lombok.NonNull;
-public final class ClassOrInterfaceDeclarations {
+public final class EnumDeclarations {
+ // -- ENUM CONSTANTS
+
+ public static <T> Stream<EnumConstantDeclaration> streamEnumConstantDeclarations(
+ final @NonNull EnumDeclaration typeDeclaration) {
+ return typeDeclaration.getEntries().stream();
+ }
+
+ // -- FIELDS
+
+ public static <T> Stream<FieldDeclaration> streamFieldDeclarations(
+ final @NonNull EnumDeclaration typeDeclaration) {
+ return typeDeclaration.getFields().stream();
+ }
+
+ public static <T> Stream<FieldDeclaration> streamPublicFieldDeclarations(
+ final @NonNull EnumDeclaration typeDeclaration) {
+ return streamFieldDeclarations(typeDeclaration)
+ .filter(fd->FieldDeclarations.isEffectivePublic(fd, typeDeclaration));
+ }
+
+ // -- CONSTRUCTORS
+
public static <T> Stream<ConstructorDeclaration> streamConstructorDeclarations(
- final @NonNull ClassOrInterfaceDeclaration typeDeclaration) {
+ final @NonNull EnumDeclaration typeDeclaration) {
return typeDeclaration.getConstructors().stream();
}
public static <T> Stream<ConstructorDeclaration> streamPublicConstructorDeclarations(
- final @NonNull ClassOrInterfaceDeclaration typeDeclaration) {
+ final @NonNull EnumDeclaration typeDeclaration) {
return streamConstructorDeclarations(typeDeclaration)
.filter(cd->ConstructorDeclarations.isEffectivePublic(cd, typeDeclaration));
}
+ // -- METHODS
+
public static <T> Stream<MethodDeclaration> streamMethodDeclarations(
- final @NonNull ClassOrInterfaceDeclaration typeDeclaration) {
+ final @NonNull EnumDeclaration typeDeclaration) {
return typeDeclaration.getMethods().stream();
}
public static <T> Stream<MethodDeclaration> streamPublicMethodDeclarations(
- final @NonNull ClassOrInterfaceDeclaration typeDeclaration) {
+ final @NonNull EnumDeclaration typeDeclaration) {
return streamMethodDeclarations(typeDeclaration)
.filter(md->MethodDeclarations.isEffectivePublic(md, typeDeclaration));
}
+ // -- CONTEXT
+
+ public static boolean isEffectivePublic(final @NonNull EnumDeclaration td) {
+ return !td.isPrivate()
+ && !td.isProtected()
+ ;
+ }
+
}
diff --git a/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/FieldDeclarations.java b/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/FieldDeclarations.java
new file mode 100644
index 0000000..faf18ef
--- /dev/null
+++ b/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/FieldDeclarations.java
@@ -0,0 +1,74 @@
+/*
+ * 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.isis.tooling.javamodel.ast;
+
+import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
+import com.github.javaparser.ast.body.EnumDeclaration;
+import com.github.javaparser.ast.body.FieldDeclaration;
+import com.github.javaparser.ast.type.TypeParameter;
+
+import org.apache.isis.commons.collections.Can;
+
+import lombok.NonNull;
+
+//TODO effective public might require more context
+public final class FieldDeclarations {
+
+ /**
+ * Returns given {@link FieldDeclaration} as normal text, without formatting.
+ */
+ public static String toNormalizedFieldDeclaration(final @NonNull FieldDeclaration fd) {
+ return fd.toString().trim();
+ }
+
+ public static Can<TypeParameter> getTypeParameters(final @NonNull FieldDeclaration fd) {
+ return Can.ofCollection(fd.findAll(TypeParameter.class));
+ }
+
+ // -- CONTEXT
+
+ public static boolean isEffectivePublic(
+ final @NonNull FieldDeclaration fd,
+ final @NonNull ClassOrInterfaceDeclaration context) {
+
+ if(!ClassOrInterfaceDeclarations.isEffectivePublic(context)) {
+ return false;
+ }
+ if(context.isInterface()) {
+ return true;
+ }
+ return !fd.isPrivate()
+ && !fd.isProtected()
+ ;
+ }
+
+ public static boolean isEffectivePublic(
+ final @NonNull FieldDeclaration fd,
+ final @NonNull EnumDeclaration context) {
+
+ if(!EnumDeclarations.isEffectivePublic(context)) {
+ return false;
+ }
+
+ return !fd.isPrivate()
+ && !fd.isProtected()
+ ;
+ }
+
+}
diff --git a/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/Javadocs.java b/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/Javadocs.java
index 472caa1..d9015ee 100644
--- a/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/Javadocs.java
+++ b/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/Javadocs.java
@@ -21,6 +21,8 @@ package org.apache.isis.tooling.javamodel.ast;
import java.util.stream.Stream;
import com.github.javaparser.ast.body.ConstructorDeclaration;
+import com.github.javaparser.ast.body.EnumConstantDeclaration;
+import com.github.javaparser.ast.body.FieldDeclaration;
import com.github.javaparser.ast.body.MethodDeclaration;
import com.github.javaparser.javadoc.Javadoc;
import com.github.javaparser.javadoc.JavadocBlockTag;
@@ -47,6 +49,23 @@ public final class Javadocs {
}
public static boolean presentAndNotHidden(
+ final @NonNull FieldDeclaration fd) {
+
+ return fd.getJavadoc()
+ .map(jd->!hasHidden(jd))
+ .orElse(false);
+ }
+
+ public static boolean presentAndNotHidden(
+ final @NonNull EnumConstantDeclaration ecd) {
+
+ return ecd.getJavadoc()
+ .map(jd->!hasHidden(jd))
+ .orElse(false);
+ }
+
+
+ public static boolean presentAndNotHidden(
final @NonNull ConstructorDeclaration cd) {
return cd.getJavadoc()
diff --git a/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/MethodDeclarations.java b/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/MethodDeclarations.java
index c5a85f0..aad65f1 100644
--- a/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/MethodDeclarations.java
+++ b/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/MethodDeclarations.java
@@ -19,32 +19,58 @@
package org.apache.isis.tooling.javamodel.ast;
import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
+import com.github.javaparser.ast.body.EnumDeclaration;
import com.github.javaparser.ast.body.MethodDeclaration;
+import com.github.javaparser.ast.type.TypeParameter;
+
+import org.apache.isis.commons.collections.Can;
import lombok.NonNull;
+//TODO effective public might require more context
public final class MethodDeclarations {
+
+ /**
+ * Returns given {@link MethodDeclaration} as normal text, without formatting.
+ */
+ public static String toNormalizedMethodDeclaration(final @NonNull MethodDeclaration md) {
+ return md.getDeclarationAsString(false, false, true).trim();
+ }
+
+ public static Can<TypeParameter> getTypeParameters(final @NonNull MethodDeclaration md) {
+ return Can.ofStream(md.getTypeParameters().stream());
+ }
+
public static boolean isEffectivePublic(
- final @NonNull MethodDeclaration md, final @NonNull ClassOrInterfaceDeclaration td) {
-
- if(td.isInterface()) {
+ final @NonNull MethodDeclaration md,
+ final @NonNull ClassOrInterfaceDeclaration context) {
+
+ if(!ClassOrInterfaceDeclarations.isEffectivePublic(context)) {
+ return false;
+ }
+ if(context.isInterface()) {
return true;
}
-
- //TODO effective public requires more context, eg. is the container an interface
+
return !md.isPrivate()
&& !md.isAbstract()
&& !md.isProtected()
- //&& !md.isDefault()
;
}
-
- /**
- * Returns given {@link MethodDeclaration} as normal text, without formatting.
- */
- public static String toNormalizedMethodDeclaration(final @NonNull MethodDeclaration md) {
- return md.getDeclarationAsString(false, false, true).trim();
+
+ public static boolean isEffectivePublic(
+ final @NonNull MethodDeclaration md,
+ final @NonNull EnumDeclaration context) {
+
+ if(!EnumDeclarations.isEffectivePublic(context)) {
+ return false;
+ }
+
+ return !md.isPrivate()
+ && !md.isAbstract()
+ && !md.isProtected()
+ ;
}
-
+
}
diff --git a/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/TypeDeclarations.java b/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/TypeDeclarations.java
index 66d80eb..fbf8eb3 100644
--- a/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/TypeDeclarations.java
+++ b/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/TypeDeclarations.java
@@ -19,6 +19,9 @@
package org.apache.isis.tooling.javamodel.ast;
import com.github.javaparser.ast.body.TypeDeclaration;
+import com.github.javaparser.ast.type.TypeParameter;
+
+import org.apache.isis.commons.collections.Can;
import lombok.NonNull;
import lombok.val;
@@ -44,4 +47,8 @@ public final class TypeDeclarations {
.orElse(false);
}
+ public static Can<TypeParameter> getTypeParameters(final @NonNull TypeDeclaration<?> td) {
+ return Can.ofCollection(td.findAll(TypeParameter.class));
+ }
+
}
diff --git a/tooling/javamodel/src/test/java/org/apache/isis/tooling/javamodel/test/AnalyzerTest.java b/tooling/javamodel/src/test/java/org/apache/isis/tooling/javamodel/test/AnalyzerTest.java
index 5077b4f..7636be7 100644
--- a/tooling/javamodel/src/test/java/org/apache/isis/tooling/javamodel/test/AnalyzerTest.java
+++ b/tooling/javamodel/src/test/java/org/apache/isis/tooling/javamodel/test/AnalyzerTest.java
@@ -24,6 +24,7 @@ import java.util.stream.Stream;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
+import org.apache.isis.commons.collections.Can;
import org.apache.isis.commons.internal.base._Files;
import org.apache.isis.tooling.javamodel.AnalyzerConfigFactory;
import org.apache.isis.tooling.javamodel.ast.AnyTypeDeclaration;
@@ -77,7 +78,8 @@ class AnalyzerTest {
});
})
- .flatMap(AnyTypeDeclaration::streamMethodDeclarations)
+ .map(AnyTypeDeclaration::getPublicMethodDeclarations)
+ .flatMap(Can::stream)
.forEach(md->{
System.out.println("javadoc: " + md.getJavadocComment());