Skip to content

Commit

Permalink
refactor(java): move ValidationConstraint to the new Model plugin (#179)
Browse files Browse the repository at this point in the history
* feat(java/maven-plugin): add ability to set plugin configuration

* refactor(java/parser-jvm-core): use PluginConfiguration interface & fix tests

* style(java/parser-jvm-core): format

* style(java/maven-plugin): format

* refactor(java/maven-plugin): address review comments

* test(java/parser-jvm-core): fix tests

* feat(java/parser-jvm-core): implement plugin manual ordering

* feat(java): add NonnullPlugin

* feat(java): add parser-jvm-utils module

* refactor(java/maven-plugin): use parser-jvm-utils

* feat(java/parser-jvm-plugins-nonnull): use parser-jvm-utils

* feat(java): add parser-jvm-utils module

* refactor(java/maven-plugin): use parser-jvm-utils

* style(java/maven-plugin): format

* style(java/parser-jvm-core): format

* refactor(java): small improvements

* refactor(java/parser-jvm-plugin-nonnull): update NonnullPluginConfig

* refactor(java/parser-jvm-utils): use interface instead of a class to fit maven reflection

* refactor(java/parser-jvm-utils): use interface instead of a class to fit maven reflection

* fix(java/parser-jvm-plugin-nonnull): add empty constructor

* fix(java/parser-jvm-utils): use merge function in ConfigList Processor

* feat(java/parser-jvm-utils): add BidirectionalMap structure

* feat(java/parser-jvm-plugin-backbone): add AssoiciationMap

* feat(java/parser-jvm-plugin-backbone): implement generic types

* feat(java/parser-jvm-plugin-backbone): implement generic types

* test(java/parser-jvm-plugin-backbone): update tests

* feat(java): add parser-jvm-test-utils package

* refactor(java/parser-jvm-plugin-nonnull): implement NonnullPlugin correctly & add tests

* fix(java/parser-jvm-plugin-nonnull): correctly detect nonnull annotations for nested classes

* style(java/parser-jvm-plugin-nonnull): format

* style(java/parser-jvm-plugin-backbone): format

* style(java/maven-plugin): format

* fix(java/parser-jvm-core): attempt to resolve null pointer exception

* chore(java/parser-jvm-plugin-nonnull): improve pom.xml

* fix(java/parser-jvm-test-utils): fix issue with incorrect resource loading

* style(java): format

* chore(java): remove debug calls & fix failing tests

* test(java/parser-jvm-plugin-backbone): fix test fixture

* test(java/parser-jvm-plugin-nonnull): add missing test fixture

* test(java/parser-jvm-plugin-nonnull): fix test fixture

* style(java/parser-jvm-plugin-backbone): format

* feat(java): introduce parser-jvm-plugin-model

* refactor(java/parser-jvm-utils): allow using ConfigList as a modifiable container & add ModelPlugin to defaults

* refactor(java/parser-jvm-plugin-backbone): remove ValidationSchemaProcessor

* style(java/parser-jvm-plugin-model): format

* test(java/parser-jvm-plugin-model): fix failing tests

* refactor(java): move AssociationMap to core & add PluginsToolset to check plugin running before/after the current one

* fix(java/maven-plugin): fix broken update

* chore(java/maven-plugin): fix model plugin dependency

* chore: add model plugin child project

* chore: simplify the pom file in jvm-plugin-model

* chore: simplify pom file in jvm-utils

* chore: move code frm instance initializer block to beforeEach

* refactor(java): address review comments

* style(java/parser-jvm-core): format

Co-authored-by: haijian <[email protected]>
  • Loading branch information
Lodin and haijian-vaadin authored Jan 21, 2022
1 parent d3173f8 commit 5dde3c6
Show file tree
Hide file tree
Showing 30 changed files with 419 additions and 205 deletions.
5 changes: 5 additions & 0 deletions packages/java/maven-plugin/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,11 @@
<artifactId>parser-jvm-plugin-nonnull</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.vaadin.fusion</groupId>
<artifactId>parser-jvm-plugin-model</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>

<build>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

import com.vaadin.fusion.parser.core.PluginConfiguration;
import com.vaadin.fusion.parser.plugins.backbone.BackbonePlugin;
import com.vaadin.fusion.parser.plugins.model.ModelPlugin;
import com.vaadin.fusion.parser.plugins.nonnull.NonnullPlugin;
import com.vaadin.fusion.parser.utils.ConfigList;

Expand Down Expand Up @@ -110,12 +111,13 @@ public boolean shouldAllDefaultsBeDisabled() {
}

static class PluginsProcessor extends ConfigList.Processor<Plugin> {
static final Set<Plugin> defaults = Set.of(
private static final Set<Plugin> defaults = Set.of(
new Plugin(BackbonePlugin.class.getName()),
new Plugin(NonnullPlugin.class.getName()));
new Plugin(NonnullPlugin.class.getName()),
new Plugin(ModelPlugin.class.getName()));

public PluginsProcessor(ConfigList<Plugin> config) {
super(config, defaults);
public PluginsProcessor() {
super(defaults);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,11 @@

final class ParserProcessor {
private final Log logger;
private final ParserConfiguration.PluginsProcessor pluginsProcessor = new ParserConfiguration.PluginsProcessor();
private final MavenProject project;
private Set<String> classPath;
private String endpointAnnotationName = "com.vaadin.fusion.Endpoint";
private String openAPIPath;
private Collection<ParserConfiguration.Plugin> plugins = ParserConfiguration.PluginsProcessor.defaults;

public ParserProcessor(MavenProject project, Log logger) {
this.project = project;
Expand Down Expand Up @@ -72,8 +72,7 @@ public ParserProcessor openAPIBase(@Nonnull String openAPIPath) {

public ParserProcessor plugins(
@Nonnull ParserConfiguration.Plugins plugins) {
this.plugins = new ParserConfiguration.PluginsProcessor(plugins)
.process();
this.pluginsProcessor.setConfig(plugins);

return this;
}
Expand Down Expand Up @@ -128,7 +127,7 @@ private void prepareOpenAPIBase(ParserConfig.Builder builder) {
private void preparePlugins(ParserConfig.Builder builder) {
// For loaded plugins we use SortedSet to have them sorted in order the
// user defined.
var loadedPlugins = plugins.stream()
var loadedPlugins = pluginsProcessor.process().stream()
.map((plugin) -> PluginManager.load(plugin.getName(),
plugin.getOrder(), plugin.getConfiguration()))
.collect(Collectors.toCollection(TreeSet::new));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,25 +1,48 @@
package com.vaadin.fusion.parser.plugins.backbone;
package com.vaadin.fusion.parser.core;

import java.util.Collections;
import java.util.IdentityHashMap;
import java.util.Map;

import com.vaadin.fusion.parser.core.RelativeClassInfo;
import com.vaadin.fusion.parser.core.RelativeFieldInfo;
import com.vaadin.fusion.parser.core.RelativeMethodInfo;
import com.vaadin.fusion.parser.core.RelativeMethodParameterInfo;
import com.vaadin.fusion.parser.core.RelativeTypeSignature;

import io.swagger.v3.oas.models.media.Schema;

public class AssociationMap {
public final class AssociationMap {
private final Map<Schema<?>, RelativeClassInfo> entities = new IdentityHashMap<>();
private final Map<Schema<?>, RelativeFieldInfo> fields = new IdentityHashMap<>();
private final Map<Schema<?>, RelativeMethodInfo> methods = new IdentityHashMap<>();
private final Map<Schema<?>, RelativeMethodParameterInfo> parameters = new IdentityHashMap<>();
private final Reversed reversed = new Reversed();
private final Map<Schema<?>, RelativeTypeSignature> types = new IdentityHashMap<>();

AssociationMap() {
}

public void addEntity(Schema<?> schema, RelativeClassInfo entity) {
entities.put(schema, entity);
reversed.entities.put(entity, schema);
}

public void addField(Schema<?> schema, RelativeFieldInfo field) {
fields.put(schema, field);
reversed.fields.put(field, schema);
}

public void addMethod(Schema<?> schema, RelativeMethodInfo method) {
methods.put(schema, method);
reversed.methods.put(method, schema);
}

public void addParameter(Schema<?> schema,
RelativeMethodParameterInfo parameter) {
parameters.put(schema, parameter);
reversed.parameters.put(parameter, schema);
}

public void addType(Schema<?> schema, RelativeTypeSignature signature) {
types.put(schema, signature);
reversed.types.put(signature, schema);
}

public Map<Schema<?>, RelativeClassInfo> getEntities() {
return Collections.unmodifiableMap(entities);
}
Expand All @@ -44,31 +67,6 @@ public Reversed reversed() {
return reversed;
}

void addEntity(Schema<?> schema, RelativeClassInfo entity) {
entities.put(schema, entity);
reversed.entities.put(entity, schema);
}

void addField(Schema<?> schema, RelativeFieldInfo field) {
fields.put(schema, field);
reversed.fields.put(field, schema);
}

void addMethod(Schema<?> schema, RelativeMethodInfo method) {
methods.put(schema, method);
reversed.methods.put(method, schema);
}

void addParameter(Schema<?> schema, RelativeMethodParameterInfo parameter) {
parameters.put(schema, parameter);
reversed.parameters.put(parameter, schema);
}

void addType(Schema<?> schema, RelativeTypeSignature signature) {
types.put(schema, signature);
reversed.types.put(signature, schema);
}

public static class Reversed {
private final Map<RelativeClassInfo, Schema<?>> entities = new IdentityHashMap<>();
private final Map<RelativeFieldInfo, Schema<?>> fields = new IdentityHashMap<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
Expand All @@ -24,7 +24,8 @@
import io.swagger.v3.oas.models.OpenAPI;

public final class ParserConfig extends AbstractParserConfig {
private final SortedSet<Plugin> plugins = new TreeSet<>();
private final SortedSet<Plugin> plugins = new TreeSet<>(
Comparator.comparingInt(Plugin::getOrder));
private Set<String> classPathElements;
private String endpointAnnotationName;
private OpenAPI openAPI;
Expand Down Expand Up @@ -53,7 +54,7 @@ public OpenAPI getOpenAPI() {
@Nonnull
@Override
public SortedSet<Plugin> getPlugins() {
return Collections.unmodifiableSortedSet(plugins);
return plugins;
}

public enum OpenAPIFileType {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,7 @@

import javax.annotation.Nonnull;

public interface Plugin extends Comparable<Plugin> {
@Override
default int compareTo(@Nonnull Plugin plugin) {
return Integer.compare(getOrder(), plugin.getOrder());
}

public interface Plugin {
void execute(@Nonnull Collection<RelativeClassInfo> endpoints,
@Nonnull Collection<RelativeClassInfo> entities,
@Nonnull SharedStorage storage);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package com.vaadin.fusion.parser.core;

import java.util.Optional;
import java.util.SortedSet;

public class PluginsToolset {
private final SortedSet<Plugin> plugins;

public PluginsToolset(SortedSet<Plugin> plugins) {
this.plugins = plugins;
}

public Optional<Integer> comparePluginOrders(Plugin current,
Plugin target) {
if (!plugins.contains(current) || !plugins.contains(target)) {
return Optional.empty();
}

return Optional.of(plugins.comparator().compare(current, target));
}

public Optional<Integer> comparePluginOrders(Plugin current,
Class<? extends Plugin> target) {
return findPluginByClass(target)
.flatMap(plugin -> comparePluginOrders(current, plugin));
}

public Optional<Integer> comparePluginOrders(
Class<? extends Plugin> current, Plugin target) {
return findPluginByClass(current)
.flatMap(plugin -> comparePluginOrders(plugin, target));
}

public Optional<Integer> comparePluginOrders(
Class<? extends Plugin> current, Class<? extends Plugin> target) {
var currentInstance = findPluginByClass(current);
var targetInstance = findPluginByClass(target);

if (currentInstance.isPresent() && targetInstance.isPresent()) {
return comparePluginOrders(currentInstance.get(),
targetInstance.get());
}

return Optional.empty();
}

public Optional<Plugin> findPluginByClass(Class<? extends Plugin> cls) {
return plugins.stream()
.filter(plugin -> cls.isAssignableFrom(plugin.getClass()))
.findFirst();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,18 @@
import io.swagger.v3.oas.models.OpenAPI;

public final class SharedStorage {
private final AssociationMap associationMap = new AssociationMap();
private final ParserConfig parserConfig;
private final Map<String, Object> pluginStorage = new HashMap<>();

SharedStorage(ParserConfig parserConfig) {
this.parserConfig = parserConfig;
}

public AssociationMap getAssociationMap() {
return associationMap;
}

public OpenAPI getOpenAPI() {
return parserConfig.getOpenAPI();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,17 @@
import com.vaadin.fusion.parser.core.SharedStorage;

public final class BackbonePlugin implements Plugin {
public static final String ASSOCIATION_MAP = "BackbonePlugin/AssociationMap";
private int order = 0;

@Override
public void execute(@Nonnull Collection<RelativeClassInfo> endpoints,
@Nonnull Collection<RelativeClassInfo> entities,
@Nonnull SharedStorage storage) {
var model = storage.getOpenAPI();
var map = new AssociationMap();
var map = storage.getAssociationMap();

new EndpointProcessor(endpoints, model, map).process();
new EntityProcessor(entities, model, map).process();
storage.getPluginStorage().put(ASSOCIATION_MAP, map);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

import javax.annotation.Nonnull;

import com.vaadin.fusion.parser.core.AssociationMap;
import com.vaadin.fusion.parser.core.RelativeClassInfo;
import com.vaadin.fusion.parser.core.RelativeMethodInfo;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

import javax.annotation.Nonnull;

import com.vaadin.fusion.parser.core.AssociationMap;
import com.vaadin.fusion.parser.core.ReflectedClass;
import com.vaadin.fusion.parser.core.RelativeClassInfo;
import com.vaadin.fusion.parser.core.RelativeFieldInfo;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

import javax.annotation.Nonnull;

import com.vaadin.fusion.parser.core.AssociationMap;
import com.vaadin.fusion.parser.core.RelativeClassInfo;

import io.swagger.v3.oas.models.OpenAPI;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import javax.annotation.Nonnull;

import com.vaadin.fusion.parser.core.ArrayRelativeTypeSignature;
import com.vaadin.fusion.parser.core.AssociationMap;
import com.vaadin.fusion.parser.core.ClassRefRelativeTypeSignature;
import com.vaadin.fusion.parser.core.RelativeTypeArgument;
import com.vaadin.fusion.parser.core.RelativeTypeParameter;
Expand Down Expand Up @@ -78,8 +79,6 @@ public Schema<?> process() {

associationMap.addType(result, signature);

new ValidationSchemaProcessor(signature, result).process();

return result;
}

Expand Down

This file was deleted.

Loading

0 comments on commit 5dde3c6

Please sign in to comment.