From a3c761ef87dca8e308e34f2598b647c56d59e6ee Mon Sep 17 00:00:00 2001 From: "Sergey.Anchipolevsky" Date: Thu, 1 Mar 2018 17:23:12 +0300 Subject: [PATCH] [yaml, kubernetes, docker-compose] numeric types now have a switch to allow/disallow quoted values --- .../yaml/meta/model/YamlIntegerType.java | 16 ++++++++++++---- .../yaml/meta/model/YamlMetaClass.java | 5 ----- .../yaml/meta/model/YamlNumberType.java | 17 +++++++++++++---- 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/plugins/yaml/src/org/jetbrains/yaml/meta/model/YamlIntegerType.java b/plugins/yaml/src/org/jetbrains/yaml/meta/model/YamlIntegerType.java index ad2de10291c9..2a0a17af909d 100644 --- a/plugins/yaml/src/org/jetbrains/yaml/meta/model/YamlIntegerType.java +++ b/plugins/yaml/src/org/jetbrains/yaml/meta/model/YamlIntegerType.java @@ -8,24 +8,32 @@ import com.intellij.codeInspection.ProblemsHolder; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.yaml.YAMLBundle; +import org.jetbrains.yaml.psi.YAMLQuotedText; import org.jetbrains.yaml.psi.YAMLScalar; @ApiStatus.Experimental public class YamlIntegerType extends YamlScalarType { - private static final YamlIntegerType SHARED_INSTANCE = new YamlIntegerType(); + private static final YamlIntegerType SHARED_INSTANCE_NO_QUOTED_VALUES_ALLOWED = new YamlIntegerType(false); + private static final YamlIntegerType SHARED_INSTANCE_QUOTED_VALUES_ALLOWED = new YamlIntegerType(true); - public static YamlIntegerType getInstance() { - return SHARED_INSTANCE; + private final boolean myQuotedValuesAllowed; + + public static YamlIntegerType getInstance(boolean quotedValuesAllowed) { + return quotedValuesAllowed ? SHARED_INSTANCE_QUOTED_VALUES_ALLOWED : SHARED_INSTANCE_NO_QUOTED_VALUES_ALLOWED; } - public YamlIntegerType() { + public YamlIntegerType(boolean quotedValuesAllowed) { super("yaml:integer"); + myQuotedValuesAllowed = quotedValuesAllowed; setDisplayName("integer"); } @Override protected void validateScalarValue(@NotNull YAMLScalar scalarValue, @NotNull ProblemsHolder holder) { try { + if (!myQuotedValuesAllowed && scalarValue instanceof YAMLQuotedText) { + throw new NumberFormatException("no quoted values allowed"); + } //noinspection ResultOfMethodCallIgnored Integer.parseInt(scalarValue.getTextValue()); } diff --git a/plugins/yaml/src/org/jetbrains/yaml/meta/model/YamlMetaClass.java b/plugins/yaml/src/org/jetbrains/yaml/meta/model/YamlMetaClass.java index 588e92e3773a..73b0a4286201 100644 --- a/plugins/yaml/src/org/jetbrains/yaml/meta/model/YamlMetaClass.java +++ b/plugins/yaml/src/org/jetbrains/yaml/meta/model/YamlMetaClass.java @@ -52,11 +52,6 @@ public class YamlMetaClass extends YamlMetaType { return addFeature(new Field(name, YamlStringType.getInstance())); } - @NotNull - protected final Field addIntegerFeature(@NotNull String name) { - return addScalarFeature(name, YamlIntegerType.getInstance()); - } - @NotNull protected Field addBooleanFeature(@NotNull String name) { return addScalarFeature(name, YamlBooleanType.getSharedInstance()); diff --git a/plugins/yaml/src/org/jetbrains/yaml/meta/model/YamlNumberType.java b/plugins/yaml/src/org/jetbrains/yaml/meta/model/YamlNumberType.java index f8f34c7d00cf..9514af2b94f5 100644 --- a/plugins/yaml/src/org/jetbrains/yaml/meta/model/YamlNumberType.java +++ b/plugins/yaml/src/org/jetbrains/yaml/meta/model/YamlNumberType.java @@ -8,24 +8,33 @@ import com.intellij.codeInspection.ProblemsHolder; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.yaml.YAMLBundle; +import org.jetbrains.yaml.psi.YAMLQuotedText; import org.jetbrains.yaml.psi.YAMLScalar; @ApiStatus.Experimental public class YamlNumberType extends YamlScalarType { - private static final YamlNumberType SHARED_INSTANCE = new YamlNumberType(); + private static final YamlNumberType SHARED_INSTANCE_NO_QUOTED_VALUES_ALLOWED = new YamlNumberType(false); + private static final YamlNumberType SHARED_INSTANCE_QUOTED_VALUES_ALLOWED = new YamlNumberType(true); - public static YamlNumberType getInstance() { - return SHARED_INSTANCE; + private final boolean myQuotedValuesAllowed; + + public static YamlNumberType getInstance(boolean quotedValuesAllowed) { + return quotedValuesAllowed ? SHARED_INSTANCE_QUOTED_VALUES_ALLOWED : SHARED_INSTANCE_NO_QUOTED_VALUES_ALLOWED; } - public YamlNumberType() { + public YamlNumberType(boolean quotedValuesAllowed) { super("yaml:number"); + myQuotedValuesAllowed = quotedValuesAllowed; setDisplayName("number"); } @Override protected void validateScalarValue(@NotNull YAMLScalar scalarValue, @NotNull ProblemsHolder holder) { try { + if (!myQuotedValuesAllowed && scalarValue instanceof YAMLQuotedText) { + throw new NumberFormatException("no quoted values allowed"); + } + final String textValue = scalarValue.getTextValue(); // Float.parseFloat() successfully parses values like " 1.0 ", i.e. starting or ending with spaces,