From c58875e9e002c073c56ce28d9c8445512deda0b2 Mon Sep 17 00:00:00 2001 From: Paul Latzelsperger Date: Wed, 21 Sep 2022 11:50:40 +0200 Subject: [PATCH 1/6] moved all code to sub-module --- autodoc/{ => autodoc-plugin}/build.gradle.kts | 0 .../plugins/AutodocPluginFunctionalTest.java | 0 .../plugins/AutodocPlugin.java | 0 .../plugins/GenerateDocumentationTask.java | 0 .../plugins/AutodocPluginTest.java | 0 autodoc/src/.DS_Store | Bin 6148 -> 0 bytes settings.gradle.kts | 3 ++- 7 files changed, 2 insertions(+), 1 deletion(-) rename autodoc/{ => autodoc-plugin}/build.gradle.kts (100%) rename autodoc/{ => autodoc-plugin}/src/functionalTest/java/org/eclipse/dataspaceconnector/plugins/AutodocPluginFunctionalTest.java (100%) rename autodoc/{ => autodoc-plugin}/src/main/java/org/eclipse/dataspaceconnector/plugins/AutodocPlugin.java (100%) rename autodoc/{ => autodoc-plugin}/src/main/java/org/eclipse/dataspaceconnector/plugins/GenerateDocumentationTask.java (100%) rename autodoc/{ => autodoc-plugin}/src/test/java/org/eclipse/dataspaceconnector/plugins/AutodocPluginTest.java (100%) delete mode 100644 autodoc/src/.DS_Store diff --git a/autodoc/build.gradle.kts b/autodoc/autodoc-plugin/build.gradle.kts similarity index 100% rename from autodoc/build.gradle.kts rename to autodoc/autodoc-plugin/build.gradle.kts diff --git a/autodoc/src/functionalTest/java/org/eclipse/dataspaceconnector/plugins/AutodocPluginFunctionalTest.java b/autodoc/autodoc-plugin/src/functionalTest/java/org/eclipse/dataspaceconnector/plugins/AutodocPluginFunctionalTest.java similarity index 100% rename from autodoc/src/functionalTest/java/org/eclipse/dataspaceconnector/plugins/AutodocPluginFunctionalTest.java rename to autodoc/autodoc-plugin/src/functionalTest/java/org/eclipse/dataspaceconnector/plugins/AutodocPluginFunctionalTest.java diff --git a/autodoc/src/main/java/org/eclipse/dataspaceconnector/plugins/AutodocPlugin.java b/autodoc/autodoc-plugin/src/main/java/org/eclipse/dataspaceconnector/plugins/AutodocPlugin.java similarity index 100% rename from autodoc/src/main/java/org/eclipse/dataspaceconnector/plugins/AutodocPlugin.java rename to autodoc/autodoc-plugin/src/main/java/org/eclipse/dataspaceconnector/plugins/AutodocPlugin.java diff --git a/autodoc/src/main/java/org/eclipse/dataspaceconnector/plugins/GenerateDocumentationTask.java b/autodoc/autodoc-plugin/src/main/java/org/eclipse/dataspaceconnector/plugins/GenerateDocumentationTask.java similarity index 100% rename from autodoc/src/main/java/org/eclipse/dataspaceconnector/plugins/GenerateDocumentationTask.java rename to autodoc/autodoc-plugin/src/main/java/org/eclipse/dataspaceconnector/plugins/GenerateDocumentationTask.java diff --git a/autodoc/src/test/java/org/eclipse/dataspaceconnector/plugins/AutodocPluginTest.java b/autodoc/autodoc-plugin/src/test/java/org/eclipse/dataspaceconnector/plugins/AutodocPluginTest.java similarity index 100% rename from autodoc/src/test/java/org/eclipse/dataspaceconnector/plugins/AutodocPluginTest.java rename to autodoc/autodoc-plugin/src/test/java/org/eclipse/dataspaceconnector/plugins/AutodocPluginTest.java diff --git a/autodoc/src/.DS_Store b/autodoc/src/.DS_Store deleted file mode 100644 index 062839beae400a86cd7b13c8be2ea19a91d2fc5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKOHRWu5FLkrf~Y*f^q<8%cm%5Dv|7S18x9U;1F;QBvu@QHy)EF zN>Bw0gwTvMe$IF%Gk%U@n~2P)oDGQvL=-_8gKacD!sDzR3A|+&Xxuvrno~{-x}db< zt%kqI0I%I1T~Ucun^JTA&ghcvs7SAe<7u8PrTDFbb^ckNB$G6sz%P1vdw4p!eLh(q zGy8VT@}^lAf4>w`hA(eUi+0VMug$S$efP(YpY_$TS-z^JZ@it?O5UQ6tDtmw{a7>a z`+g&DJ-*7@H{Qp Date: Wed, 21 Sep 2022 12:00:29 +0200 Subject: [PATCH 2/6] adds code from EDC as -core --- autodoc/autodoc-core/build.gradle.kts | 29 +++ .../core/processor/EdcModuleProcessor.java | 198 ++++++++++++++++++ .../AnnotationBooleanValueResolver.java | 29 +++ .../AnnotationClassValuesResolver.java | 39 ++++ .../compiler/AnnotationFunctions.java | 128 +++++++++++ .../compiler/AnnotationLongValueResolver.java | 28 +++ .../AnnotationStringValueResolver.java | 28 +++ .../AnnotationStringValuesResolver.java | 39 ++++ .../processor/compiler/ElementFunctions.java | 34 +++ .../compiler/VariableTypeResolver.java | 29 +++ .../processor/generator/JavadocConverter.java | 23 ++ .../introspection/ModuleIntrospector.java | 163 ++++++++++++++ .../introspection/OverviewIntrospector.java | 60 ++++++ .../gradle/incremental.annotation.processors | 1 + .../javax.annotation.processing.Processor | 1 + .../compiler/AnnotationFunctionsTest.java | 108 ++++++++++ .../compiler/ElementFunctionsTest.java | 36 ++++ .../processor/compiler/MockBooleanValue.java | 36 ++++ .../compiler/MockCollectionValues.java | 37 ++++ .../processor/compiler/MockStringValue.java | 36 ++++ .../processor/compiler/MockTypeMirror.java | 60 ++++++ .../processor/compiler/MockTypeValue.java | 37 ++++ build.gradle.kts | 10 + gradle.properties | 1 + runtime-metamodel/build.gradle.kts | 9 - 25 files changed, 1190 insertions(+), 9 deletions(-) create mode 100644 autodoc/autodoc-core/build.gradle.kts create mode 100644 autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/EdcModuleProcessor.java create mode 100644 autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationBooleanValueResolver.java create mode 100644 autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationClassValuesResolver.java create mode 100644 autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationFunctions.java create mode 100644 autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationLongValueResolver.java create mode 100644 autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationStringValueResolver.java create mode 100644 autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationStringValuesResolver.java create mode 100644 autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/ElementFunctions.java create mode 100644 autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/VariableTypeResolver.java create mode 100644 autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/generator/JavadocConverter.java create mode 100644 autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/introspection/ModuleIntrospector.java create mode 100644 autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/introspection/OverviewIntrospector.java create mode 100644 autodoc/autodoc-core/src/main/resources/META-INF/gradle/incremental.annotation.processors create mode 100644 autodoc/autodoc-core/src/main/resources/META-INF/services/javax.annotation.processing.Processor create mode 100644 autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationFunctionsTest.java create mode 100644 autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/ElementFunctionsTest.java create mode 100644 autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/MockBooleanValue.java create mode 100644 autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/MockCollectionValues.java create mode 100644 autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/MockStringValue.java create mode 100644 autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/MockTypeMirror.java create mode 100644 autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/MockTypeValue.java diff --git a/autodoc/autodoc-core/build.gradle.kts b/autodoc/autodoc-core/build.gradle.kts new file mode 100644 index 00000000..4970a6cf --- /dev/null +++ b/autodoc/autodoc-core/build.gradle.kts @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2022 Microsoft Corporation + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Microsoft Corporation - initial API and implementation + */ + +plugins { + `java-library` +} + +dependencies { + api(project(":runtime-metamodel")) +} + +publishing { + publications { + create("autodoc-core") { + artifactId = "autodoc-core" + from(components["java"]) + } + } +} diff --git a/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/EdcModuleProcessor.java b/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/EdcModuleProcessor.java new file mode 100644 index 00000000..95f5c892 --- /dev/null +++ b/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/EdcModuleProcessor.java @@ -0,0 +1,198 @@ +/* + * Copyright (c) 2022 Microsoft Corporation + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Microsoft Corporation - initial API and implementation + * + */ + +package org.eclipse.dataspaceconnector.autodoc.core.processor; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.eclipse.dataspaceconnector.autodoc.core.processor.introspection.ModuleIntrospector; +import org.eclipse.dataspaceconnector.autodoc.core.processor.introspection.OverviewIntrospector; +import org.eclipse.dataspaceconnector.runtime.metamodel.annotation.Extension; +import org.eclipse.dataspaceconnector.runtime.metamodel.annotation.Spi; +import org.eclipse.dataspaceconnector.runtime.metamodel.domain.EdcModule; +import org.eclipse.dataspaceconnector.runtime.metamodel.domain.ModuleType; +import org.jetbrains.annotations.Nullable; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import javax.annotation.processing.AbstractProcessor; +import javax.annotation.processing.ProcessingEnvironment; +import javax.annotation.processing.RoundEnvironment; +import javax.annotation.processing.SupportedAnnotationTypes; +import javax.annotation.processing.SupportedOptions; +import javax.annotation.processing.SupportedSourceVersion; +import javax.lang.model.SourceVersion; +import javax.lang.model.element.TypeElement; +import javax.tools.StandardLocation; + +import static javax.tools.Diagnostic.Kind.ERROR; +import static javax.tools.Diagnostic.Kind.NOTE; + +/** + * Generates an EDC module manifest by introspecting a set of bounded artifacts. + *

+ * Two processor parameters must be set: {@link #ID} which by convention uses Maven group id an artifact id coordinates; + * and {@link #VERSION}. To Override the location where the manifest is generated, specify + * {@link #EDC_LOCATION_OVERRIDE} as a processor parameter. + */ +@SupportedAnnotationTypes({ + "org.eclipse.dataspaceconnector.runtime.metamodel.annotationEdcSetting", + "org.eclipse.dataspaceconnector.runtime.metamodel.annotationEdcSettingContext", + "org.eclipse.dataspaceconnector.runtime.metamodel.annotation.Extension", + "org.eclipse.dataspaceconnector.runtime.metamodel.annotation.Spi", + "org.eclipse.dataspaceconnector.runtime.metamodel.annotation.ExtensionPoint", + "org.eclipse.dataspaceconnector.runtime.metamodel.annotation.Provider", + "org.eclipse.dataspaceconnector.runtime.metamodel.annotation.Provides", + "org.eclipse.dataspaceconnector.runtime.metamodel.annotation.Requires", + "org.eclipse.dataspaceconnector.runtime.metamodel.annotation.Inject", +}) +@SupportedSourceVersion(SourceVersion.RELEASE_11) +@SupportedOptions({ EdcModuleProcessor.ID, EdcModuleProcessor.VERSION }) +public class EdcModuleProcessor extends AbstractProcessor { + static final String VERSION = "edc.version"; + static final String ID = "edc.id"; + + private static final String MANIFEST_NAME = "edc.json"; + private static final String EDC_LOCATION_OVERRIDE = "edc.location"; + + private final ObjectMapper mapper = new ObjectMapper(); + + private ModuleIntrospector moduleIntrospector; + + private OverviewIntrospector overviewIntrospector; + + private EdcModule.Builder moduleBuilder; + + private ModuleType moduleType; + + @Override + public synchronized void init(ProcessingEnvironment processingEnv) { + super.init(processingEnv); + moduleIntrospector = new ModuleIntrospector(processingEnv.getElementUtils()); + //todo: replace this Noop converter with an actual JavadocConverter + overviewIntrospector = new OverviewIntrospector(javadoc -> javadoc, processingEnv.getElementUtils()); + } + + @Override + public boolean process(Set annotations, RoundEnvironment environment) { + if (!initializeModuleBuilder(environment)) { + return false; // error, do not continue processing + } + + if (environment.processingOver()) { + if (moduleBuilder != null) { + writeManifest(); + } + return false; // processing rounds are complete, return + } + + moduleBuilder.provides(moduleIntrospector.resolveProvidedServices(environment)); + + moduleBuilder.extensionPoints(moduleIntrospector.resolveExtensionPoints(environment)); + + moduleBuilder.references(moduleIntrospector.resolveReferencedServices(environment)); + + moduleBuilder.configuration(moduleIntrospector.resolveConfigurationSettings(environment)); + + moduleBuilder.overview(overviewIntrospector.generateModuleOverview(moduleType, environment)); + + return false; + } + + private boolean initializeModuleBuilder(RoundEnvironment environment) { + if (moduleBuilder != null) { + // already initialized in a previous round + return true; + } + + var id = processingEnv.getOptions().get(ID); + if (id == null) { + processingEnv.getMessager().printMessage(ERROR, "Value for '" + ID + "' not set on processor configuration. Skipping manifest generation."); + return false; + } + + var version = processingEnv.getOptions().get(VERSION); + if (version == null) { + processingEnv.getMessager().printMessage(ERROR, "Value for '" + VERSION + "' not set on processor configuration. Skipping manifest generation."); + return false; + } + + moduleType = determineAndValidateModuleType(environment); + if (moduleType == null) { + // error or not a module, return + return false; + } + + var name = moduleIntrospector.getModuleName(moduleType, environment); + + var categories = moduleIntrospector.getModuleCategories(moduleType, environment); + + moduleBuilder = EdcModule.Builder.newInstance().id(id).version(version).type(moduleType).name(name).categories(categories); + + return true; + } + + @Nullable + private ModuleType determineAndValidateModuleType(RoundEnvironment environment) { + var extensionElements = environment.getElementsAnnotatedWith(Extension.class); + if (extensionElements.isEmpty()) { + // check if it is an SPI + var spiElements = environment.getElementsAnnotatedWith(Spi.class); + if (spiElements.size() > 1) { + var types = spiElements.stream().map(e -> e.asType().toString()).collect(Collectors.joining(", ")); + processingEnv.getMessager().printMessage(ERROR, "Multiple SPI definitions found in module: " + types); + return null; + } else if (spiElements.isEmpty()) { + processingEnv.getMessager().printMessage(NOTE, "Note an EDC module. Skipping module processing."); + return null; + } + return ModuleType.SPI; + + } else { + // an extension + if (extensionElements.size() > 1) { + var types = extensionElements.stream().map(e -> e.asType().toString()).collect(Collectors.joining(", ")); + processingEnv.getMessager().printMessage(ERROR, "Multiple extension types found in module: " + types); + return null; + } + return ModuleType.EXTENSION; + } + } + + private void writeManifest() { + try { + var filer = processingEnv.getFiler(); + var location = processingEnv.getOptions().get(EDC_LOCATION_OVERRIDE); + if (location != null) { + new File(location).mkdirs(); + try (var writer = new BufferedWriter(new FileWriter(location + File.separator + MANIFEST_NAME))) { + mapper.writeValue(writer, List.of(moduleBuilder.build())); + } + } else { + var resource = filer.createResource(StandardLocation.SOURCE_OUTPUT, "", MANIFEST_NAME); + try (var writer = resource.openWriter()) { + mapper.writeValue(writer, List.of(moduleBuilder.build())); + } + } + } catch (IOException ex) { + throw new RuntimeException(ex); + } + } + + +} diff --git a/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationBooleanValueResolver.java b/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationBooleanValueResolver.java new file mode 100644 index 00000000..ee68aca8 --- /dev/null +++ b/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationBooleanValueResolver.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2022 Microsoft Corporation + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Microsoft Corporation - initial API and implementation + * + */ + +package org.eclipse.dataspaceconnector.autodoc.core.processor.compiler; + +import javax.lang.model.util.SimpleAnnotationValueVisitor9; + +/** + * Returns the value of an annotation attribute as a boolean. + */ +class AnnotationBooleanValueResolver extends SimpleAnnotationValueVisitor9 { + + @Override + public Boolean visitBoolean(boolean b, Void o) { + return b; + } + +} diff --git a/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationClassValuesResolver.java b/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationClassValuesResolver.java new file mode 100644 index 00000000..961f35c9 --- /dev/null +++ b/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationClassValuesResolver.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2022 Microsoft Corporation + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Microsoft Corporation - initial API and implementation + * + */ + +package org.eclipse.dataspaceconnector.autodoc.core.processor.compiler; + +import java.util.List; +import javax.lang.model.element.AnnotationValue; +import javax.lang.model.type.TypeMirror; +import javax.lang.model.util.SimpleAnnotationValueVisitor9; + +/** + * Returns the value of an annotation attribute as a collection of type names. + */ +class AnnotationClassValuesResolver extends SimpleAnnotationValueVisitor9, List> { + @Override + public List visitType(TypeMirror typeMirror, List values) { + values.add(typeMirror.toString()); + return values; + } + + @Override + public List visitArray(List vals, List values) { + vals.forEach(annotationValue -> annotationValue.accept(this, values)); + return values; + } + + +} diff --git a/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationFunctions.java b/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationFunctions.java new file mode 100644 index 00000000..de4b7058 --- /dev/null +++ b/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationFunctions.java @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2022 Microsoft Corporation + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Microsoft Corporation - initial API and implementation + * + */ + +package org.eclipse.dataspaceconnector.autodoc.core.processor.compiler; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.lang.annotation.Annotation; +import java.util.ArrayList; +import java.util.List; +import javax.lang.model.element.AnnotationMirror; +import javax.lang.model.element.Element; +import javax.lang.model.util.Elements; +import javax.lang.model.util.SimpleAnnotationValueVisitor9; + +import static java.lang.String.format; +import static java.util.Collections.emptyList; + +/** + * Contains convenience methods for working with Java Compiler API annotation mirrors. + *

+ * These methods delegate to {@link SimpleAnnotationValueVisitor9} implementations to walk trees produced by the compiler and resolve requested values. + */ +public class AnnotationFunctions { + private static final AnnotationClassValuesResolver CLASS_VALUES_RESOLVER = new AnnotationClassValuesResolver(); + private static final AnnotationStringValuesResolver STRING_VALUES_RESOLVER = new AnnotationStringValuesResolver(); + private static final AnnotationBooleanValueResolver BOOLEAN_VALUE_RESOLVER = new AnnotationBooleanValueResolver(); + private static final AnnotationStringValueResolver STRING_VALUE_RESOLVER = new AnnotationStringValueResolver(); + private static final AnnotationLongValueResolver LONG_VALUE_RESOLVER = new AnnotationLongValueResolver(); + private static final String ANNOTATION_METHOD_POSTFIX = "()"; + + private AnnotationFunctions() { + } + + /** + * Returns the annotation mirror for the annotated element corresponding to the given annotation type, or null if no type is found. + */ + @Nullable + public static AnnotationMirror mirrorFor(Class type, Element element) { + var elementAnnotations = element.getAnnotationMirrors(); + for (AnnotationMirror annotationMirror : elementAnnotations) { + if (type.getName().equals(annotationMirror.getAnnotationType().toString())) { + return annotationMirror; + } + } + return null; + } + + /** + * Returns the annotation attribute value of the given type and name. + * + * @param type the value type + * @param name the attribute name + * @param annotationMirror the annotation + * @param elementUtils the current elements instance + */ + public static T attributeValue(Class type, String name, AnnotationMirror annotationMirror, Elements elementUtils) { + name += ANNOTATION_METHOD_POSTFIX; + var resolver = getResolver(type); + for (var entry : elementUtils.getElementValuesWithDefaults(annotationMirror).entrySet()) { + if (name.equals(entry.getKey().toString())) { + return type.cast(entry.getValue().accept(resolver, null)); + } + } + throw new IllegalArgumentException(format("Unknown attribute '%s' for annotation: %s", name, annotationMirror.getAnnotationType().asElement())); + } + + /** + * Returns the annotation attribute value as a collection of strings. + * + * @param name the attribute name + * @param annotationMirror the annotation + * @param elementUtils the current elements instance + */ + public static List attributeStringValues(String name, AnnotationMirror annotationMirror, Elements elementUtils) { + name += ANNOTATION_METHOD_POSTFIX; + for (var entry : elementUtils.getElementValuesWithDefaults(annotationMirror).entrySet()) { + if (name.equals(entry.getKey().toString())) { + return entry.getValue().accept(STRING_VALUES_RESOLVER, new ArrayList<>()); + } + } + throw new IllegalArgumentException(format("Unknown attribute '%s' for annotation: %s", name, annotationMirror.getAnnotationType().asElement())); + } + + /** + * Returns the annotation attribute value as a collection of type names. + * + * @param name the attribute name + * @param annotationMirror the annotation + * @param elementUtils the current elements instance + */ + public static List attributeTypeValues(String name, AnnotationMirror annotationMirror, Elements elementUtils) { + name += ANNOTATION_METHOD_POSTFIX; + for (var entry : elementUtils.getElementValuesWithDefaults(annotationMirror).entrySet()) { + if (name.equals(entry.getKey().toString())) { + return entry.getValue().accept(CLASS_VALUES_RESOLVER, new ArrayList<>()); + } + } + return emptyList(); + } + + @NotNull + private static SimpleAnnotationValueVisitor9 getResolver(Class type) { + SimpleAnnotationValueVisitor9 resolver; + if (Boolean.class.equals(type)) { + resolver = BOOLEAN_VALUE_RESOLVER; + } else if (String.class.equals(type)) { + resolver = STRING_VALUE_RESOLVER; + } else if (Long.class.equals(type)) { + resolver = LONG_VALUE_RESOLVER; + } else { + throw new IllegalArgumentException("Unsupported value type: " + type.getName()); + } + return resolver; + } +} diff --git a/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationLongValueResolver.java b/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationLongValueResolver.java new file mode 100644 index 00000000..ee78fac5 --- /dev/null +++ b/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationLongValueResolver.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2022 Microsoft Corporation + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Microsoft Corporation - initial API and implementation + * + */ + +package org.eclipse.dataspaceconnector.autodoc.core.processor.compiler; + +import javax.lang.model.util.SimpleAnnotationValueVisitor9; + +/** + * Returns the value of an annotation attribute as a long. + */ +class AnnotationLongValueResolver extends SimpleAnnotationValueVisitor9 { + + @Override + public Long visitLong(long i, Void unused) { + return super.visitLong(i, unused); + } +} diff --git a/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationStringValueResolver.java b/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationStringValueResolver.java new file mode 100644 index 00000000..dd9b5859 --- /dev/null +++ b/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationStringValueResolver.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2022 Microsoft Corporation + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Microsoft Corporation - initial API and implementation + * + */ + +package org.eclipse.dataspaceconnector.autodoc.core.processor.compiler; + +import javax.lang.model.util.SimpleAnnotationValueVisitor9; + +/** + * Returns the value of an annotation attribute as a string. + */ +class AnnotationStringValueResolver extends SimpleAnnotationValueVisitor9 { + + @Override + public String visitString(String s, Void unused) { + return s; + } +} diff --git a/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationStringValuesResolver.java b/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationStringValuesResolver.java new file mode 100644 index 00000000..f5008dfa --- /dev/null +++ b/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationStringValuesResolver.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2022 Microsoft Corporation + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Microsoft Corporation - initial API and implementation + * + */ + +package org.eclipse.dataspaceconnector.autodoc.core.processor.compiler; + +import java.util.List; +import javax.lang.model.element.AnnotationValue; +import javax.lang.model.util.SimpleAnnotationValueVisitor9; + +/** + * Returns the value of an annotation attribute as a collection of strings. + */ +class AnnotationStringValuesResolver extends SimpleAnnotationValueVisitor9, List> { + + @Override + public List visitString(String value, List values) { + values.add(value); + return values; + } + + @Override + public List visitArray(List vals, List values) { + vals.forEach(annotationValue -> annotationValue.accept(this, values)); + return values; + } + + +} diff --git a/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/ElementFunctions.java b/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/ElementFunctions.java new file mode 100644 index 00000000..f200e835 --- /dev/null +++ b/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/ElementFunctions.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2022 Microsoft Corporation + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Microsoft Corporation - initial API and implementation + * + */ + +package org.eclipse.dataspaceconnector.autodoc.core.processor.compiler; + +import javax.lang.model.element.Element; + +/** + * Contains convenience methods for working with Java Compiler API. + */ +public class ElementFunctions { + private static final VariableTypeResolver VARIABLE_TYPE_RESOLVER = new VariableTypeResolver(); + + private ElementFunctions() { + } + + /** + * Returns the type of the given element. + */ + public static String typeFor(Element element) { + return element.accept(VARIABLE_TYPE_RESOLVER, null); + } +} diff --git a/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/VariableTypeResolver.java b/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/VariableTypeResolver.java new file mode 100644 index 00000000..e59687be --- /dev/null +++ b/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/VariableTypeResolver.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2022 Microsoft Corporation + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Microsoft Corporation - initial API and implementation + * + */ + +package org.eclipse.dataspaceconnector.autodoc.core.processor.compiler; + +import javax.lang.model.element.VariableElement; +import javax.lang.model.util.SimpleElementVisitor9; + +/** + * Resolves the type name of an element. + */ +class VariableTypeResolver extends SimpleElementVisitor9 { + + @Override + public String visitVariable(VariableElement e, Void unused) { + return e.asType().toString(); + } +} diff --git a/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/generator/JavadocConverter.java b/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/generator/JavadocConverter.java new file mode 100644 index 00000000..e5ec4c3e --- /dev/null +++ b/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/generator/JavadocConverter.java @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2022 Microsoft Corporation + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Microsoft Corporation - initial API and implementation + * + */ + +package org.eclipse.dataspaceconnector.autodoc.core.processor.generator; + +/** + * Converts javadoc comment strings into any output format. + */ +@FunctionalInterface +public interface JavadocConverter { + String generate(String javadoc); +} diff --git a/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/introspection/ModuleIntrospector.java b/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/introspection/ModuleIntrospector.java new file mode 100644 index 00000000..268e0b9e --- /dev/null +++ b/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/introspection/ModuleIntrospector.java @@ -0,0 +1,163 @@ +/* + * Copyright (c) 2022 Microsoft Corporation + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Microsoft Corporation - initial API and implementation + * + */ + +package org.eclipse.dataspaceconnector.autodoc.core.processor.introspection; + +import org.eclipse.dataspaceconnector.runtime.metamodel.annotation.EdcSetting; +import org.eclipse.dataspaceconnector.runtime.metamodel.annotation.EdcSettingContext; +import org.eclipse.dataspaceconnector.runtime.metamodel.annotation.Extension; +import org.eclipse.dataspaceconnector.runtime.metamodel.annotation.ExtensionPoint; +import org.eclipse.dataspaceconnector.runtime.metamodel.annotation.Inject; +import org.eclipse.dataspaceconnector.runtime.metamodel.annotation.Provides; +import org.eclipse.dataspaceconnector.runtime.metamodel.annotation.Spi; +import org.eclipse.dataspaceconnector.runtime.metamodel.domain.ConfigurationSetting; +import org.eclipse.dataspaceconnector.runtime.metamodel.domain.ModuleType; +import org.eclipse.dataspaceconnector.runtime.metamodel.domain.Service; +import org.eclipse.dataspaceconnector.runtime.metamodel.domain.ServiceReference; +import org.jetbrains.annotations.NotNull; + +import java.util.List; +import javax.annotation.processing.RoundEnvironment; +import javax.lang.model.element.VariableElement; +import javax.lang.model.util.Elements; + +import static java.util.stream.Collectors.toList; +import static org.eclipse.dataspaceconnector.autodoc.core.processor.compiler.AnnotationFunctions.attributeStringValues; +import static org.eclipse.dataspaceconnector.autodoc.core.processor.compiler.AnnotationFunctions.attributeTypeValues; +import static org.eclipse.dataspaceconnector.autodoc.core.processor.compiler.AnnotationFunctions.attributeValue; +import static org.eclipse.dataspaceconnector.autodoc.core.processor.compiler.AnnotationFunctions.mirrorFor; +import static org.eclipse.dataspaceconnector.autodoc.core.processor.compiler.ElementFunctions.typeFor; + +/** + * Contains methods for introspecting the current module using the Java Compiler API. + */ +public class ModuleIntrospector { + private final Elements elementUtils; + + public ModuleIntrospector(Elements elementUtils) { + this.elementUtils = elementUtils; + } + + /** + * Returns the module name set by either the {@link Spi} or {@link Extension} annotation. + */ + public String getModuleName(ModuleType moduleType, RoundEnvironment environment) { + if (ModuleType.EXTENSION == moduleType) { + var extensionElement = environment.getElementsAnnotatedWith(Extension.class).iterator().next(); + return attributeValue(String.class, "value", mirrorFor(Extension.class, extensionElement), elementUtils); + } else { + var extensionElement = environment.getElementsAnnotatedWith(Spi.class).iterator().next(); + return attributeValue(String.class, "value", mirrorFor(Spi.class, extensionElement), elementUtils); + } + } + + /** + * Returns module categories set using either the {@link Spi} or {@link Extension} annotation. + */ + public List getModuleCategories(ModuleType moduleType, RoundEnvironment environment) { + if (ModuleType.EXTENSION == moduleType) { + var extensionElement = environment.getElementsAnnotatedWith(Extension.class).iterator().next(); + return attributeStringValues("categories", mirrorFor(Extension.class, extensionElement), elementUtils); + } else { + var extensionElement = environment.getElementsAnnotatedWith(Spi.class).iterator().next(); + return attributeStringValues("categories", mirrorFor(Spi.class, extensionElement), elementUtils); + } + } + + /** + * Resolves referenced services by introspecting usages of {@link Inject}. + */ + public List resolveReferencedServices(RoundEnvironment environment) { + return environment.getElementsAnnotatedWith(Inject.class).stream() + .map(element -> { + var required = attributeValue(Boolean.class, "required", mirrorFor(Inject.class, element), elementUtils); + return new ServiceReference(typeFor(element), required); + }) + .collect(toList()); + } + + /** + * Resolves referenced services by introspecting the {@link Provides} annotation. + */ + public List resolveProvidedServices(RoundEnvironment environment) { + return environment.getElementsAnnotatedWith(Provides.class).stream() + .flatMap(element -> attributeTypeValues("value", mirrorFor(Provides.class, element), elementUtils).stream()) + .map(Service::new) + .collect(toList()); + } + + /** + * Resolves extension points declared with {@link ExtensionPoint}. + */ + public List resolveExtensionPoints(RoundEnvironment environment) { + return environment.getElementsAnnotatedWith(ExtensionPoint.class).stream() + .map(element -> new Service(element.asType().toString())) + .collect(toList()); + } + + /** + * Resolves configuration points declared with {@link EdcSetting}. + */ + public List resolveConfigurationSettings(RoundEnvironment environment) { + return environment.getElementsAnnotatedWith(EdcSetting.class).stream() + .filter(VariableElement.class::isInstance) + .map(VariableElement.class::cast) + .map(this::createConfigurationSetting) + .collect(toList()); + } + + /** + * Maps a {@link ConfigurationSetting} from an {@link EdcSetting} annotation. + */ + private ConfigurationSetting createConfigurationSetting(VariableElement settingElement) { + var prefix = resolveConfigurationPrefix(settingElement); + var keyValue = prefix + settingElement.getConstantValue().toString(); + + var settingBuilder = ConfigurationSetting.Builder.newInstance().key(keyValue); + + var settingMirror = mirrorFor(EdcSetting.class, settingElement); + + var description = attributeValue(String.class, "value", settingMirror, elementUtils); + settingBuilder.description(description); + + var type = attributeValue(String.class, "type", settingMirror, elementUtils); + settingBuilder.type(type); + + var required = attributeValue(Boolean.class, "required", settingMirror, elementUtils); + settingBuilder.required(required); + + var max = attributeValue(Long.class, "max", settingMirror, elementUtils); + settingBuilder.maximum(max); + + var min = attributeValue(Long.class, "min", settingMirror, elementUtils); + settingBuilder.minimum(min); + + return settingBuilder.build(); + } + + /** + * Resolves a configuration prefix specified by {@link EdcSettingContext} for a given EDC setting element or an empty string if there is none. + */ + @NotNull + private String resolveConfigurationPrefix(VariableElement edcSettingElement) { + var enclosingElement = edcSettingElement.getEnclosingElement(); + if (enclosingElement == null) { + return ""; + } + var contextMirror = mirrorFor(EdcSettingContext.class, enclosingElement); + return contextMirror != null ? attributeValue(String.class, "value", contextMirror, elementUtils) : ""; + } + + +} diff --git a/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/introspection/OverviewIntrospector.java b/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/introspection/OverviewIntrospector.java new file mode 100644 index 00000000..aafe9b5b --- /dev/null +++ b/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/introspection/OverviewIntrospector.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2022 Microsoft Corporation + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Microsoft Corporation - initial API and implementation + * + */ + +package org.eclipse.dataspaceconnector.autodoc.core.processor.introspection; + +import org.eclipse.dataspaceconnector.autodoc.core.processor.generator.JavadocConverter; +import org.eclipse.dataspaceconnector.runtime.metamodel.annotation.Extension; +import org.eclipse.dataspaceconnector.runtime.metamodel.annotation.Spi; +import org.eclipse.dataspaceconnector.runtime.metamodel.domain.ModuleType; +import org.jetbrains.annotations.Nullable; + +import javax.annotation.processing.RoundEnvironment; +import javax.lang.model.util.Elements; + +/** + * Generates a module overview. + */ +public class OverviewIntrospector { + private final JavadocConverter javadocConverter; + private final Elements elementUtils; + + public OverviewIntrospector(@Nullable JavadocConverter javadocConverter, Elements elementUtils) { + this.javadocConverter = javadocConverter; + this.elementUtils = elementUtils; + } + + /** + * Generated overview documentation by converting Javadoc to a Markdown representation. For SPI modules, the Javadoc is taken from the package-info.java type + * annotated with {@link Spi}. For extensions, the Javadoc is taken from the type annotated with {@link Extension}. + */ + @Nullable + public String generateModuleOverview(ModuleType moduleType, RoundEnvironment environment) { + var annotation = moduleType == ModuleType.EXTENSION ? Extension.class : Spi.class; + var elements = environment.getElementsAnnotatedWith(annotation); + if (elements.isEmpty()) { + return null; + } + + var moduleElement = elements.iterator().next(); + var javadoc = elementUtils.getDocComment(moduleElement); + + if (javadoc == null) { + return "No overview provided."; + } + return javadocConverter != null ? javadocConverter.generate(javadoc) : "No JavadocConverter available"; + } + + +} diff --git a/autodoc/autodoc-core/src/main/resources/META-INF/gradle/incremental.annotation.processors b/autodoc/autodoc-core/src/main/resources/META-INF/gradle/incremental.annotation.processors new file mode 100644 index 00000000..105f3062 --- /dev/null +++ b/autodoc/autodoc-core/src/main/resources/META-INF/gradle/incremental.annotation.processors @@ -0,0 +1 @@ +org.eclipse.dataspaceconnector.autodoc.core.processor.EdcModuleProcessor,aggregating diff --git a/autodoc/autodoc-core/src/main/resources/META-INF/services/javax.annotation.processing.Processor b/autodoc/autodoc-core/src/main/resources/META-INF/services/javax.annotation.processing.Processor new file mode 100644 index 00000000..36967d1b --- /dev/null +++ b/autodoc/autodoc-core/src/main/resources/META-INF/services/javax.annotation.processing.Processor @@ -0,0 +1 @@ +org.eclipse.dataspaceconnector.autodoc.core.processor.EdcModuleProcessor diff --git a/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationFunctionsTest.java b/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationFunctionsTest.java new file mode 100644 index 00000000..390b3abe --- /dev/null +++ b/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationFunctionsTest.java @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2022 Microsoft Corporation + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Microsoft Corporation - initial API and implementation + * + */ + +package org.eclipse.dataspaceconnector.autodoc.core.processor.compiler; + +import org.eclipse.dataspaceconnector.runtime.metamodel.annotation.Inject; +import org.eclipse.dataspaceconnector.runtime.metamodel.annotation.Provides; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; + +import java.util.List; +import java.util.Map; +import javax.lang.model.element.AnnotationMirror; +import javax.lang.model.element.Element; +import javax.lang.model.element.ExecutableElement; +import javax.lang.model.type.DeclaredType; +import javax.lang.model.util.Elements; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.atLeastOnce; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +class AnnotationFunctionsTest { + + @Test + @SuppressWarnings({ "rawtypes", "unchecked" }) + void validateTestMirrors() { + var element = Mockito.mock(Element.class); + var mirror = Mockito.mock(AnnotationMirror.class); + var declaredType = Mockito.mock(DeclaredType.class); + List mirrors = List.of(mirror); + + when(element.getAnnotationMirrors()).thenReturn(mirrors); + when(mirror.getAnnotationType()).thenReturn(declaredType); + when(declaredType.toString()).thenReturn(Provides.class.getName()); + + assertThat(AnnotationFunctions.mirrorFor(Provides.class, element)).isNotNull(); + + assertThat(AnnotationFunctions.mirrorFor(Inject.class, element)).isNull(); + + verify(mirror, atLeastOnce()).getAnnotationType(); + verify(element, atLeastOnce()).getAnnotationMirrors(); + } + + @Test + @SuppressWarnings({ "rawtypes", "unchecked" }) + void validateAttributeValues() { + var elementUtils = Mockito.mock(Elements.class); + var mirror = Mockito.mock(AnnotationMirror.class); + var element = Mockito.mock(ExecutableElement.class); + Map mirrors = Map.of(element, new MockBooleanValue(false)); + + when(elementUtils.getElementValuesWithDefaults(mirror)).thenReturn(mirrors); + when(element.toString()).thenReturn("required()"); + + assertThat(AnnotationFunctions.attributeValue(Boolean.class, "required", mirror, elementUtils)).isEqualTo(false); + + + verify(elementUtils, atLeastOnce()).getElementValuesWithDefaults(any()); + } + + @Test + @SuppressWarnings({ "rawtypes", "unchecked" }) + void validateAttributeStringValues() { + var elementUtils = Mockito.mock(Elements.class); + var mirror = Mockito.mock(AnnotationMirror.class); + var element = Mockito.mock(ExecutableElement.class); + Map mirrors = Map.of(element, new MockCollectionValues(List.of(new MockStringValue("foo")))); + + when(elementUtils.getElementValuesWithDefaults(mirror)).thenReturn(mirrors); + when(element.toString()).thenReturn("value()"); + + assertThat(AnnotationFunctions.attributeStringValues("value", mirror, elementUtils)).isEqualTo(List.of("foo")); + + + verify(elementUtils, atLeastOnce()).getElementValuesWithDefaults(any()); + } + + @Test + @SuppressWarnings({ "rawtypes", "unchecked" }) + void validateAttributeTypeValues() { + var elementUtils = Mockito.mock(Elements.class); + var mirror = Mockito.mock(AnnotationMirror.class); + var element = Mockito.mock(ExecutableElement.class); + Map mirrors = Map.of(element, new MockCollectionValues(List.of(new MockTypeValue(new MockTypeMirror("foo.Bar"))))); + + when(elementUtils.getElementValuesWithDefaults(mirror)).thenReturn(mirrors); + when(element.toString()).thenReturn("value()"); + + assertThat(AnnotationFunctions.attributeTypeValues("value", mirror, elementUtils)).isEqualTo(List.of("foo.Bar")); + + verify(elementUtils, atLeastOnce()).getElementValuesWithDefaults(any()); + } + +} diff --git a/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/ElementFunctionsTest.java b/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/ElementFunctionsTest.java new file mode 100644 index 00000000..32d607be --- /dev/null +++ b/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/ElementFunctionsTest.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2022 Microsoft Corporation + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Microsoft Corporation - initial API and implementation + * + */ + +package org.eclipse.dataspaceconnector.autodoc.core.processor.compiler; + +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; + +import javax.lang.model.element.VariableElement; + +import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +class ElementFunctionsTest { + @Test + void verify() { + var element = Mockito.mock(VariableElement.class); + + when(element.asType()).thenReturn(new MockTypeMirror("foo.Bar")); + when(element.accept(any(), any())).thenAnswer(invocation -> ((VariableTypeResolver) invocation.getArguments()[0]).visitVariable(element, null)); + assertThat(ElementFunctions.typeFor(element)).isEqualTo("foo.Bar"); + } + +} diff --git a/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/MockBooleanValue.java b/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/MockBooleanValue.java new file mode 100644 index 00000000..c5abc1e4 --- /dev/null +++ b/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/MockBooleanValue.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2022 Microsoft Corporation + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Microsoft Corporation - initial API and implementation + * + */ + +package org.eclipse.dataspaceconnector.autodoc.core.processor.compiler; + +import javax.lang.model.element.AnnotationValue; +import javax.lang.model.element.AnnotationValueVisitor; + +class MockBooleanValue implements AnnotationValue { + private final boolean value; + + MockBooleanValue(boolean value) { + this.value = value; + } + + @Override + public Object getValue() { + return value; + } + + @Override + public R accept(AnnotationValueVisitor v, P p) { + return v.visitBoolean(value, p); + } +} diff --git a/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/MockCollectionValues.java b/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/MockCollectionValues.java new file mode 100644 index 00000000..961a965b --- /dev/null +++ b/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/MockCollectionValues.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2022 Microsoft Corporation + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Microsoft Corporation - initial API and implementation + * + */ + +package org.eclipse.dataspaceconnector.autodoc.core.processor.compiler; + +import java.util.List; +import javax.lang.model.element.AnnotationValue; +import javax.lang.model.element.AnnotationValueVisitor; + +class MockCollectionValues implements AnnotationValue { + private final List values; + + MockCollectionValues(List values) { + this.values = values; + } + + @Override + public Object getValue() { + return values; + } + + @Override + public R accept(AnnotationValueVisitor v, P p) { + return v.visitArray(values, p); + } +} diff --git a/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/MockStringValue.java b/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/MockStringValue.java new file mode 100644 index 00000000..b5559e8f --- /dev/null +++ b/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/MockStringValue.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2022 Microsoft Corporation + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Microsoft Corporation - initial API and implementation + * + */ + +package org.eclipse.dataspaceconnector.autodoc.core.processor.compiler; + +import javax.lang.model.element.AnnotationValue; +import javax.lang.model.element.AnnotationValueVisitor; + +class MockStringValue implements AnnotationValue { + private final String value; + + MockStringValue(String value) { + this.value = value; + } + + @Override + public Object getValue() { + return value; + } + + @Override + public R accept(AnnotationValueVisitor v, P p) { + return v.visitString(value, p); + } +} diff --git a/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/MockTypeMirror.java b/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/MockTypeMirror.java new file mode 100644 index 00000000..ebe73fcb --- /dev/null +++ b/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/MockTypeMirror.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2022 Microsoft Corporation + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Microsoft Corporation - initial API and implementation + * + */ + +package org.eclipse.dataspaceconnector.autodoc.core.processor.compiler; + +import java.lang.annotation.Annotation; +import java.util.List; +import javax.lang.model.element.AnnotationMirror; +import javax.lang.model.type.TypeKind; +import javax.lang.model.type.TypeMirror; +import javax.lang.model.type.TypeVisitor; + +class MockTypeMirror implements TypeMirror { + private final String type; + + MockTypeMirror(String type) { + this.type = type; + } + + @Override + public String toString() { + return type; + } + + @Override + public TypeKind getKind() { + return TypeKind.DECLARED; + } + + @Override + public List getAnnotationMirrors() { + throw new UnsupportedOperationException(); + } + + @Override + public A getAnnotation(Class annotationType) { + throw new UnsupportedOperationException(); + } + + @Override + public A[] getAnnotationsByType(Class annotationType) { + throw new UnsupportedOperationException(); + } + + @Override + public R accept(TypeVisitor v, P p) { + return v.visit(this, p); + } +} diff --git a/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/MockTypeValue.java b/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/MockTypeValue.java new file mode 100644 index 00000000..c0912382 --- /dev/null +++ b/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/MockTypeValue.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2022 Microsoft Corporation + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Microsoft Corporation - initial API and implementation + * + */ + +package org.eclipse.dataspaceconnector.autodoc.core.processor.compiler; + +import javax.lang.model.element.AnnotationValue; +import javax.lang.model.element.AnnotationValueVisitor; +import javax.lang.model.type.TypeMirror; + +class MockTypeValue implements AnnotationValue { + private final TypeMirror typeMirror; + + MockTypeValue(TypeMirror typeMirror) { + this.typeMirror = typeMirror; + } + + @Override + public Object getValue() { + return typeMirror; + } + + @Override + public R accept(AnnotationValueVisitor v, P p) { + return v.visitType(typeMirror, p); + } +} diff --git a/build.gradle.kts b/build.gradle.kts index 53d570f7..21903f73 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -67,6 +67,16 @@ allprojects { sign(publishing.publications) } } + + dependencies { + // Use JUnit test framework for unit tests + testImplementation("org.junit.jupiter:junit-jupiter-api:${jupiterVersion}") + testImplementation("org.junit.jupiter:junit-jupiter-params:${jupiterVersion}") + testImplementation("org.junit.jupiter:junit-jupiter-params:${jupiterVersion}") + testImplementation("org.assertj:assertj-core:${assertj}") + testImplementation("org.mockito:mockito-core:${mockitoVersion}") + testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${jupiterVersion}") + } } java { diff --git a/gradle.properties b/gradle.properties index 5078efeb..d7229065 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,6 +4,7 @@ groupId=org.eclipse.dataspaceconnector defaultVersion=0.0.1-SNAPSHOT jacksonVersion=2.13.3 jetBrainsAnnotationsVersion=15.0 +mockitoVersion=4.2.0 # used for publishing artifacts and plugins pluginsDeveloperId=mspiekermann pluginsDeveloperName=Markus Spiekermann diff --git a/runtime-metamodel/build.gradle.kts b/runtime-metamodel/build.gradle.kts index 997a1558..1dbc23cc 100644 --- a/runtime-metamodel/build.gradle.kts +++ b/runtime-metamodel/build.gradle.kts @@ -3,8 +3,6 @@ plugins { `maven-publish` } -val jupiterVersion: String by project -val assertj: String by project val jetBrainsAnnotationsVersion: String by project val jacksonVersion: String by project @@ -16,13 +14,6 @@ dependencies { api("com.fasterxml.jackson.core:jackson-databind:${jacksonVersion}") api("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:${jacksonVersion}") - // Use JUnit test framework for unit tests - testImplementation("org.junit.jupiter:junit-jupiter-api:${jupiterVersion}") - testImplementation("org.junit.jupiter:junit-jupiter-params:${jupiterVersion}") - testImplementation("org.junit.jupiter:junit-jupiter-params:${jupiterVersion}") - testImplementation("org.assertj:assertj-core:${assertj}") - implementation("org.assertj:assertj-core:${assertj}") - testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${jupiterVersion}") } tasks.test { From 2a91a8cc19cc08cc4d509d8ed1eeafc271bbef5a Mon Sep 17 00:00:00 2001 From: Paul Latzelsperger Date: Wed, 21 Sep 2022 14:38:09 +0200 Subject: [PATCH 3/6] moved test deps to root build file --- autodoc/autodoc-plugin/build.gradle.kts | 16 ++---------- .../plugins/AutodocPluginFunctionalTest.java | 5 ++-- build.gradle.kts | 26 ++++++++++++------- 3 files changed, 21 insertions(+), 26 deletions(-) diff --git a/autodoc/autodoc-plugin/build.gradle.kts b/autodoc/autodoc-plugin/build.gradle.kts index f9672fc9..416ea581 100644 --- a/autodoc/autodoc-plugin/build.gradle.kts +++ b/autodoc/autodoc-plugin/build.gradle.kts @@ -7,13 +7,6 @@ val assertj: String by project dependencies { implementation(project(":runtime-metamodel")) - // Use JUnit test framework for unit tests - testImplementation("org.junit.jupiter:junit-jupiter-api:${jupiterVersion}") - testImplementation("org.junit.jupiter:junit-jupiter-params:${jupiterVersion}") - testImplementation("org.junit.jupiter:junit-jupiter-params:${jupiterVersion}") - testImplementation("org.assertj:assertj-core:${assertj}") - implementation("org.assertj:assertj-core:${assertj}") - testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${jupiterVersion}") } gradlePlugin { @@ -40,14 +33,9 @@ val functionalTestTask = tasks.register("functionalTest") { tasks.check { // Run the functional tests as part of `check` - dependsOn(functionalTestTask) -} -tasks.test { - useJUnitPlatform() - testLogging { - showStandardStreams = true - } + // Running the functionalTest with Junit 5 does not work as of now. Once it does, the following line can be uncommented +// dependsOn(functionalTestTask) } pluginBundle { diff --git a/autodoc/autodoc-plugin/src/functionalTest/java/org/eclipse/dataspaceconnector/plugins/AutodocPluginFunctionalTest.java b/autodoc/autodoc-plugin/src/functionalTest/java/org/eclipse/dataspaceconnector/plugins/AutodocPluginFunctionalTest.java index 39c10451..ddcabc9a 100644 --- a/autodoc/autodoc-plugin/src/functionalTest/java/org/eclipse/dataspaceconnector/plugins/AutodocPluginFunctionalTest.java +++ b/autodoc/autodoc-plugin/src/functionalTest/java/org/eclipse/dataspaceconnector/plugins/AutodocPluginFunctionalTest.java @@ -14,7 +14,6 @@ package org.eclipse.dataspaceconnector.plugins; -import org.gradle.testkit.runner.BuildResult; import org.gradle.testkit.runner.GradleRunner; import org.junit.jupiter.api.Test; @@ -36,10 +35,10 @@ public void canRunTask() throws IOException { writeString(new File(projectDir, "settings.gradle"), ""); writeString(new File(projectDir, "build.gradle"), "plugins {" + - " id(\"org.eclipse.dataspaceconnector.plugins.autodoc\")" + + " id(\"autodoc\")" + "}"); // Run the build - BuildResult result = GradleRunner.create() + var result = GradleRunner.create() .forwardOutput() .withPluginClasspath() .withArguments("autodoc") diff --git a/build.gradle.kts b/build.gradle.kts index 21903f73..2aa9ed28 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -68,15 +68,6 @@ allprojects { } } - dependencies { - // Use JUnit test framework for unit tests - testImplementation("org.junit.jupiter:junit-jupiter-api:${jupiterVersion}") - testImplementation("org.junit.jupiter:junit-jupiter-params:${jupiterVersion}") - testImplementation("org.junit.jupiter:junit-jupiter-params:${jupiterVersion}") - testImplementation("org.assertj:assertj-core:${assertj}") - testImplementation("org.mockito:mockito-core:${mockitoVersion}") - testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${jupiterVersion}") - } } java { @@ -92,6 +83,23 @@ allprojects { withJavadocJar() withSourcesJar() } + + dependencies { + // Use JUnit test framework for unit tests + testImplementation("org.junit.jupiter:junit-jupiter-api:${jupiterVersion}") + testImplementation("org.junit.jupiter:junit-jupiter-params:${jupiterVersion}") + testImplementation("org.junit.jupiter:junit-jupiter-params:${jupiterVersion}") + testImplementation("org.assertj:assertj-core:${assertj}") + testImplementation("org.mockito:mockito-core:${mockitoVersion}") + testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${jupiterVersion}") + } + } + + tasks.withType { + useJUnitPlatform() + testLogging { + showStandardStreams = true + } } // configure checkstyle version From e77fd125620cbd24f714d44b75f578b2c354aa1b Mon Sep 17 00:00:00 2001 From: Paul Latzelsperger Date: Thu, 22 Sep 2022 10:26:56 +0200 Subject: [PATCH 4/6] all plugins should be in 'plugins' folder --- autodoc/.DS_Store | Bin 6148 -> 0 bytes .../javax.annotation.processing.Processor | 1 - .../autodoc}/autodoc-core/build.gradle.kts | 0 .../core/processor/EdcModuleProcessor.java | 6 +++--- .../compiler/AnnotationBooleanValueResolver.java | 2 +- .../compiler/AnnotationClassValuesResolver.java | 2 +- .../processor/compiler/AnnotationFunctions.java | 2 +- .../compiler/AnnotationLongValueResolver.java | 2 +- .../compiler/AnnotationStringValueResolver.java | 2 +- .../compiler/AnnotationStringValuesResolver.java | 2 +- .../processor/compiler/ElementFunctions.java | 2 +- .../processor/compiler/VariableTypeResolver.java | 2 +- .../processor/generator/JavadocConverter.java | 2 +- .../introspection/ModuleIntrospector.java | 12 ++++++------ .../introspection/OverviewIntrospector.java | 4 ++-- .../gradle/incremental.annotation.processors | 0 .../javax.annotation.processing.Processor | 1 + .../compiler/AnnotationFunctionsTest.java | 2 +- .../processor/compiler/ElementFunctionsTest.java | 2 +- .../processor/compiler/MockBooleanValue.java | 2 +- .../processor/compiler/MockCollectionValues.java | 2 +- .../core/processor/compiler/MockStringValue.java | 2 +- .../core/processor/compiler/MockTypeMirror.java | 2 +- .../core/processor/compiler/MockTypeValue.java | 2 +- .../autodoc}/autodoc-plugin/build.gradle.kts | 0 .../plugins/AutodocPluginFunctionalTest.java | 0 .../plugins/autodoc}/AutodocPlugin.java | 2 +- .../autodoc}/GenerateDocumentationTask.java | 2 +- .../plugins/autodoc}/AutodocPluginTest.java | 2 +- settings.gradle.kts | 4 ++-- 30 files changed, 33 insertions(+), 33 deletions(-) delete mode 100644 autodoc/.DS_Store delete mode 100644 autodoc/autodoc-core/src/main/resources/META-INF/services/javax.annotation.processing.Processor rename {autodoc => plugins/autodoc}/autodoc-core/build.gradle.kts (100%) rename {autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector => plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins}/autodoc/core/processor/EdcModuleProcessor.java (96%) rename {autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector => plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins}/autodoc/core/processor/compiler/AnnotationBooleanValueResolver.java (89%) rename {autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector => plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins}/autodoc/core/processor/compiler/AnnotationClassValuesResolver.java (93%) rename {autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector => plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins}/autodoc/core/processor/compiler/AnnotationFunctions.java (98%) rename {autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector => plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins}/autodoc/core/processor/compiler/AnnotationLongValueResolver.java (89%) rename {autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector => plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins}/autodoc/core/processor/compiler/AnnotationStringValueResolver.java (89%) rename {autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector => plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins}/autodoc/core/processor/compiler/AnnotationStringValuesResolver.java (93%) rename {autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector => plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins}/autodoc/core/processor/compiler/ElementFunctions.java (91%) rename {autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector => plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins}/autodoc/core/processor/compiler/VariableTypeResolver.java (90%) rename {autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector => plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins}/autodoc/core/processor/generator/JavadocConverter.java (87%) rename {autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector => plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins}/autodoc/core/processor/introspection/ModuleIntrospector.java (90%) rename {autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector => plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins}/autodoc/core/processor/introspection/OverviewIntrospector.java (92%) rename {autodoc => plugins/autodoc}/autodoc-core/src/main/resources/META-INF/gradle/incremental.annotation.processors (100%) create mode 100644 plugins/autodoc/autodoc-core/src/main/resources/META-INF/services/javax.annotation.processing.Processor rename {autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector => plugins/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/plugins}/autodoc/core/processor/compiler/AnnotationFunctionsTest.java (98%) rename {autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector => plugins/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/plugins}/autodoc/core/processor/compiler/ElementFunctionsTest.java (93%) rename {autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector => plugins/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/plugins}/autodoc/core/processor/compiler/MockBooleanValue.java (91%) rename {autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector => plugins/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/plugins}/autodoc/core/processor/compiler/MockCollectionValues.java (91%) rename {autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector => plugins/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/plugins}/autodoc/core/processor/compiler/MockStringValue.java (91%) rename {autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector => plugins/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/plugins}/autodoc/core/processor/compiler/MockTypeMirror.java (94%) rename {autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector => plugins/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/plugins}/autodoc/core/processor/compiler/MockTypeValue.java (91%) rename {autodoc => plugins/autodoc}/autodoc-plugin/build.gradle.kts (100%) rename {autodoc => plugins/autodoc}/autodoc-plugin/src/functionalTest/java/org/eclipse/dataspaceconnector/plugins/AutodocPluginFunctionalTest.java (100%) rename {autodoc/autodoc-plugin/src/main/java/org/eclipse/dataspaceconnector/plugins => plugins/autodoc/autodoc-plugin/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc}/AutodocPlugin.java (92%) rename {autodoc/autodoc-plugin/src/main/java/org/eclipse/dataspaceconnector/plugins => plugins/autodoc/autodoc-plugin/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc}/GenerateDocumentationTask.java (93%) rename {autodoc/autodoc-plugin/src/test/java/org/eclipse/dataspaceconnector/plugins => plugins/autodoc/autodoc-plugin/src/test/java/org/eclipse/dataspaceconnector/plugins/autodoc}/AutodocPluginTest.java (94%) diff --git a/autodoc/.DS_Store b/autodoc/.DS_Store deleted file mode 100644 index 543492eba3217daa5d51d48bdd56437ec8fbb31d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKJ5Iwu5S<|b3^XYzmxdPQ1|~8mNJAMpmiWk)BT#xDf}ShT(sKqx!yPyRZ*~Tf zC6?$Af*EP|&CX}Xev)@RM8uP2H6|JnQHCMNqV$NEdtF-=EKZJlRQ1JpI&Ygr&o;l) zB+tH0B`xWSYD%Af_iiWkHf>Rqbz8!ky}a%}KG#pDUn8n-A{Lix4DG!kod$GEH#ASV zJ8oB=^}6RL_YX(cv99Gc?W*RcH>pQ6spsMhI0MdrGw{C|z@06U9Vq(j3^)VMz$XK8 zJ_HQG+^|!OM+c_Z0sx0FM}aQAgyaOn+^|!G2f~^P)Ks<>gEbxYU~#!&r>N<~)_ky4 z{%Bq}R>%G!h7;$CK05=>K+3>Cmm|6V&+y6gHu-6aubcsA;EyrD!(v)Y@KScSZoHn{ wwE<&>AtG^|C=lq$PXHEjjvPj(`h)0*%MCk4*+uLz9q2y-kr1DpfgfPt9UH7hu>b%7 diff --git a/autodoc/autodoc-core/src/main/resources/META-INF/services/javax.annotation.processing.Processor b/autodoc/autodoc-core/src/main/resources/META-INF/services/javax.annotation.processing.Processor deleted file mode 100644 index 36967d1b..00000000 --- a/autodoc/autodoc-core/src/main/resources/META-INF/services/javax.annotation.processing.Processor +++ /dev/null @@ -1 +0,0 @@ -org.eclipse.dataspaceconnector.autodoc.core.processor.EdcModuleProcessor diff --git a/autodoc/autodoc-core/build.gradle.kts b/plugins/autodoc/autodoc-core/build.gradle.kts similarity index 100% rename from autodoc/autodoc-core/build.gradle.kts rename to plugins/autodoc/autodoc-core/build.gradle.kts diff --git a/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/EdcModuleProcessor.java b/plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/EdcModuleProcessor.java similarity index 96% rename from autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/EdcModuleProcessor.java rename to plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/EdcModuleProcessor.java index 95f5c892..8951d1ff 100644 --- a/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/EdcModuleProcessor.java +++ b/plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/EdcModuleProcessor.java @@ -12,11 +12,11 @@ * */ -package org.eclipse.dataspaceconnector.autodoc.core.processor; +package org.eclipse.dataspaceconnector.plugins.autodoc.core.processor; import com.fasterxml.jackson.databind.ObjectMapper; -import org.eclipse.dataspaceconnector.autodoc.core.processor.introspection.ModuleIntrospector; -import org.eclipse.dataspaceconnector.autodoc.core.processor.introspection.OverviewIntrospector; +import org.eclipse.dataspaceconnector.plugins.autodoc.core.processor.introspection.ModuleIntrospector; +import org.eclipse.dataspaceconnector.plugins.autodoc.core.processor.introspection.OverviewIntrospector; import org.eclipse.dataspaceconnector.runtime.metamodel.annotation.Extension; import org.eclipse.dataspaceconnector.runtime.metamodel.annotation.Spi; import org.eclipse.dataspaceconnector.runtime.metamodel.domain.EdcModule; diff --git a/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationBooleanValueResolver.java b/plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/AnnotationBooleanValueResolver.java similarity index 89% rename from autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationBooleanValueResolver.java rename to plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/AnnotationBooleanValueResolver.java index ee68aca8..0667c4d8 100644 --- a/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationBooleanValueResolver.java +++ b/plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/AnnotationBooleanValueResolver.java @@ -12,7 +12,7 @@ * */ -package org.eclipse.dataspaceconnector.autodoc.core.processor.compiler; +package org.eclipse.dataspaceconnector.plugins.autodoc.core.processor.compiler; import javax.lang.model.util.SimpleAnnotationValueVisitor9; diff --git a/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationClassValuesResolver.java b/plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/AnnotationClassValuesResolver.java similarity index 93% rename from autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationClassValuesResolver.java rename to plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/AnnotationClassValuesResolver.java index 961f35c9..f89d22a8 100644 --- a/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationClassValuesResolver.java +++ b/plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/AnnotationClassValuesResolver.java @@ -12,7 +12,7 @@ * */ -package org.eclipse.dataspaceconnector.autodoc.core.processor.compiler; +package org.eclipse.dataspaceconnector.plugins.autodoc.core.processor.compiler; import java.util.List; import javax.lang.model.element.AnnotationValue; diff --git a/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationFunctions.java b/plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/AnnotationFunctions.java similarity index 98% rename from autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationFunctions.java rename to plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/AnnotationFunctions.java index de4b7058..67ef2f55 100644 --- a/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationFunctions.java +++ b/plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/AnnotationFunctions.java @@ -12,7 +12,7 @@ * */ -package org.eclipse.dataspaceconnector.autodoc.core.processor.compiler; +package org.eclipse.dataspaceconnector.plugins.autodoc.core.processor.compiler; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationLongValueResolver.java b/plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/AnnotationLongValueResolver.java similarity index 89% rename from autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationLongValueResolver.java rename to plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/AnnotationLongValueResolver.java index ee78fac5..c49a86aa 100644 --- a/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationLongValueResolver.java +++ b/plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/AnnotationLongValueResolver.java @@ -12,7 +12,7 @@ * */ -package org.eclipse.dataspaceconnector.autodoc.core.processor.compiler; +package org.eclipse.dataspaceconnector.plugins.autodoc.core.processor.compiler; import javax.lang.model.util.SimpleAnnotationValueVisitor9; diff --git a/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationStringValueResolver.java b/plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/AnnotationStringValueResolver.java similarity index 89% rename from autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationStringValueResolver.java rename to plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/AnnotationStringValueResolver.java index dd9b5859..ba78642a 100644 --- a/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationStringValueResolver.java +++ b/plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/AnnotationStringValueResolver.java @@ -12,7 +12,7 @@ * */ -package org.eclipse.dataspaceconnector.autodoc.core.processor.compiler; +package org.eclipse.dataspaceconnector.plugins.autodoc.core.processor.compiler; import javax.lang.model.util.SimpleAnnotationValueVisitor9; diff --git a/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationStringValuesResolver.java b/plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/AnnotationStringValuesResolver.java similarity index 93% rename from autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationStringValuesResolver.java rename to plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/AnnotationStringValuesResolver.java index f5008dfa..6b925c8d 100644 --- a/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationStringValuesResolver.java +++ b/plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/AnnotationStringValuesResolver.java @@ -12,7 +12,7 @@ * */ -package org.eclipse.dataspaceconnector.autodoc.core.processor.compiler; +package org.eclipse.dataspaceconnector.plugins.autodoc.core.processor.compiler; import java.util.List; import javax.lang.model.element.AnnotationValue; diff --git a/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/ElementFunctions.java b/plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/ElementFunctions.java similarity index 91% rename from autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/ElementFunctions.java rename to plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/ElementFunctions.java index f200e835..a5793ecc 100644 --- a/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/ElementFunctions.java +++ b/plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/ElementFunctions.java @@ -12,7 +12,7 @@ * */ -package org.eclipse.dataspaceconnector.autodoc.core.processor.compiler; +package org.eclipse.dataspaceconnector.plugins.autodoc.core.processor.compiler; import javax.lang.model.element.Element; diff --git a/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/VariableTypeResolver.java b/plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/VariableTypeResolver.java similarity index 90% rename from autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/VariableTypeResolver.java rename to plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/VariableTypeResolver.java index e59687be..6eb3e9a6 100644 --- a/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/VariableTypeResolver.java +++ b/plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/VariableTypeResolver.java @@ -12,7 +12,7 @@ * */ -package org.eclipse.dataspaceconnector.autodoc.core.processor.compiler; +package org.eclipse.dataspaceconnector.plugins.autodoc.core.processor.compiler; import javax.lang.model.element.VariableElement; import javax.lang.model.util.SimpleElementVisitor9; diff --git a/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/generator/JavadocConverter.java b/plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/generator/JavadocConverter.java similarity index 87% rename from autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/generator/JavadocConverter.java rename to plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/generator/JavadocConverter.java index e5ec4c3e..b6af9c1b 100644 --- a/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/generator/JavadocConverter.java +++ b/plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/generator/JavadocConverter.java @@ -12,7 +12,7 @@ * */ -package org.eclipse.dataspaceconnector.autodoc.core.processor.generator; +package org.eclipse.dataspaceconnector.plugins.autodoc.core.processor.generator; /** * Converts javadoc comment strings into any output format. diff --git a/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/introspection/ModuleIntrospector.java b/plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/introspection/ModuleIntrospector.java similarity index 90% rename from autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/introspection/ModuleIntrospector.java rename to plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/introspection/ModuleIntrospector.java index 268e0b9e..cb3c37ab 100644 --- a/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/introspection/ModuleIntrospector.java +++ b/plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/introspection/ModuleIntrospector.java @@ -12,7 +12,7 @@ * */ -package org.eclipse.dataspaceconnector.autodoc.core.processor.introspection; +package org.eclipse.dataspaceconnector.plugins.autodoc.core.processor.introspection; import org.eclipse.dataspaceconnector.runtime.metamodel.annotation.EdcSetting; import org.eclipse.dataspaceconnector.runtime.metamodel.annotation.EdcSettingContext; @@ -33,11 +33,11 @@ import javax.lang.model.util.Elements; import static java.util.stream.Collectors.toList; -import static org.eclipse.dataspaceconnector.autodoc.core.processor.compiler.AnnotationFunctions.attributeStringValues; -import static org.eclipse.dataspaceconnector.autodoc.core.processor.compiler.AnnotationFunctions.attributeTypeValues; -import static org.eclipse.dataspaceconnector.autodoc.core.processor.compiler.AnnotationFunctions.attributeValue; -import static org.eclipse.dataspaceconnector.autodoc.core.processor.compiler.AnnotationFunctions.mirrorFor; -import static org.eclipse.dataspaceconnector.autodoc.core.processor.compiler.ElementFunctions.typeFor; +import static org.eclipse.dataspaceconnector.plugins.autodoc.core.processor.compiler.AnnotationFunctions.attributeStringValues; +import static org.eclipse.dataspaceconnector.plugins.autodoc.core.processor.compiler.AnnotationFunctions.attributeTypeValues; +import static org.eclipse.dataspaceconnector.plugins.autodoc.core.processor.compiler.AnnotationFunctions.attributeValue; +import static org.eclipse.dataspaceconnector.plugins.autodoc.core.processor.compiler.AnnotationFunctions.mirrorFor; +import static org.eclipse.dataspaceconnector.plugins.autodoc.core.processor.compiler.ElementFunctions.typeFor; /** * Contains methods for introspecting the current module using the Java Compiler API. diff --git a/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/introspection/OverviewIntrospector.java b/plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/introspection/OverviewIntrospector.java similarity index 92% rename from autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/introspection/OverviewIntrospector.java rename to plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/introspection/OverviewIntrospector.java index aafe9b5b..a920ef29 100644 --- a/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/autodoc/core/processor/introspection/OverviewIntrospector.java +++ b/plugins/autodoc/autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/introspection/OverviewIntrospector.java @@ -12,9 +12,9 @@ * */ -package org.eclipse.dataspaceconnector.autodoc.core.processor.introspection; +package org.eclipse.dataspaceconnector.plugins.autodoc.core.processor.introspection; -import org.eclipse.dataspaceconnector.autodoc.core.processor.generator.JavadocConverter; +import org.eclipse.dataspaceconnector.plugins.autodoc.core.processor.generator.JavadocConverter; import org.eclipse.dataspaceconnector.runtime.metamodel.annotation.Extension; import org.eclipse.dataspaceconnector.runtime.metamodel.annotation.Spi; import org.eclipse.dataspaceconnector.runtime.metamodel.domain.ModuleType; diff --git a/autodoc/autodoc-core/src/main/resources/META-INF/gradle/incremental.annotation.processors b/plugins/autodoc/autodoc-core/src/main/resources/META-INF/gradle/incremental.annotation.processors similarity index 100% rename from autodoc/autodoc-core/src/main/resources/META-INF/gradle/incremental.annotation.processors rename to plugins/autodoc/autodoc-core/src/main/resources/META-INF/gradle/incremental.annotation.processors diff --git a/plugins/autodoc/autodoc-core/src/main/resources/META-INF/services/javax.annotation.processing.Processor b/plugins/autodoc/autodoc-core/src/main/resources/META-INF/services/javax.annotation.processing.Processor new file mode 100644 index 00000000..3db5a5e1 --- /dev/null +++ b/plugins/autodoc/autodoc-core/src/main/resources/META-INF/services/javax.annotation.processing.Processor @@ -0,0 +1 @@ +org.eclipse.dataspaceconnector.plugins.autodoc.core.processor.EdcModuleProcessor diff --git a/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationFunctionsTest.java b/plugins/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/AnnotationFunctionsTest.java similarity index 98% rename from autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationFunctionsTest.java rename to plugins/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/AnnotationFunctionsTest.java index 390b3abe..81fa4e76 100644 --- a/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/AnnotationFunctionsTest.java +++ b/plugins/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/AnnotationFunctionsTest.java @@ -12,7 +12,7 @@ * */ -package org.eclipse.dataspaceconnector.autodoc.core.processor.compiler; +package org.eclipse.dataspaceconnector.plugins.autodoc.core.processor.compiler; import org.eclipse.dataspaceconnector.runtime.metamodel.annotation.Inject; import org.eclipse.dataspaceconnector.runtime.metamodel.annotation.Provides; diff --git a/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/ElementFunctionsTest.java b/plugins/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/ElementFunctionsTest.java similarity index 93% rename from autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/ElementFunctionsTest.java rename to plugins/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/ElementFunctionsTest.java index 32d607be..0fdba0e4 100644 --- a/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/ElementFunctionsTest.java +++ b/plugins/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/ElementFunctionsTest.java @@ -12,7 +12,7 @@ * */ -package org.eclipse.dataspaceconnector.autodoc.core.processor.compiler; +package org.eclipse.dataspaceconnector.plugins.autodoc.core.processor.compiler; import org.junit.jupiter.api.Test; import org.mockito.Mockito; diff --git a/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/MockBooleanValue.java b/plugins/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/MockBooleanValue.java similarity index 91% rename from autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/MockBooleanValue.java rename to plugins/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/MockBooleanValue.java index c5abc1e4..162dbb55 100644 --- a/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/MockBooleanValue.java +++ b/plugins/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/MockBooleanValue.java @@ -12,7 +12,7 @@ * */ -package org.eclipse.dataspaceconnector.autodoc.core.processor.compiler; +package org.eclipse.dataspaceconnector.plugins.autodoc.core.processor.compiler; import javax.lang.model.element.AnnotationValue; import javax.lang.model.element.AnnotationValueVisitor; diff --git a/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/MockCollectionValues.java b/plugins/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/MockCollectionValues.java similarity index 91% rename from autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/MockCollectionValues.java rename to plugins/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/MockCollectionValues.java index 961a965b..09259169 100644 --- a/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/MockCollectionValues.java +++ b/plugins/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/MockCollectionValues.java @@ -12,7 +12,7 @@ * */ -package org.eclipse.dataspaceconnector.autodoc.core.processor.compiler; +package org.eclipse.dataspaceconnector.plugins.autodoc.core.processor.compiler; import java.util.List; import javax.lang.model.element.AnnotationValue; diff --git a/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/MockStringValue.java b/plugins/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/MockStringValue.java similarity index 91% rename from autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/MockStringValue.java rename to plugins/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/MockStringValue.java index b5559e8f..e3d1abd7 100644 --- a/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/MockStringValue.java +++ b/plugins/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/MockStringValue.java @@ -12,7 +12,7 @@ * */ -package org.eclipse.dataspaceconnector.autodoc.core.processor.compiler; +package org.eclipse.dataspaceconnector.plugins.autodoc.core.processor.compiler; import javax.lang.model.element.AnnotationValue; import javax.lang.model.element.AnnotationValueVisitor; diff --git a/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/MockTypeMirror.java b/plugins/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/MockTypeMirror.java similarity index 94% rename from autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/MockTypeMirror.java rename to plugins/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/MockTypeMirror.java index ebe73fcb..fce1931f 100644 --- a/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/MockTypeMirror.java +++ b/plugins/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/MockTypeMirror.java @@ -12,7 +12,7 @@ * */ -package org.eclipse.dataspaceconnector.autodoc.core.processor.compiler; +package org.eclipse.dataspaceconnector.plugins.autodoc.core.processor.compiler; import java.lang.annotation.Annotation; import java.util.List; diff --git a/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/MockTypeValue.java b/plugins/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/MockTypeValue.java similarity index 91% rename from autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/MockTypeValue.java rename to plugins/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/MockTypeValue.java index c0912382..6f717c7a 100644 --- a/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/autodoc/core/processor/compiler/MockTypeValue.java +++ b/plugins/autodoc/autodoc-core/src/test/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/compiler/MockTypeValue.java @@ -12,7 +12,7 @@ * */ -package org.eclipse.dataspaceconnector.autodoc.core.processor.compiler; +package org.eclipse.dataspaceconnector.plugins.autodoc.core.processor.compiler; import javax.lang.model.element.AnnotationValue; import javax.lang.model.element.AnnotationValueVisitor; diff --git a/autodoc/autodoc-plugin/build.gradle.kts b/plugins/autodoc/autodoc-plugin/build.gradle.kts similarity index 100% rename from autodoc/autodoc-plugin/build.gradle.kts rename to plugins/autodoc/autodoc-plugin/build.gradle.kts diff --git a/autodoc/autodoc-plugin/src/functionalTest/java/org/eclipse/dataspaceconnector/plugins/AutodocPluginFunctionalTest.java b/plugins/autodoc/autodoc-plugin/src/functionalTest/java/org/eclipse/dataspaceconnector/plugins/AutodocPluginFunctionalTest.java similarity index 100% rename from autodoc/autodoc-plugin/src/functionalTest/java/org/eclipse/dataspaceconnector/plugins/AutodocPluginFunctionalTest.java rename to plugins/autodoc/autodoc-plugin/src/functionalTest/java/org/eclipse/dataspaceconnector/plugins/AutodocPluginFunctionalTest.java diff --git a/autodoc/autodoc-plugin/src/main/java/org/eclipse/dataspaceconnector/plugins/AutodocPlugin.java b/plugins/autodoc/autodoc-plugin/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/AutodocPlugin.java similarity index 92% rename from autodoc/autodoc-plugin/src/main/java/org/eclipse/dataspaceconnector/plugins/AutodocPlugin.java rename to plugins/autodoc/autodoc-plugin/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/AutodocPlugin.java index dc3210ee..fcf870c9 100644 --- a/autodoc/autodoc-plugin/src/main/java/org/eclipse/dataspaceconnector/plugins/AutodocPlugin.java +++ b/plugins/autodoc/autodoc-plugin/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/AutodocPlugin.java @@ -12,7 +12,7 @@ * */ -package org.eclipse.dataspaceconnector.plugins; +package org.eclipse.dataspaceconnector.plugins.autodoc; import org.gradle.api.Plugin; import org.gradle.api.Project; diff --git a/autodoc/autodoc-plugin/src/main/java/org/eclipse/dataspaceconnector/plugins/GenerateDocumentationTask.java b/plugins/autodoc/autodoc-plugin/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/GenerateDocumentationTask.java similarity index 93% rename from autodoc/autodoc-plugin/src/main/java/org/eclipse/dataspaceconnector/plugins/GenerateDocumentationTask.java rename to plugins/autodoc/autodoc-plugin/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/GenerateDocumentationTask.java index 4b467253..89c48329 100644 --- a/autodoc/autodoc-plugin/src/main/java/org/eclipse/dataspaceconnector/plugins/GenerateDocumentationTask.java +++ b/plugins/autodoc/autodoc-plugin/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/GenerateDocumentationTask.java @@ -12,7 +12,7 @@ * */ -package org.eclipse.dataspaceconnector.plugins; +package org.eclipse.dataspaceconnector.plugins.autodoc; import org.gradle.api.DefaultTask; import org.gradle.api.tasks.TaskAction; diff --git a/autodoc/autodoc-plugin/src/test/java/org/eclipse/dataspaceconnector/plugins/AutodocPluginTest.java b/plugins/autodoc/autodoc-plugin/src/test/java/org/eclipse/dataspaceconnector/plugins/autodoc/AutodocPluginTest.java similarity index 94% rename from autodoc/autodoc-plugin/src/test/java/org/eclipse/dataspaceconnector/plugins/AutodocPluginTest.java rename to plugins/autodoc/autodoc-plugin/src/test/java/org/eclipse/dataspaceconnector/plugins/autodoc/AutodocPluginTest.java index 0985a36c..fa62999d 100644 --- a/autodoc/autodoc-plugin/src/test/java/org/eclipse/dataspaceconnector/plugins/AutodocPluginTest.java +++ b/plugins/autodoc/autodoc-plugin/src/test/java/org/eclipse/dataspaceconnector/plugins/autodoc/AutodocPluginTest.java @@ -12,7 +12,7 @@ * */ -package org.eclipse.dataspaceconnector.plugins; +package org.eclipse.dataspaceconnector.plugins.autodoc; import org.gradle.api.Project; import org.gradle.testfixtures.ProjectBuilder; diff --git a/settings.gradle.kts b/settings.gradle.kts index 1b72edda..d3a70bfd 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,5 +1,5 @@ rootProject.name = "edcPlugins" -include("autodoc:autodoc-plugin") -include("autodoc:autodoc-core") +include("plugins:autodoc:autodoc-plugin") +include("plugins:autodoc:autodoc-core") include("runtime-metamodel") From 949995f75075414516334b0e53e6884e0b4ef24c Mon Sep 17 00:00:00 2001 From: Paul Latzelsperger Date: Thu, 22 Sep 2022 10:33:11 +0200 Subject: [PATCH 5/6] add functional test module --- .../autodoc-functional-test/build.gradle.kts | 31 ++++++++ .../sample/module/OptionalService.java | 18 +++++ .../sample/module/ProvidedService1.java | 18 +++++ .../sample/module/RequiredService.java | 18 +++++ .../sample/module/SampleExtension.java | 46 ++++++++++++ .../EdcModuleProcessorExtensionTest.java | 70 +++++++++++++++++++ .../autodoc/autodoc-plugin/build.gradle.kts | 29 ++++---- settings.gradle.kts | 1 + 8 files changed, 217 insertions(+), 14 deletions(-) create mode 100644 plugins/autodoc/autodoc-functional-test/build.gradle.kts create mode 100644 plugins/autodoc/autodoc-functional-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/OptionalService.java create mode 100644 plugins/autodoc/autodoc-functional-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/ProvidedService1.java create mode 100644 plugins/autodoc/autodoc-functional-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/RequiredService.java create mode 100644 plugins/autodoc/autodoc-functional-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/SampleExtension.java create mode 100644 plugins/autodoc/autodoc-functional-test/src/test/java/org/eclipse/dataspaceconnector/tooling/sample/module/EdcModuleProcessorExtensionTest.java diff --git a/plugins/autodoc/autodoc-functional-test/build.gradle.kts b/plugins/autodoc/autodoc-functional-test/build.gradle.kts new file mode 100644 index 00000000..bc57cb71 --- /dev/null +++ b/plugins/autodoc/autodoc-functional-test/build.gradle.kts @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2022 Microsoft Corporation + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Microsoft Corporation - initial API and implementation + */ + +plugins { + `java-library` + `maven-publish` +} + +dependencies { + implementation(project(":runtime-metamodel")) + annotationProcessor(project(":plugins:autodoc:autodoc-core")) + +} + +tasks.withType { + val compilerArgs = options.compilerArgs + compilerArgs.add("-Aedc.version=${project.version}") + compilerArgs.add("-Aedc.id=${project.group}:${project.name}") + compilerArgs.add("-Aedc.location=${project.projectDir.absolutePath}/build") + outputs.upToDateWhen { false } +} \ No newline at end of file diff --git a/plugins/autodoc/autodoc-functional-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/OptionalService.java b/plugins/autodoc/autodoc-functional-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/OptionalService.java new file mode 100644 index 00000000..86dfec05 --- /dev/null +++ b/plugins/autodoc/autodoc-functional-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/OptionalService.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2022 Microsoft Corporation + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Microsoft Corporation - initial API and implementation + * + */ + +package org.eclipse.dataspaceconnector.tooling.sample.module; + +public interface OptionalService { +} diff --git a/plugins/autodoc/autodoc-functional-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/ProvidedService1.java b/plugins/autodoc/autodoc-functional-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/ProvidedService1.java new file mode 100644 index 00000000..db800e5d --- /dev/null +++ b/plugins/autodoc/autodoc-functional-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/ProvidedService1.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2022 Microsoft Corporation + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Microsoft Corporation - initial API and implementation + * + */ + +package org.eclipse.dataspaceconnector.tooling.sample.module; + +public interface ProvidedService1 { +} diff --git a/plugins/autodoc/autodoc-functional-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/RequiredService.java b/plugins/autodoc/autodoc-functional-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/RequiredService.java new file mode 100644 index 00000000..f7751c69 --- /dev/null +++ b/plugins/autodoc/autodoc-functional-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/RequiredService.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2022 Microsoft Corporation + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Microsoft Corporation - initial API and implementation + * + */ + +package org.eclipse.dataspaceconnector.tooling.sample.module; + +public interface RequiredService { +} diff --git a/plugins/autodoc/autodoc-functional-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/SampleExtension.java b/plugins/autodoc/autodoc-functional-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/SampleExtension.java new file mode 100644 index 00000000..a959c413 --- /dev/null +++ b/plugins/autodoc/autodoc-functional-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/SampleExtension.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2022 Microsoft Corporation + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Microsoft Corporation - initial API and implementation + * + */ + +package org.eclipse.dataspaceconnector.tooling.sample.module; + + +import org.eclipse.dataspaceconnector.runtime.metamodel.annotation.EdcSetting; +import org.eclipse.dataspaceconnector.runtime.metamodel.annotation.Extension; +import org.eclipse.dataspaceconnector.runtime.metamodel.annotation.Inject; +import org.eclipse.dataspaceconnector.runtime.metamodel.annotation.Provides; + +import static org.eclipse.dataspaceconnector.tooling.sample.module.SampleExtension.CATEGORY; +import static org.eclipse.dataspaceconnector.tooling.sample.module.SampleExtension.NAME; + +/** + * This is sample documentation. + */ +@Extension(value = NAME, categories = { CATEGORY }) +@Provides({ ProvidedService1.class }) +public class SampleExtension /* implements ServiceExtension */ { + public static final String NAME = "Sample Extension"; + public static final String CATEGORY = "sample"; + + public static final String PREFIX = "edc."; + + @EdcSetting(value = "This is a sample configuration value", required = true) + public static final String CONFIG1 = PREFIX + "config1"; + + @Inject + protected RequiredService requiredService; + + @Inject(required = false) + protected OptionalService optionalService; + +} diff --git a/plugins/autodoc/autodoc-functional-test/src/test/java/org/eclipse/dataspaceconnector/tooling/sample/module/EdcModuleProcessorExtensionTest.java b/plugins/autodoc/autodoc-functional-test/src/test/java/org/eclipse/dataspaceconnector/tooling/sample/module/EdcModuleProcessorExtensionTest.java new file mode 100644 index 00000000..68f0754e --- /dev/null +++ b/plugins/autodoc/autodoc-functional-test/src/test/java/org/eclipse/dataspaceconnector/tooling/sample/module/EdcModuleProcessorExtensionTest.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2022 Microsoft Corporation + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Microsoft Corporation - initial API and implementation + * + */ + +package org.eclipse.dataspaceconnector.tooling.sample.module; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.eclipse.dataspaceconnector.runtime.metamodel.domain.EdcModule; +import org.eclipse.dataspaceconnector.runtime.metamodel.domain.ServiceReference; +import org.junit.jupiter.api.Test; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Paths; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Verifies the sample extension module is introspected correctly. + */ +class EdcModuleProcessorExtensionTest { + + private static final TypeReference> TYPE_REFERENCE = new TypeReference<>() { + }; + + @Test + void verify() throws IOException { + var userdir = System.getProperty("user.dir"); //will point to the module's directory + var file = userdir + File.separator + "build" + File.separator + "edc.json"; + var url = Paths.get(file).toUri().toURL(); + assertThat(url).isNotNull(); + + try (var stream = url.openStream()) { + var manifests = new ObjectMapper().readValue(stream, TYPE_REFERENCE); + assertThat(manifests.size()).isEqualTo(1); + + var manifest = manifests.get(0); + assertThat(manifest.getName()).isEqualTo(SampleExtension.NAME); + assertThat(manifest.getCategories()).contains(SampleExtension.CATEGORY); + assertThat(manifest.getOverview()).isNotEmpty(); + + var provides = manifest.getProvides(); + assertThat(provides.size()).isEqualTo(1); + assertThat(provides.get(0).getService()).isEqualTo(ProvidedService1.class.getName()); + + var references = manifest.getReferences(); + assertThat(references.size()).isEqualTo(2); + assertThat(references).contains(new ServiceReference(OptionalService.class.getName(), false)); + assertThat(references).contains(new ServiceReference(RequiredService.class.getName(), true)); + + var configuration = manifest.getConfiguration().get(0); + assertThat(configuration).isNotNull(); + assertThat(configuration.getKey()).isEqualTo(SampleExtension.CONFIG1); + assertThat(configuration.isRequired()).isTrue(); + assertThat(configuration.getDescription()).isNotEmpty(); + } + } +} diff --git a/plugins/autodoc/autodoc-plugin/build.gradle.kts b/plugins/autodoc/autodoc-plugin/build.gradle.kts index 416ea581..69582a9b 100644 --- a/plugins/autodoc/autodoc-plugin/build.gradle.kts +++ b/plugins/autodoc/autodoc-plugin/build.gradle.kts @@ -20,23 +20,24 @@ gradlePlugin { } val groupId: String by project -// Add a source set and a task for a functional test suite -val functionalTest: SourceSet by sourceSets.creating -gradlePlugin.testSourceSets(functionalTest) - -configurations[functionalTest.implementationConfigurationName].extendsFrom(configurations.testImplementation.get()) - -val functionalTestTask = tasks.register("functionalTest") { - testClassesDirs = functionalTest.output.classesDirs - classpath = configurations[functionalTest.runtimeClasspathConfigurationName] + functionalTest.output -} -tasks.check { - // Run the functional tests as part of `check` +// Running the functionalTest with Junit 5 seems not to work as of now. Once it does, the following lines can be uncommented - // Running the functionalTest with Junit 5 does not work as of now. Once it does, the following line can be uncommented +// Add a source set and a task for a functional test suite +//val functionalTest: SourceSet by sourceSets.creating +//gradlePlugin.testSourceSets(functionalTest) +// +//configurations[functionalTest.implementationConfigurationName].extendsFrom(configurations.testImplementation.get()) +// +//val functionalTestTask = tasks.register("functionalTest") { +// testClassesDirs = functionalTest.output.classesDirs +// classpath = configurations[functionalTest.runtimeClasspathConfigurationName] + functionalTest.output +//} + +//tasks.check { +// Run the functional tests as part of `check` // dependsOn(functionalTestTask) -} +//} pluginBundle { website = "https://projects.eclipse.org/proposals/eclipse-dataspace-connector" diff --git a/settings.gradle.kts b/settings.gradle.kts index d3a70bfd..75fcf598 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -2,4 +2,5 @@ rootProject.name = "edcPlugins" include("plugins:autodoc:autodoc-plugin") include("plugins:autodoc:autodoc-core") +include("plugins:autodoc:autodoc-functional-test") include("runtime-metamodel") From 5c76ccd2948ae4617132c7233a4ee5f1e34882fd Mon Sep 17 00:00:00 2001 From: Paul Latzelsperger Date: Thu, 22 Sep 2022 14:26:43 +0200 Subject: [PATCH 6/6] moved over the spi-test module --- build.gradle.kts | 4 +- plugins/autodoc/autodoc-core/README.md | 1 + .../autodoc/autodoc-extension-test/README.md | 1 + .../build.gradle.kts | 1 - .../autodoc/test}/OptionalService.java | 2 +- .../autodoc/test}/ProvidedService1.java | 2 +- .../autodoc/test}/RequiredService.java | 2 +- .../autodoc/test}/SampleExtension.java | 6 +- .../EdcModuleProcessorExtensionTest.java | 2 +- plugins/autodoc/autodoc-plugin/README.md | 3 + plugins/autodoc/autodoc-spi-test/README.md | 2 + .../autodoc/autodoc-spi-test/build.gradle.kts | 28 +++++++++ .../sample/module/ExtensionService.java | 21 +++++++ .../tooling/sample/module/TestConstants.java | 20 +++++++ .../tooling/sample/module/package-info.java | 23 ++++++++ .../module/EdcModuleProcessorSpiTest.java | 59 +++++++++++++++++++ settings.gradle.kts | 3 +- 17 files changed, 168 insertions(+), 12 deletions(-) create mode 100644 plugins/autodoc/autodoc-core/README.md create mode 100644 plugins/autodoc/autodoc-extension-test/README.md rename plugins/autodoc/{autodoc-functional-test => autodoc-extension-test}/build.gradle.kts (97%) rename plugins/autodoc/{autodoc-functional-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module => autodoc-extension-test/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/test}/OptionalService.java (87%) rename plugins/autodoc/{autodoc-functional-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module => autodoc-extension-test/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/test}/ProvidedService1.java (87%) rename plugins/autodoc/{autodoc-functional-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module => autodoc-extension-test/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/test}/RequiredService.java (87%) rename plugins/autodoc/{autodoc-functional-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module => autodoc-extension-test/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/test}/SampleExtension.java (84%) rename plugins/autodoc/{autodoc-functional-test/src/test/java/org/eclipse/dataspaceconnector/tooling/sample/module => autodoc-extension-test/src/test/java/org/eclipse/dataspaceconnector/plugins/autodoc/test}/EdcModuleProcessorExtensionTest.java (97%) create mode 100644 plugins/autodoc/autodoc-plugin/README.md create mode 100644 plugins/autodoc/autodoc-spi-test/README.md create mode 100644 plugins/autodoc/autodoc-spi-test/build.gradle.kts create mode 100644 plugins/autodoc/autodoc-spi-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/ExtensionService.java create mode 100644 plugins/autodoc/autodoc-spi-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/TestConstants.java create mode 100644 plugins/autodoc/autodoc-spi-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/package-info.java create mode 100644 plugins/autodoc/autodoc-spi-test/src/test/java/org/eclipse/dataspaceconnector/tooling/sample/module/EdcModuleProcessorSpiTest.java diff --git a/build.gradle.kts b/build.gradle.kts index 2aa9ed28..3d57a4c1 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -31,18 +31,17 @@ if (actualVersion == "unspecified") { allprojects { apply(plugin = "checkstyle") + apply(plugin = "maven-publish") version = actualVersion group = groupId // for all gradle plugins: pluginManager.withPlugin("java-gradle-plugin") { - apply(plugin = "maven-publish") apply(plugin = "com.gradle.plugin-publish") } // for all java libs: pluginManager.withPlugin("java-library") { - apply(plugin = "maven-publish") if (!project.hasProperty("skip.signing")) { apply(plugin = "signing") @@ -112,7 +111,6 @@ allprojects { mavenCentral() } - // let's not generate any reports because that is done from within the Github Actions workflow tasks.withType { reports { diff --git a/plugins/autodoc/autodoc-core/README.md b/plugins/autodoc/autodoc-core/README.md new file mode 100644 index 00000000..ce031fc4 --- /dev/null +++ b/plugins/autodoc/autodoc-core/README.md @@ -0,0 +1 @@ +This module contains the business logic code for the `autodoc` feature, i.e. the actual annotation processor. \ No newline at end of file diff --git a/plugins/autodoc/autodoc-extension-test/README.md b/plugins/autodoc/autodoc-extension-test/README.md new file mode 100644 index 00000000..228e281b --- /dev/null +++ b/plugins/autodoc/autodoc-extension-test/README.md @@ -0,0 +1 @@ +This module contains an example extension and verifies that the correct manifest file is generated. \ No newline at end of file diff --git a/plugins/autodoc/autodoc-functional-test/build.gradle.kts b/plugins/autodoc/autodoc-extension-test/build.gradle.kts similarity index 97% rename from plugins/autodoc/autodoc-functional-test/build.gradle.kts rename to plugins/autodoc/autodoc-extension-test/build.gradle.kts index bc57cb71..e46a23dc 100644 --- a/plugins/autodoc/autodoc-functional-test/build.gradle.kts +++ b/plugins/autodoc/autodoc-extension-test/build.gradle.kts @@ -13,7 +13,6 @@ plugins { `java-library` - `maven-publish` } dependencies { diff --git a/plugins/autodoc/autodoc-functional-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/OptionalService.java b/plugins/autodoc/autodoc-extension-test/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/test/OptionalService.java similarity index 87% rename from plugins/autodoc/autodoc-functional-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/OptionalService.java rename to plugins/autodoc/autodoc-extension-test/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/test/OptionalService.java index 86dfec05..e3703510 100644 --- a/plugins/autodoc/autodoc-functional-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/OptionalService.java +++ b/plugins/autodoc/autodoc-extension-test/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/test/OptionalService.java @@ -12,7 +12,7 @@ * */ -package org.eclipse.dataspaceconnector.tooling.sample.module; +package org.eclipse.dataspaceconnector.plugins.autodoc.test; public interface OptionalService { } diff --git a/plugins/autodoc/autodoc-functional-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/ProvidedService1.java b/plugins/autodoc/autodoc-extension-test/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/test/ProvidedService1.java similarity index 87% rename from plugins/autodoc/autodoc-functional-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/ProvidedService1.java rename to plugins/autodoc/autodoc-extension-test/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/test/ProvidedService1.java index db800e5d..7515f79d 100644 --- a/plugins/autodoc/autodoc-functional-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/ProvidedService1.java +++ b/plugins/autodoc/autodoc-extension-test/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/test/ProvidedService1.java @@ -12,7 +12,7 @@ * */ -package org.eclipse.dataspaceconnector.tooling.sample.module; +package org.eclipse.dataspaceconnector.plugins.autodoc.test; public interface ProvidedService1 { } diff --git a/plugins/autodoc/autodoc-functional-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/RequiredService.java b/plugins/autodoc/autodoc-extension-test/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/test/RequiredService.java similarity index 87% rename from plugins/autodoc/autodoc-functional-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/RequiredService.java rename to plugins/autodoc/autodoc-extension-test/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/test/RequiredService.java index f7751c69..a958b4f8 100644 --- a/plugins/autodoc/autodoc-functional-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/RequiredService.java +++ b/plugins/autodoc/autodoc-extension-test/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/test/RequiredService.java @@ -12,7 +12,7 @@ * */ -package org.eclipse.dataspaceconnector.tooling.sample.module; +package org.eclipse.dataspaceconnector.plugins.autodoc.test; public interface RequiredService { } diff --git a/plugins/autodoc/autodoc-functional-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/SampleExtension.java b/plugins/autodoc/autodoc-extension-test/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/test/SampleExtension.java similarity index 84% rename from plugins/autodoc/autodoc-functional-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/SampleExtension.java rename to plugins/autodoc/autodoc-extension-test/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/test/SampleExtension.java index a959c413..bb09f62f 100644 --- a/plugins/autodoc/autodoc-functional-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/SampleExtension.java +++ b/plugins/autodoc/autodoc-extension-test/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/test/SampleExtension.java @@ -12,7 +12,7 @@ * */ -package org.eclipse.dataspaceconnector.tooling.sample.module; +package org.eclipse.dataspaceconnector.plugins.autodoc.test; import org.eclipse.dataspaceconnector.runtime.metamodel.annotation.EdcSetting; @@ -20,8 +20,8 @@ import org.eclipse.dataspaceconnector.runtime.metamodel.annotation.Inject; import org.eclipse.dataspaceconnector.runtime.metamodel.annotation.Provides; -import static org.eclipse.dataspaceconnector.tooling.sample.module.SampleExtension.CATEGORY; -import static org.eclipse.dataspaceconnector.tooling.sample.module.SampleExtension.NAME; +import static org.eclipse.dataspaceconnector.plugins.autodoc.test.SampleExtension.CATEGORY; +import static org.eclipse.dataspaceconnector.plugins.autodoc.test.SampleExtension.NAME; /** * This is sample documentation. diff --git a/plugins/autodoc/autodoc-functional-test/src/test/java/org/eclipse/dataspaceconnector/tooling/sample/module/EdcModuleProcessorExtensionTest.java b/plugins/autodoc/autodoc-extension-test/src/test/java/org/eclipse/dataspaceconnector/plugins/autodoc/test/EdcModuleProcessorExtensionTest.java similarity index 97% rename from plugins/autodoc/autodoc-functional-test/src/test/java/org/eclipse/dataspaceconnector/tooling/sample/module/EdcModuleProcessorExtensionTest.java rename to plugins/autodoc/autodoc-extension-test/src/test/java/org/eclipse/dataspaceconnector/plugins/autodoc/test/EdcModuleProcessorExtensionTest.java index 68f0754e..b2b208c9 100644 --- a/plugins/autodoc/autodoc-functional-test/src/test/java/org/eclipse/dataspaceconnector/tooling/sample/module/EdcModuleProcessorExtensionTest.java +++ b/plugins/autodoc/autodoc-extension-test/src/test/java/org/eclipse/dataspaceconnector/plugins/autodoc/test/EdcModuleProcessorExtensionTest.java @@ -12,7 +12,7 @@ * */ -package org.eclipse.dataspaceconnector.tooling.sample.module; +package org.eclipse.dataspaceconnector.plugins.autodoc.test; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/plugins/autodoc/autodoc-plugin/README.md b/plugins/autodoc/autodoc-plugin/README.md new file mode 100644 index 00000000..69166594 --- /dev/null +++ b/plugins/autodoc/autodoc-plugin/README.md @@ -0,0 +1,3 @@ +This module contains a gradle plugin the uses +the [autodoc annotation processor](../autodoc-core/src/main/java/org/eclipse/dataspaceconnector/plugins/autodoc/core/processor/EdcModuleProcessor.java) +to generate documentation and generate the manifest JSON file. \ No newline at end of file diff --git a/plugins/autodoc/autodoc-spi-test/README.md b/plugins/autodoc/autodoc-spi-test/README.md new file mode 100644 index 00000000..5343a392 --- /dev/null +++ b/plugins/autodoc/autodoc-spi-test/README.md @@ -0,0 +1,2 @@ +This module contains an example SPI, which is an interface intended to achieve extensibility +and verifies that the annotation processor generates the correct manifest. \ No newline at end of file diff --git a/plugins/autodoc/autodoc-spi-test/build.gradle.kts b/plugins/autodoc/autodoc-spi-test/build.gradle.kts new file mode 100644 index 00000000..25af4cc7 --- /dev/null +++ b/plugins/autodoc/autodoc-spi-test/build.gradle.kts @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2022 Microsoft Corporation + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Microsoft Corporation - initial API and implementation + */ + +plugins { + `java-library` +} + +dependencies { + implementation(project(":runtime-metamodel")) + annotationProcessor(project(":plugins:autodoc:autodoc-core")) +} + +tasks.withType { + val compilerArgs = options.compilerArgs + compilerArgs.add("-Aedc.version=${project.version}") + compilerArgs.add("-Aedc.id=${project.group}:${project.name}") + compilerArgs.add("-Aedc.location=${project.projectDir.absolutePath}/build") +} diff --git a/plugins/autodoc/autodoc-spi-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/ExtensionService.java b/plugins/autodoc/autodoc-spi-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/ExtensionService.java new file mode 100644 index 00000000..e1877391 --- /dev/null +++ b/plugins/autodoc/autodoc-spi-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/ExtensionService.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2022 Microsoft Corporation + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Microsoft Corporation - initial API and implementation + * + */ + +package org.eclipse.dataspaceconnector.tooling.sample.module; + +import org.eclipse.dataspaceconnector.runtime.metamodel.annotation.ExtensionPoint; + +@ExtensionPoint +public interface ExtensionService { +} diff --git a/plugins/autodoc/autodoc-spi-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/TestConstants.java b/plugins/autodoc/autodoc-spi-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/TestConstants.java new file mode 100644 index 00000000..93999ba7 --- /dev/null +++ b/plugins/autodoc/autodoc-spi-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/TestConstants.java @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2022 Microsoft Corporation + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Microsoft Corporation - initial API and implementation + * + */ + +package org.eclipse.dataspaceconnector.tooling.sample.module; + +public interface TestConstants { + + String NAME = "Sample SPI"; +} diff --git a/plugins/autodoc/autodoc-spi-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/package-info.java b/plugins/autodoc/autodoc-spi-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/package-info.java new file mode 100644 index 00000000..39e5fdfc --- /dev/null +++ b/plugins/autodoc/autodoc-spi-test/src/main/java/org/eclipse/dataspaceconnector/tooling/sample/module/package-info.java @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2022 Microsoft Corporation + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Microsoft Corporation - initial API and implementation + * + */ + +/** + * This is a sample SPI package. + */ +@Spi(value = NAME, categories = { "category" }) +package org.eclipse.dataspaceconnector.tooling.sample.module; + +import org.eclipse.dataspaceconnector.runtime.metamodel.annotation.Spi; + +import static org.eclipse.dataspaceconnector.tooling.sample.module.TestConstants.NAME; diff --git a/plugins/autodoc/autodoc-spi-test/src/test/java/org/eclipse/dataspaceconnector/tooling/sample/module/EdcModuleProcessorSpiTest.java b/plugins/autodoc/autodoc-spi-test/src/test/java/org/eclipse/dataspaceconnector/tooling/sample/module/EdcModuleProcessorSpiTest.java new file mode 100644 index 00000000..8b2bcad4 --- /dev/null +++ b/plugins/autodoc/autodoc-spi-test/src/test/java/org/eclipse/dataspaceconnector/tooling/sample/module/EdcModuleProcessorSpiTest.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2022 Microsoft Corporation + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Microsoft Corporation - initial API and implementation + * + */ + +package org.eclipse.dataspaceconnector.tooling.sample.module; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.eclipse.dataspaceconnector.runtime.metamodel.domain.EdcModule; +import org.junit.jupiter.api.Test; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Paths; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Verifies the sample extension module is introspected correctly. + */ +class EdcModuleProcessorSpiTest { + + private static final TypeReference> TYPE_REFERENCE = new TypeReference<>() { + }; + + @Test + void verify() throws IOException { + var userdir = System.getProperty("user.dir"); //will point to the module's directory + var file = userdir + File.separator + "build" + File.separator + "edc.json"; + var url = Paths.get(file).toUri().toURL(); + assertThat(url).isNotNull(); + + try (var stream = url.openStream()) { + var manifests = new ObjectMapper().readValue(stream, TYPE_REFERENCE); + assertThat(manifests.size()).isEqualTo(1); + + var manifest = manifests.get(0); + assertThat(manifest.getName()).isEqualTo(TestConstants.NAME); + assertThat(manifest.getCategories()).contains("category"); + assertThat(manifest.getOverview()).isNotEmpty(); + + var extensionPoints = manifest.getExtensionPoints(); + assertThat(extensionPoints.size()).isEqualTo(1); + assertThat(extensionPoints.get(0).getService()).isEqualTo(ExtensionService.class.getName()); + + } + } +} diff --git a/settings.gradle.kts b/settings.gradle.kts index 75fcf598..cd6e1498 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -2,5 +2,6 @@ rootProject.name = "edcPlugins" include("plugins:autodoc:autodoc-plugin") include("plugins:autodoc:autodoc-core") -include("plugins:autodoc:autodoc-functional-test") +include("plugins:autodoc:autodoc-extension-test") +include("plugins:autodoc:autodoc-spi-test") include("runtime-metamodel")