From 7536f21e36daca64141512967b1ab8ab9ba2f17b Mon Sep 17 00:00:00 2001 From: "Bernhard J. Berger" <bernhard.berger@uni-bremen.de> Date: Wed, 8 Feb 2023 22:01:14 +0100 Subject: [PATCH] More useful error messages for constraints with wrong number of parameters. --- .../constraint/ConstraintProducer.java | 8 +++++--- .../correlation/CorrelationsProducer.java | 3 ++- .../deviation/DeviationProducer.java | 5 +++-- .../main/ea/constraints/el/LogHelper.java | 20 +++++++++++++++++++ 4 files changed, 30 insertions(+), 6 deletions(-) create mode 100644 src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/el/LogHelper.java diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/ConstraintProducer.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/ConstraintProducer.java index c80303fc..2db5c6e8 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/ConstraintProducer.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/ConstraintProducer.java @@ -11,8 +11,10 @@ import javax.enterprise.inject.Produces; import javax.inject.Named; import de.evoal.core.main.ea.constraints.el.ElHelper; +import de.evoal.core.main.ea.constraints.el.LogHelper; import de.evoal.languages.model.ddl.DataDescription; import de.evoal.languages.model.ddl.FunctionName; +import de.evoal.languages.model.ddl.dsl.DataDescriptionLanguageStandaloneSetup; import de.evoal.languages.model.el.Call; import de.evoal.core.main.ea.constraints.constraint.ast.ConditionConverter; import de.evoal.languages.model.instance.Array; @@ -20,6 +22,7 @@ import de.evoal.languages.model.instance.Attribute; import de.evoal.languages.model.instance.DataReference; import de.evoal.languages.model.instance.Instance; import lombok.extern.slf4j.Slf4j; +import org.eclipse.xtext.serializer.impl.Serializer; import java.util.Objects; import java.util.Optional; @@ -37,7 +40,6 @@ public class ConstraintProducer { @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.fitness") final Instance fitnessConfig) { this.genoSpec = genoSpec; this.fitnessSpec = toInnerSpecification(fitnessConfig); - final Constraints result = new Constraints(); constraints.stream() @@ -79,9 +81,9 @@ public class ConstraintProducer { .build(); } - private Optional<Constraint> convert(final Call constraint, DataDescription context) { + private Optional<Constraint> convert(final Call constraint, final DataDescription context) { if(constraint.getParameters().size() != 2) { - log.error("Constraint has more than two parameters. Skipping."); + LogHelper.parameterMismatch(log,"constraint", constraint, 2); return Optional.empty(); } diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/correlation/CorrelationsProducer.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/correlation/CorrelationsProducer.java index 09de44dc..0739e389 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/correlation/CorrelationsProducer.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/correlation/CorrelationsProducer.java @@ -11,6 +11,7 @@ import de.evoal.core.main.ea.constraints.el.ElHelper; import de.evoal.core.api.ea.correlations.Correlation; import de.evoal.core.api.ea.correlations.Correlations; import de.evoal.core.api.ea.correlations.RangedCorrelation; +import de.evoal.core.main.ea.constraints.el.LogHelper; import de.evoal.languages.model.ddl.DataDescription; import de.evoal.languages.model.el.Call; import lombok.extern.slf4j.Slf4j; @@ -82,7 +83,7 @@ public class CorrelationsProducer { return Optional.of(result); } else { - log.error("connection constraint has wrong number of parameters: {}", constraint.getParameters().size()); + LogHelper.parameterMismatch(log, "connection", constraint, 3); return Optional.empty(); } } diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/deviation/DeviationProducer.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/deviation/DeviationProducer.java index b1f55d12..2c9562be 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/deviation/DeviationProducer.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/deviation/DeviationProducer.java @@ -12,6 +12,7 @@ import javax.inject.Named; import de.evoal.core.main.ea.constraints.deviation.model.Deviation; import de.evoal.core.main.ea.constraints.deviation.model.Deviations; import de.evoal.core.main.ea.constraints.el.ElHelper; +import de.evoal.core.main.ea.constraints.el.LogHelper; import de.evoal.languages.model.ddl.DataDescription; import de.evoal.languages.model.el.Call; import de.evoal.languages.model.el.Expression; @@ -56,8 +57,8 @@ public class DeviationProducer { } private Optional<Deviation> convert(final Call constraint, final DataDescription context) { - if(constraint.getParameters().size() != 1) { - log.error("Deviation has more than two parameters. Skipping."); + if(constraint.getParameters().size() != 2) { + LogHelper.parameterMismatch(log, "standardDeviation", constraint, 2); return Optional.empty(); } diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/el/LogHelper.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/el/LogHelper.java new file mode 100644 index 00000000..3fec549b --- /dev/null +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/el/LogHelper.java @@ -0,0 +1,20 @@ +package de.evoal.core.main.ea.constraints.el; + +import de.evoal.languages.model.ddl.dsl.DataDescriptionLanguageStandaloneSetup; +import de.evoal.languages.model.el.Call; +import org.eclipse.xtext.serializer.impl.Serializer; +import org.slf4j.Logger; + +public final class LogHelper { + private LogHelper() {} + + public static void parameterMismatch(final Logger log, final String name, final Call call, final int expectedParameters) { + final Serializer serializer = new DataDescriptionLanguageStandaloneSetup() + .createInjector() + .getInstance(Serializer.class); + + final String representation = serializer.serialize(call).strip(); + + log.error("Call to {} has not the correct number of parameters. Expected {} parameters. Skipping call '{}'.", name, expectedParameters, representation); + } +} -- GitLab