mirror of
https://github.com/revanced/Apktool.git
synced 2025-01-08 11:05:52 +01:00
TypeName: added fromPath() and fromNameParts().
This commit is contained in:
parent
62ac6fa870
commit
70deba0c5d
@ -18,8 +18,12 @@ package brut.androlib.src;
|
|||||||
|
|
||||||
import brut.androlib.AndrolibException;
|
import brut.androlib.AndrolibException;
|
||||||
import brut.util.Duo;
|
import brut.util.Duo;
|
||||||
|
import com.google.common.base.Joiner;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.nio.file.Path;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -120,6 +124,27 @@ public class TypeName {
|
|||||||
return types;
|
return types;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static TypeName fromPath(Path path) {
|
||||||
|
List<String> parts = new ArrayList<>(path.getNameCount());
|
||||||
|
for (Path p : path) {
|
||||||
|
parts.add(p.toString());
|
||||||
|
}
|
||||||
|
return fromNameParts(parts, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static TypeName fromNameParts(List<String> parts, int array) {
|
||||||
|
String type = parts.get(parts.size() - 1);
|
||||||
|
parts = parts.subList(0, parts.size() - 1);
|
||||||
|
String innerType = null;
|
||||||
|
|
||||||
|
int pos = type.indexOf('$');
|
||||||
|
if (pos != -1) {
|
||||||
|
innerType = type.substring(pos + 1);
|
||||||
|
type = type.substring(0, pos);
|
||||||
|
}
|
||||||
|
return new TypeName(Joiner.on('.').join(parts), type, innerType, array);
|
||||||
|
}
|
||||||
|
|
||||||
public static Duo<TypeName, Integer> fetchFromInternalName(String internal)
|
public static Duo<TypeName, Integer> fetchFromInternalName(String internal)
|
||||||
throws AndrolibException {
|
throws AndrolibException {
|
||||||
String origInternal = internal;
|
String origInternal = internal;
|
||||||
@ -139,9 +164,7 @@ public class TypeName {
|
|||||||
} while (isArray);
|
} while (isArray);
|
||||||
|
|
||||||
int length = array + 1;
|
int length = array + 1;
|
||||||
String package_ = null;
|
String type;
|
||||||
String type = null;
|
|
||||||
String innerType = null;
|
|
||||||
switch (internal.charAt(0)) {
|
switch (internal.charAt(0)) {
|
||||||
case 'B':
|
case 'B':
|
||||||
type = "byte";
|
type = "byte";
|
||||||
@ -176,31 +199,13 @@ public class TypeName {
|
|||||||
throw new AndrolibException("Invalid internal name: "
|
throw new AndrolibException("Invalid internal name: "
|
||||||
+ origInternal);
|
+ origInternal);
|
||||||
}
|
}
|
||||||
length += pos;
|
return new Duo<>(fromNameParts(Arrays.asList(internal.substring(1, pos).split("/")), array), length + pos);
|
||||||
internal = internal.substring(1, pos);
|
|
||||||
|
|
||||||
pos = internal.lastIndexOf('/');
|
|
||||||
if (pos == -1) {
|
|
||||||
package_ = "";
|
|
||||||
type = internal;
|
|
||||||
} else {
|
|
||||||
package_ = internal.substring(0, pos).replace('/', '.');
|
|
||||||
type = internal.substring(pos + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
pos = type.indexOf('$');
|
|
||||||
if (pos != -1) {
|
|
||||||
innerType = type.substring(pos + 1);
|
|
||||||
type = type.substring(0, pos);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
throw new AndrolibException("Invalid internal name: "
|
throw new AndrolibException("Invalid internal name: "
|
||||||
+ origInternal);
|
+ origInternal);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Duo<TypeName, Integer>(new TypeName(package_, type,
|
return new Duo<>(new TypeName(null, type, null, array), length);
|
||||||
innerType, array), length);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Boolean mIsFileOwner;
|
private Boolean mIsFileOwner;
|
||||||
|
Loading…
Reference in New Issue
Block a user