mirror of
https://github.com/revanced/smali.git
synced 2025-05-07 09:54:34 +02:00
Restart the numbering for encoded methods/fields
This commit is contained in:
parent
08840432d4
commit
87179940cb
@ -114,7 +114,7 @@ public class DexBackedClassDef implements ClassDef {
|
|||||||
public List<? extends DexBackedField> getFields() {
|
public List<? extends DexBackedField> getFields() {
|
||||||
if (classDataOffset != 0) {
|
if (classDataOffset != 0) {
|
||||||
DexReader reader = dexBuf.readerAt(classDataOffset);
|
DexReader reader = dexBuf.readerAt(classDataOffset);
|
||||||
int staticFieldCount = reader.readSmallUleb128();
|
final int staticFieldCount = reader.readSmallUleb128();
|
||||||
int instanceFieldCount = reader.readSmallUleb128();
|
int instanceFieldCount = reader.readSmallUleb128();
|
||||||
final int fieldCount = staticFieldCount + instanceFieldCount;
|
final int fieldCount = staticFieldCount + instanceFieldCount;
|
||||||
if (fieldCount > 0) {
|
if (fieldCount > 0) {
|
||||||
@ -137,6 +137,11 @@ public class DexBackedClassDef implements ClassDef {
|
|||||||
@Nonnull
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
protected DexBackedField readItem(@Nonnull DexReader reader, int index) {
|
protected DexBackedField readItem(@Nonnull DexReader reader, int index) {
|
||||||
|
if (index == staticFieldCount) {
|
||||||
|
// We reached the end of the static field, restart the numbering for
|
||||||
|
// instance fields
|
||||||
|
previousFieldIndex = 0;
|
||||||
|
}
|
||||||
DexBackedField item = new DexBackedField(reader, previousFieldIndex,
|
DexBackedField item = new DexBackedField(reader, previousFieldIndex,
|
||||||
staticInitialValueIterator, annotationIterator);
|
staticInitialValueIterator, annotationIterator);
|
||||||
previousFieldIndex = item.fieldIndex;
|
previousFieldIndex = item.fieldIndex;
|
||||||
@ -145,6 +150,11 @@ public class DexBackedClassDef implements ClassDef {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void skipItem(@Nonnull DexReader reader, int index) {
|
protected void skipItem(@Nonnull DexReader reader, int index) {
|
||||||
|
if (index == staticFieldCount) {
|
||||||
|
// We reached the end of the static field, restart the numbering for
|
||||||
|
// instance fields
|
||||||
|
previousFieldIndex = 0;
|
||||||
|
}
|
||||||
previousFieldIndex = DexBackedField.skipEncodedField(reader, previousFieldIndex);
|
previousFieldIndex = DexBackedField.skipEncodedField(reader, previousFieldIndex);
|
||||||
staticInitialValueIterator.skipNext();
|
staticInitialValueIterator.skipNext();
|
||||||
}
|
}
|
||||||
@ -165,7 +175,7 @@ public class DexBackedClassDef implements ClassDef {
|
|||||||
DexReader reader = dexBuf.readerAt(classDataOffset);
|
DexReader reader = dexBuf.readerAt(classDataOffset);
|
||||||
int staticFieldCount = reader.readSmallUleb128();
|
int staticFieldCount = reader.readSmallUleb128();
|
||||||
int instanceFieldCount = reader.readSmallUleb128();
|
int instanceFieldCount = reader.readSmallUleb128();
|
||||||
int directMethodCount = reader.readSmallUleb128();
|
final int directMethodCount = reader.readSmallUleb128();
|
||||||
int virtualMethodCount = reader.readSmallUleb128();
|
int virtualMethodCount = reader.readSmallUleb128();
|
||||||
final int methodCount = directMethodCount + virtualMethodCount;
|
final int methodCount = directMethodCount + virtualMethodCount;
|
||||||
if (methodCount > 0) {
|
if (methodCount > 0) {
|
||||||
@ -183,12 +193,15 @@ public class DexBackedClassDef implements ClassDef {
|
|||||||
annotationsDirectory.getMethodAnnotationIterator();
|
annotationsDirectory.getMethodAnnotationIterator();
|
||||||
@Nonnull private final AnnotationsDirectory.AnnotationIterator parameterAnnotationIterator =
|
@Nonnull private final AnnotationsDirectory.AnnotationIterator parameterAnnotationIterator =
|
||||||
annotationsDirectory.getParameterAnnotationIterator();
|
annotationsDirectory.getParameterAnnotationIterator();
|
||||||
@Nonnull private final StaticInitialValueIterator staticInitialValueIterator =
|
|
||||||
StaticInitialValueIterator.newOrEmpty(dexBuf, staticInitialValuesOffset);
|
|
||||||
|
|
||||||
@Nonnull
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
protected DexBackedMethod readItem(@Nonnull DexReader reader, int index) {
|
protected DexBackedMethod readItem(@Nonnull DexReader reader, int index) {
|
||||||
|
if (index == directMethodCount) {
|
||||||
|
// We reached the end of the direct methods, restart the numbering for
|
||||||
|
// virtual methods
|
||||||
|
previousMethodIndex = 0;
|
||||||
|
}
|
||||||
DexBackedMethod item = new DexBackedMethod(reader, previousMethodIndex,
|
DexBackedMethod item = new DexBackedMethod(reader, previousMethodIndex,
|
||||||
methodAnnotationIterator, parameterAnnotationIterator);
|
methodAnnotationIterator, parameterAnnotationIterator);
|
||||||
previousMethodIndex = item.methodIndex;
|
previousMethodIndex = item.methodIndex;
|
||||||
@ -197,8 +210,12 @@ public class DexBackedClassDef implements ClassDef {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void skipItem(@Nonnull DexReader reader, int index) {
|
protected void skipItem(@Nonnull DexReader reader, int index) {
|
||||||
|
if (index == directMethodCount) {
|
||||||
|
// We reached the end of the direct methods, restart the numbering for
|
||||||
|
// virtual methods
|
||||||
|
previousMethodIndex = 0;
|
||||||
|
}
|
||||||
previousMethodIndex = DexBackedMethod.skipEncodedMethod(reader, previousMethodIndex);
|
previousMethodIndex = DexBackedMethod.skipEncodedMethod(reader, previousMethodIndex);
|
||||||
staticInitialValueIterator.skipNext();
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user