From e48c0668029849af07d1966729c5b703e89b1d00 Mon Sep 17 00:00:00 2001 From: Glavo Date: Fri, 6 Dec 2019 03:42:00 +0800 Subject: update --- src/main/java/org/glavo/javah/ClassName.java | 88 ++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 src/main/java/org/glavo/javah/ClassName.java (limited to 'src/main/java/org/glavo/javah/ClassName.java') diff --git a/src/main/java/org/glavo/javah/ClassName.java b/src/main/java/org/glavo/javah/ClassName.java new file mode 100644 index 0000000..4305036 --- /dev/null +++ b/src/main/java/org/glavo/javah/ClassName.java @@ -0,0 +1,88 @@ +package org.glavo.javah; + +import java.util.Objects; + +import static org.glavo.javah.Utils.*; + +public final class ClassName { + private final String moduleName; + private final String className; + private final String simpleName; + private final String mangledName; + + public static ClassName of(String moduleName, String className) { + Objects.requireNonNull(className, "Class name is null"); + + if (moduleName != null && !FULL_NAME_PATTERN.matcher(moduleName).matches()) { + throw new IllegalArgumentException("Illegal module name: " + moduleName); + } + if (!FULL_NAME_PATTERN.matcher(className).matches()) { + throw new IllegalArgumentException("Illegal class name: " + moduleName); + } + + return new ClassName(moduleName, className); + } + + public static ClassName of(String fullName) { + Objects.requireNonNull(fullName, "class name is null"); + int idx = fullName.indexOf('/'); + if (idx == -1) { + return ClassName.of(null, fullName); + } + + return ClassName.of(fullName.substring(0, idx), fullName.substring(idx + 1)); + } + + private ClassName(String moduleName, String className) { + this.moduleName = moduleName; + this.className = className; + this.simpleName = className.substring(className.lastIndexOf('.') + 1); + this.mangledName = mangleName(className); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof ClassName)) return false; + ClassName className1 = (ClassName) o; + return Objects.equals(moduleName, className1.moduleName) && className.equals(className1.className); + } + + @Override + public int hashCode() { + return Objects.hash(moduleName, className); + } + + @Override + public String toString() { + if (moduleName == null) { + return className; + } + return moduleName + '/' + className; + } + + + // + // Getters and Setters + // + + public final String moduleName() { + return moduleName; + } + + public final String className() { + return className; + } + + public final String simpleName() { + return simpleName; + } + + public final String mangledName() { + return mangledName; + } + + public final String relativePath() { + return className.replace('.', '/') + ".class"; + } +} -- cgit v1.2.3