diff options
author | Glavo <zjx001202@126.com> | 2019-12-06 03:42:00 +0800 |
---|---|---|
committer | Glavo <zjx001202@126.com> | 2019-12-06 03:42:00 +0800 |
commit | e48c0668029849af07d1966729c5b703e89b1d00 (patch) | |
tree | fec378e2c6e52d86e601f0df45ba13728003fa2b /src/main/java/org/glavo/javah/Constant.java | |
parent | 6fd5804e3f2c337839efcf5c10426faed1d8b1af (diff) | |
download | gjavah-e48c0668029849af07d1966729c5b703e89b1d00.tar.gz gjavah-e48c0668029849af07d1966729c5b703e89b1d00.tar.bz2 gjavah-e48c0668029849af07d1966729c5b703e89b1d00.zip |
update
Diffstat (limited to 'src/main/java/org/glavo/javah/Constant.java')
-rw-r--r-- | src/main/java/org/glavo/javah/Constant.java | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/src/main/java/org/glavo/javah/Constant.java b/src/main/java/org/glavo/javah/Constant.java new file mode 100644 index 0000000..1e734ba --- /dev/null +++ b/src/main/java/org/glavo/javah/Constant.java @@ -0,0 +1,83 @@ +package org.glavo.javah; + +import java.util.Arrays; +import java.util.List; +import java.util.Objects; + +import static org.glavo.javah.Utils.*; + +public final class Constant { + private static final List<Class<?>> TYPES = Arrays.asList( + Byte.class, Short.class, Integer.class, Long.class, Character.class, Float.class, Double.class + ); + + private final String name; + private final Object value; + private final String mangledName; + + public static Constant of(String name, Object value) { + Objects.requireNonNull(name); + Objects.requireNonNull(value); + + if (!TYPES.contains(value.getClass())) { + throw new IllegalArgumentException(); + } + if (!SIMPLE_NAME_PATTERN.matcher(name).matches()) { + throw new IllegalArgumentException(String.format("\"%s\" is not a qualified constant name", name)); + } + + return new Constant(name, value); + } + + private Constant(String name, Object value) { + this.name = name; + this.value = value; + this.mangledName = mangleName(name); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof Constant)) return false; + Constant constant = (Constant) o; + return name.equals(constant.name) && value.equals(constant.value); + } + + @Override + public int hashCode() { + return Objects.hash(name, value); + } + + @Override + public String toString() { + return String.format("Constant[name=%s, value=%s]", name, value); + } + + public String name() { + return name; + } + + public Object value() { + return value; + } + + public String mangledName() { + return mangledName; + } + + public String valueToString() { + if (value instanceof Double) { + return value.toString(); + } + if (value instanceof Float) { + return value + "f"; + } + if (value instanceof Long) { + return value + "i64"; + } + if (value instanceof Character) { + return ((int) (char) value) + "L"; + } + return value + "L"; + } +} |