Skip to content

Commit

Permalink
Move back inner classes
Browse files Browse the repository at this point in the history
  • Loading branch information
philwebb committed Apr 20, 2024
1 parent cb205a9 commit 55303c1
Show file tree
Hide file tree
Showing 3 changed files with 108 additions and 148 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

import java.util.List;
import java.util.Map;
import java.util.function.Function;

import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.Element;
Expand All @@ -26,6 +27,7 @@
import javax.lang.model.element.VariableElement;
import javax.lang.model.type.PrimitiveType;
import javax.lang.model.type.TypeMirror;
import javax.lang.model.util.TypeKindVisitor8;
import javax.tools.Diagnostic.Kind;

/**
Expand Down Expand Up @@ -104,4 +106,110 @@ private Object coerceValue(TypeMirror type, String value) {
return (coercedValue != null) ? coercedValue : value;
}

private static final class DefaultPrimitiveTypeVisitor extends TypeKindVisitor8<Object, Void> {

static final DefaultPrimitiveTypeVisitor INSTANCE = new DefaultPrimitiveTypeVisitor();

@Override
public Object visitPrimitiveAsBoolean(PrimitiveType t, Void ignore) {
return false;
}

@Override
public Object visitPrimitiveAsByte(PrimitiveType t, Void ignore) {
return (byte) 0;
}

@Override
public Object visitPrimitiveAsShort(PrimitiveType t, Void ignore) {
return (short) 0;
}

@Override
public Object visitPrimitiveAsInt(PrimitiveType t, Void ignore) {
return 0;
}

@Override
public Object visitPrimitiveAsLong(PrimitiveType t, Void ignore) {
return 0L;
}

@Override
public Object visitPrimitiveAsChar(PrimitiveType t, Void ignore) {
return null;
}

@Override
public Object visitPrimitiveAsFloat(PrimitiveType t, Void ignore) {
return 0F;
}

@Override
public Object visitPrimitiveAsDouble(PrimitiveType t, Void ignore) {
return 0D;
}

}

private static class DefaultValueCoercionTypeVisitor extends TypeKindVisitor8<Object, String> {

static final DefaultValueCoercionTypeVisitor INSTANCE = new DefaultValueCoercionTypeVisitor();

private <T extends Number> T parseNumber(String value, Function<String, T> parser,
PrimitiveType primitiveType) {
try {
return parser.apply(value);
}
catch (NumberFormatException ex) {
throw new IllegalArgumentException(
String.format("Invalid %s representation '%s'", primitiveType, value));
}
}

@Override
public Object visitPrimitiveAsBoolean(PrimitiveType t, String value) {
return Boolean.parseBoolean(value);
}

@Override
public Object visitPrimitiveAsByte(PrimitiveType t, String value) {
return parseNumber(value, Byte::parseByte, t);
}

@Override
public Object visitPrimitiveAsShort(PrimitiveType t, String value) {
return parseNumber(value, Short::parseShort, t);
}

@Override
public Object visitPrimitiveAsInt(PrimitiveType t, String value) {
return parseNumber(value, Integer::parseInt, t);
}

@Override
public Object visitPrimitiveAsLong(PrimitiveType t, String value) {
return parseNumber(value, Long::parseLong, t);
}

@Override
public Object visitPrimitiveAsChar(PrimitiveType t, String value) {
if (value.length() > 1) {
throw new IllegalArgumentException(String.format("Invalid character representation '%s'", value));
}
return value;
}

@Override
public Object visitPrimitiveAsFloat(PrimitiveType t, String value) {
return parseNumber(value, Float::parseFloat, t);
}

@Override
public Object visitPrimitiveAsDouble(PrimitiveType t, String value) {
return parseNumber(value, Double::parseDouble, t);
}

}

}

This file was deleted.

This file was deleted.

0 comments on commit 55303c1

Please sign in to comment.