[yaml, kubernetes, docker-compose] numeric types now have a switch to allow/disallow quoted values

This commit is contained in:
Sergey.Anchipolevsky
2018-03-01 17:25:21 +03:00
parent ef4637e7ee
commit a3c761ef87
3 changed files with 25 additions and 13 deletions
@@ -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());
}
@@ -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());
@@ -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,