mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-05-26 21:35:16 +00:00
using DottedChains (almost) everywhere
This commit is contained in:
@@ -17,80 +17,144 @@
|
||||
package com.jpexs.decompiler.graph;
|
||||
|
||||
import com.jpexs.decompiler.flash.IdentifiersDeobfuscation;
|
||||
import com.jpexs.helpers.Helper;
|
||||
import java.io.File;
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author JPEXS
|
||||
*/
|
||||
public class DottedChain {
|
||||
public class DottedChain implements Serializable {
|
||||
|
||||
public final List<String> parts;
|
||||
public static final DottedChain EMPTY = new DottedChain();
|
||||
|
||||
private final String[] parts;
|
||||
|
||||
private final int hash;
|
||||
|
||||
public DottedChain(List<String> parts) {
|
||||
this.parts = new ArrayList<>(parts);
|
||||
this.parts = parts.toArray(new String[parts.size()]);
|
||||
hash = calcHash();
|
||||
}
|
||||
|
||||
public DottedChain(String... parts) {
|
||||
this.parts = new ArrayList<>();
|
||||
for (int i = 0; i < parts.length; i++) {
|
||||
this.parts.add(parts[i]);
|
||||
}
|
||||
this.parts = parts;
|
||||
hash = calcHash();
|
||||
}
|
||||
|
||||
public boolean isEmpty() {
|
||||
return parts.length == 0;
|
||||
}
|
||||
|
||||
public int size() {
|
||||
return parts.length;
|
||||
}
|
||||
|
||||
public String get(int index) {
|
||||
return parts[index];
|
||||
}
|
||||
|
||||
public DottedChain subChain(int count) {
|
||||
String[] nparts = Arrays.copyOfRange(parts, 0, count);
|
||||
return new DottedChain(nparts);
|
||||
}
|
||||
|
||||
public String getLast() {
|
||||
if (parts.isEmpty()) {
|
||||
if (parts.length == 0) {
|
||||
return "";
|
||||
} else {
|
||||
return parts.get(parts.size() - 1);
|
||||
return parts[parts.length - 1];
|
||||
}
|
||||
}
|
||||
|
||||
public DottedChain getWithoutLast() {
|
||||
List<String> nparts = new ArrayList<>(parts);
|
||||
if (!nparts.isEmpty()) {
|
||||
nparts.remove(nparts.size() - 1);
|
||||
if (parts.length < 2) {
|
||||
return EMPTY;
|
||||
}
|
||||
|
||||
String[] nparts = Arrays.copyOfRange(parts, 0, parts.length - 1);
|
||||
return new DottedChain(nparts);
|
||||
}
|
||||
|
||||
public String toPrintableString() {
|
||||
public DottedChain add(String name) {
|
||||
String[] nparts = new String[parts.length + 1];
|
||||
if (parts.length > 0) {
|
||||
System.arraycopy(parts, 0, nparts, 0, parts.length);
|
||||
}
|
||||
|
||||
nparts[nparts.length - 1] = name;
|
||||
return new DottedChain(nparts);
|
||||
}
|
||||
|
||||
private String toString(boolean as3, boolean raw) {
|
||||
if (parts.length == 0 || (parts.length == 1 && parts[0].isEmpty())) {
|
||||
return "";
|
||||
}
|
||||
|
||||
StringBuilder ret = new StringBuilder();
|
||||
for (int i = 0; i < parts.size(); i++) {
|
||||
for (int i = 0; i < parts.length; i++) {
|
||||
if (i > 0) {
|
||||
ret.append(".");
|
||||
}
|
||||
ret.append(IdentifiersDeobfuscation.printIdentifier(true, parts.get(0)));
|
||||
|
||||
String part = parts[i];
|
||||
boolean lastStar = i == parts.length - 1 && "*".equals(part);
|
||||
ret.append((raw || lastStar) ? part : IdentifiersDeobfuscation.printIdentifier(as3, part));
|
||||
}
|
||||
return ret.toString();
|
||||
}
|
||||
|
||||
public String toFilePath() {
|
||||
if (parts.length == 0 || (parts.length == 1 && parts[0].isEmpty())) {
|
||||
return "";
|
||||
}
|
||||
|
||||
StringBuilder ret = new StringBuilder();
|
||||
for (int i = 0; i < parts.length; i++) {
|
||||
if (i > 0) {
|
||||
ret.append(File.separator);
|
||||
}
|
||||
|
||||
ret.append(Helper.makeFileName(IdentifiersDeobfuscation.printIdentifier(true, parts[i])));
|
||||
}
|
||||
return ret.toString();
|
||||
}
|
||||
|
||||
public List<String> toList() {
|
||||
return new ArrayList<>(Arrays.asList(parts));
|
||||
}
|
||||
|
||||
public String toPrintableString(boolean as3) {
|
||||
return toString(as3, false);
|
||||
}
|
||||
|
||||
public String toRawString() {
|
||||
return toString(false/*ignored*/, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder ret = new StringBuilder();
|
||||
for (int i = 0; i < parts.size(); i++) {
|
||||
if (i > 0) {
|
||||
ret.append(".");
|
||||
}
|
||||
ret.append(parts.get(i));
|
||||
}
|
||||
return ret.toString();
|
||||
return toRawString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int hash = 3;
|
||||
hash = 89 * hash + Objects.hashCode(parts);
|
||||
return hash;
|
||||
}
|
||||
|
||||
private int calcHash() {
|
||||
if (parts.length > 0 && parts[0].equals("§§")) {
|
||||
int a = 1;
|
||||
}
|
||||
return Arrays.hashCode(parts);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof String) {
|
||||
obj = new DottedChain(((String) obj).split("\\."));
|
||||
}
|
||||
if (obj == null) {
|
||||
return false;
|
||||
}
|
||||
@@ -98,7 +162,7 @@ public class DottedChain {
|
||||
return false;
|
||||
}
|
||||
final DottedChain other = (DottedChain) obj;
|
||||
if (!Objects.equals(parts, other.parts)) {
|
||||
if (!Arrays.equals(parts, other.parts)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user