diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f53862e..6ccdb96e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ ## Next -* **Bump required pmd-core version to 7.0.0-rc3.** +* **Bump required pmd-core version to 7.0.0-SNAPSHOT.** **Fixed issues:** diff --git a/pom.xml b/pom.xml index 45bfdeb5..61250560 100644 --- a/pom.xml +++ b/pom.xml @@ -54,7 +54,7 @@ - 7.0.0-rc3 + 7.0.0-SNAPSHOT 11.0.2 8 1.7.20 diff --git a/src/main/java/net/sourceforge/pmd/util/fxdesigner/model/PropertyDescriptorSpec.java b/src/main/java/net/sourceforge/pmd/util/fxdesigner/model/PropertyDescriptorSpec.java index 8eadb0e3..51b9add8 100644 --- a/src/main/java/net/sourceforge/pmd/util/fxdesigner/model/PropertyDescriptorSpec.java +++ b/src/main/java/net/sourceforge/pmd/util/fxdesigner/model/PropertyDescriptorSpec.java @@ -5,17 +5,14 @@ package net.sourceforge.pmd.util.fxdesigner.model; -import java.util.HashMap; -import java.util.Map; - import org.reactfx.EventStream; import org.reactfx.value.Val; import org.reactfx.value.Var; +import net.sourceforge.pmd.properties.NumericConstraints; +import net.sourceforge.pmd.properties.PropertyBuilder; import net.sourceforge.pmd.properties.PropertyDescriptor; -import net.sourceforge.pmd.properties.PropertyDescriptorField; import net.sourceforge.pmd.properties.PropertyTypeId; -import net.sourceforge.pmd.properties.builders.PropertyDescriptorExternalBuilder; import net.sourceforge.pmd.util.fxdesigner.util.beans.SettingsOwner; import net.sourceforge.pmd.util.fxdesigner.util.beans.SettingsPersistenceUtil.PersistentProperty; @@ -40,8 +37,35 @@ public class PropertyDescriptorSpec implements SettingsOwner { public PropertyDescriptorSpec() { - isNumerical = typeId.map(PropertyTypeId::isPropertyNumeric); - isMultivalue = typeId.map(PropertyTypeId::isPropertyMultivalue); + isNumerical = typeId.map(this::isPropertyNumeric); + isMultivalue = typeId.map(this::isPropertyMultivalue); + } + + private Boolean isPropertyMultivalue(PropertyTypeId propertyTypeId) { + switch (propertyTypeId) { + case DOUBLE_LIST: + case LONG_LIST: + case STRING_LIST: + case INTEGER_LIST: + case CHARACTER_LIST: + return true; + default: + return false; + } + } + + private Boolean isPropertyNumeric(PropertyTypeId propertyTypeId) { + switch (propertyTypeId) { + case LONG: + case DOUBLE: + case INTEGER: + case LONG_LIST: + case DOUBLE_LIST: + case INTEGER_LIST: + return true; + default: + return false; + } } @@ -161,20 +185,19 @@ public PropertyDescriptorSpec deepCopy() { * @return the descriptor if it can be built */ public PropertyDescriptor build() { - PropertyDescriptorExternalBuilder externalBuilder = getTypeId().getFactory(); - Map values = new HashMap<>(); - values.put(PropertyDescriptorField.NAME, getName()); - values.put(PropertyDescriptorField.DEFAULT_VALUE, getValue()); - values.put(PropertyDescriptorField.DESCRIPTION, getDescription()); - values.put(PropertyDescriptorField.MIN, "-2000000"); - values.put(PropertyDescriptorField.MAX, "+2000000"); - - return externalBuilder.build(values); + PropertyBuilder propertyBuilder = getTypeId().getBuilderUtils().newBuilder(getName()); + Object defaultValue = getTypeId().getBuilderUtils().getXmlMapper().fromString(getValue()); + propertyBuilder.desc(getDescription()); + propertyBuilder.defaultValue(defaultValue); + if (isPropertyNumeric(getTypeId())) { + propertyBuilder.require(NumericConstraints.inRange(-2_000_000, +2_000_000)); + } + return propertyBuilder.build(); } Object parseValue() { - return build().valueFrom(getValue()); + return getTypeId().getBuilderUtils().getXmlMapper().fromString(getValue()); } diff --git a/src/main/java/net/sourceforge/pmd/util/fxdesigner/model/XPathEvaluator.java b/src/main/java/net/sourceforge/pmd/util/fxdesigner/model/XPathEvaluator.java index b45ae6ac..0f7f98a7 100644 --- a/src/main/java/net/sourceforge/pmd/util/fxdesigner/model/XPathEvaluator.java +++ b/src/main/java/net/sourceforge/pmd/util/fxdesigner/model/XPathEvaluator.java @@ -87,8 +87,9 @@ public static List evaluateQuery(Node compilationUnit, Map> descriptors = properties.stream().collect(Collectors.toMap(PropertyDescriptorSpec::getName, PropertyDescriptorSpec::build)); // Take in all set values or defaults Map, Object> allProperties = - descriptors.entrySet().stream() - .collect(Collectors.>, PropertyDescriptor, Object>toMap(e -> e.getValue(), e -> propertyValues.containsKey(e.getKey()) ? e.getValue().valueFrom(propertyValues.get(e.getKey())) : e.getValue().defaultValue())); + descriptors.entrySet().stream() + .collect(Collectors.>, PropertyDescriptor, Object>toMap( + e -> e.getValue(), e -> propertyValues.containsKey(e.getKey()) ? e.getValue().serializer().fromString(propertyValues.get(e.getKey())) : e.getValue().defaultValue())); SaxonXPathRuleQuery xpathRule = new SaxonXPathRuleQuery( diff --git a/src/main/java/net/sourceforge/pmd/util/fxdesigner/model/export/LiveTreeRenderer.java b/src/main/java/net/sourceforge/pmd/util/fxdesigner/model/export/LiveTreeRenderer.java index a1ba51cc..508fa1ab 100644 --- a/src/main/java/net/sourceforge/pmd/util/fxdesigner/model/export/LiveTreeRenderer.java +++ b/src/main/java/net/sourceforge/pmd/util/fxdesigner/model/export/LiveTreeRenderer.java @@ -86,10 +86,10 @@ public String dumpSubtree(Node n) throws Exception { private static String getValueAsString(PropertyDescriptor d) { - return d.asDelimitedString(d.defaultValue()); + return d.serializer().toString(d.defaultValue()); } private static void setProperty(PropertySource bundle, PropertyDescriptor d, String value) { - bundle.setProperty(d, d.valueFrom(value)); + bundle.setProperty(d, d.serializer().fromString(value)); } } diff --git a/src/main/java/net/sourceforge/pmd/util/fxdesigner/popups/EditPropertyDialogController.java b/src/main/java/net/sourceforge/pmd/util/fxdesigner/popups/EditPropertyDialogController.java index 218683e4..cc25d21c 100644 --- a/src/main/java/net/sourceforge/pmd/util/fxdesigner/popups/EditPropertyDialogController.java +++ b/src/main/java/net/sourceforge/pmd/util/fxdesigner/popups/EditPropertyDialogController.java @@ -4,8 +4,6 @@ package net.sourceforge.pmd.util.fxdesigner.popups; -import static net.sourceforge.pmd.properties.MultiValuePropertyDescriptor.DEFAULT_DELIMITER; -import static net.sourceforge.pmd.properties.MultiValuePropertyDescriptor.DEFAULT_NUMERIC_DELIMITER; import static net.sourceforge.pmd.util.fxdesigner.util.DesignerUtil.rewireInit; import java.net.URL; @@ -20,9 +18,8 @@ import org.reactfx.util.Try; import org.reactfx.value.Var; +import net.sourceforge.pmd.properties.PropertySerializer; import net.sourceforge.pmd.properties.PropertyTypeId; -import net.sourceforge.pmd.properties.ValueParser; -import net.sourceforge.pmd.properties.ValueParserConstants; import net.sourceforge.pmd.util.fxdesigner.app.ApplicationComponent; import net.sourceforge.pmd.util.fxdesigner.app.DesignerRoot; import net.sourceforge.pmd.util.fxdesigner.model.PropertyDescriptorSpec; @@ -141,20 +138,15 @@ private void registerBasicValidators() { private void registerTypeDependentValidators(PropertyTypeId typeId) { Validator valueValidator = (c, val) -> ValidationResult.fromErrorIf(valueField, "The value couldn't be parsed", - Try.tryGet(() -> getValueParser(typeId).valueOf(getValue())).isFailure()); + Try.tryGet(() -> getValueParser(typeId).fromString(getValue())).isFailure()); validationSupport.registerValidator(valueField, valueValidator); } - private ValueParser getValueParser(PropertyTypeId typeId) { - ValueParser parser = typeId.getValueParser(); - if (typeId.isPropertyMultivalue()) { - char delimiter = typeId.isPropertyNumeric() ? DEFAULT_NUMERIC_DELIMITER : DEFAULT_DELIMITER; - parser = ValueParserConstants.multi(parser, delimiter); - } - return parser; + private PropertySerializer getValueParser(PropertyTypeId typeId) { + return typeId.getBuilderUtils().getXmlMapper(); } diff --git a/src/main/java/net/sourceforge/pmd/util/fxdesigner/util/AuxLanguageRegistry.java b/src/main/java/net/sourceforge/pmd/util/fxdesigner/util/AuxLanguageRegistry.java index 4c3fda8b..574362a9 100644 --- a/src/main/java/net/sourceforge/pmd/util/fxdesigner/util/AuxLanguageRegistry.java +++ b/src/main/java/net/sourceforge/pmd/util/fxdesigner/util/AuxLanguageRegistry.java @@ -75,7 +75,7 @@ public static boolean isXmlDialect(Language language) { } } - public static Language plainTextLanguage() { + public static PlainTextLanguage plainTextLanguage() { return PlainTextLanguage.getInstance(); } diff --git a/src/test/kotlin/net/sourceforge/pmd/util/fxdesigner/util/codearea/PlainTextLanguageTest.kt b/src/test/kotlin/net/sourceforge/pmd/util/fxdesigner/util/codearea/PlainTextLanguageTest.kt index 4a94683d..b2dde9a8 100644 --- a/src/test/kotlin/net/sourceforge/pmd/util/fxdesigner/util/codearea/PlainTextLanguageTest.kt +++ b/src/test/kotlin/net/sourceforge/pmd/util/fxdesigner/util/codearea/PlainTextLanguageTest.kt @@ -10,6 +10,7 @@ import io.kotest.matchers.shouldBe import io.kotest.matchers.shouldNotBe import net.sourceforge.pmd.lang.LanguageProcessorRegistry import net.sourceforge.pmd.lang.PlainTextLanguage.PlainTextFile +import net.sourceforge.pmd.lang.PmdCapableLanguage import net.sourceforge.pmd.lang.ast.Parser import net.sourceforge.pmd.lang.ast.SemanticErrorReporter import net.sourceforge.pmd.lang.ast.test.IntelliMarker @@ -54,7 +55,7 @@ class PlainTextLanguageTest : IntelliMarker, FunSpec({ }) private fun String.parse(): PlainTextFile { - val lang = AuxLanguageRegistry.plainTextLanguage() + val lang : PmdCapableLanguage = AuxLanguageRegistry.plainTextLanguage() lang.defaultVersion shouldNotBe null