From 2b2249e873c4adfd2dd6e8f1f2489ccd9f6aa021 Mon Sep 17 00:00:00 2001
From: gegy1000
Date: Sat, 19 May 2018 17:02:46 +0200
Subject: Initial port to ASM
---
src/main/java/cuchaz/enigma/mapping/Signature.java | 106 ---------------------
1 file changed, 106 deletions(-)
delete mode 100644 src/main/java/cuchaz/enigma/mapping/Signature.java
(limited to 'src/main/java/cuchaz/enigma/mapping/Signature.java')
diff --git a/src/main/java/cuchaz/enigma/mapping/Signature.java b/src/main/java/cuchaz/enigma/mapping/Signature.java
deleted file mode 100644
index 78130d6..0000000
--- a/src/main/java/cuchaz/enigma/mapping/Signature.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2015 Jeff Martin.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the GNU Lesser General Public
- * License v3.0 which accompanies this distribution, and is available at
- * http://www.gnu.org/licenses/lgpl.html
- *
- * Contributors:
- * Jeff Martin - initial API and implementation
- ******************************************************************************/
-
-package cuchaz.enigma.mapping;
-
-import com.google.common.collect.Lists;
-import cuchaz.enigma.utils.Utils;
-
-import java.util.List;
-
-public class Signature {
-
- private List argumentTypes;
- private Type returnType;
-
- public Signature(String signature) {
- try {
- this.argumentTypes = Lists.newArrayList();
- int i = 0;
- while (i < signature.length()) {
- char c = signature.charAt(i);
- if (c == '(') {
- assert (this.argumentTypes.isEmpty());
- assert (this.returnType == null);
- i++;
- } else if (c == ')') {
- i++;
- break;
- } else {
- String type = Type.parseFirst(signature.substring(i));
- this.argumentTypes.add(new Type(type));
- i += type.length();
- }
- }
- this.returnType = new Type(Type.parseFirst(signature.substring(i)));
- } catch (Exception ex) {
- throw new IllegalArgumentException("Unable to parse signature: " + signature, ex);
- }
- }
-
- public Signature(Signature other, ClassNameReplacer replacer) {
- this.argumentTypes = Lists.newArrayList(other.argumentTypes);
- for (int i = 0; i < this.argumentTypes.size(); i++) {
- this.argumentTypes.set(i, new Type(this.argumentTypes.get(i), replacer));
- }
- this.returnType = new Type(other.returnType, replacer);
- }
-
- public List getArgumentTypes() {
- return this.argumentTypes;
- }
-
- public Type getReturnType() {
- return this.returnType;
- }
-
- @Override
- public String toString() {
- StringBuilder buf = new StringBuilder();
- buf.append("(");
- for (Type type : this.argumentTypes) {
- buf.append(type);
- }
- buf.append(")");
- buf.append(this.returnType);
- return buf.toString();
- }
-
- public Iterable types() {
- List types = Lists.newArrayList();
- types.addAll(this.argumentTypes);
- types.add(this.returnType);
- return types;
- }
-
- @Override
- public boolean equals(Object other) {
- return other instanceof Signature && equals((Signature) other);
- }
-
- public boolean equals(Signature other) {
- return this.argumentTypes.equals(other.argumentTypes) && this.returnType.equals(other.returnType);
- }
-
- @Override
- public int hashCode() {
- return Utils.combineHashesOrdered(this.argumentTypes.hashCode(), this.returnType.hashCode());
- }
-
- public boolean hasClass(ClassEntry classEntry) {
- for (Type type : types()) {
- if (type.hasClass() && type.getClassEntry().equals(classEntry)) {
- return true;
- }
- }
- return false;
- }
-}
--
cgit v1.2.3
From d72aad82c795726efcf6145f5a4172e4c8d3a5b2 Mon Sep 17 00:00:00 2001
From: gegy1000
Date: Sat, 19 May 2018 20:38:14 +0200
Subject: Signature refactoring
---
src/main/java/cuchaz/enigma/mapping/Signature.java | 82 ++++++++++++++++++++++
1 file changed, 82 insertions(+)
create mode 100644 src/main/java/cuchaz/enigma/mapping/Signature.java
(limited to 'src/main/java/cuchaz/enigma/mapping/Signature.java')
diff --git a/src/main/java/cuchaz/enigma/mapping/Signature.java b/src/main/java/cuchaz/enigma/mapping/Signature.java
new file mode 100644
index 0000000..071e4af
--- /dev/null
+++ b/src/main/java/cuchaz/enigma/mapping/Signature.java
@@ -0,0 +1,82 @@
+package cuchaz.enigma.mapping;
+
+import cuchaz.enigma.bytecode.translators.TranslationSignatureVisitor;
+import org.objectweb.asm.signature.SignatureReader;
+import org.objectweb.asm.signature.SignatureVisitor;
+import org.objectweb.asm.signature.SignatureWriter;
+
+import java.util.function.Function;
+import java.util.regex.Pattern;
+
+public class Signature {
+ private static final Pattern OBJECT_PATTERN = Pattern.compile(".*:Ljava/lang/Object;:.*");
+
+ private final String signature;
+ private final boolean isType;
+
+ private Signature(String signature, boolean isType) {
+ if (signature != null && OBJECT_PATTERN.matcher(signature).matches()) {
+ signature = signature.replaceAll(":Ljava/lang/Object;:", "::");
+ }
+
+ this.signature = signature;
+ this.isType = isType;
+ }
+
+ public static Signature createTypedSignature(String signature) {
+ if (signature != null && !signature.isEmpty()) {
+ return new Signature(signature, true);
+ }
+ return new Signature(null, true);
+ }
+
+ public static Signature createSignature(String signature) {
+ if (signature != null && !signature.isEmpty()) {
+ return new Signature(signature, false);
+ }
+ return new Signature(null, false);
+ }
+
+ public String getSignature() {
+ return signature;
+ }
+
+ public boolean isType() {
+ return isType;
+ }
+
+ public Signature remap(Function remapper) {
+ if (signature == null) {
+ return this;
+ }
+ SignatureWriter writer = new SignatureWriter();
+ SignatureVisitor visitor = new TranslationSignatureVisitor(remapper, writer);
+ if (isType) {
+ new SignatureReader(signature).acceptType(visitor);
+ } else {
+ new SignatureReader(signature).accept(visitor);
+ }
+ return new Signature(writer.toString(), isType);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof Signature) {
+ Signature other = (Signature) obj;
+ return (other.signature == null && signature == null || other.signature != null
+ && signature != null && other.signature.equals(signature))
+ && other.isType == this.isType;
+ }
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ return signature.hashCode() | (isType ? 1 : 0) << 16;
+ }
+
+ @Override
+ public String toString() {
+ return signature;
+ }
+}
--
cgit v1.2.3