Skip to content

Commit

Permalink
Modify how varargs state is passed to dumper
Browse files Browse the repository at this point in the history
  • Loading branch information
leibnitz27 committed Aug 12, 2022
1 parent bed06d1 commit d6f6758
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 40 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,19 @@ public JavaArrayTypeInstance(int dimensions, JavaTypeInstance underlyingType) {
this.underlyingType = underlyingType;
}

public boolean isVarArgs() { return false; }

// Return a short lived copy of this type which knows it is varargs.
// Do not retain.
public JavaArrayTypeInstance getVarArgTweak() {
return new JavaArrayTypeInstance(dimensions, underlyingType) {
@Override
public boolean isVarArgs() {
return true;
}
};
}

class Annotated implements JavaAnnotatedTypeInstance {
private final List<List<AnnotationTableEntry>> entries;
private final JavaAnnotatedTypeInstance annotatedUnderlyingType;
Expand All @@ -36,7 +49,8 @@ class Annotated implements JavaAnnotatedTypeInstance {
annotatedUnderlyingType = underlyingType.getAnnotatedInstance();
}

private Dumper dump(Dumper d, boolean isVarargs) {
@Override
public Dumper dump(Dumper d) {
annotatedUnderlyingType.dump(d);
java.util.Iterator<List<AnnotationTableEntry>> entryIterator = entries.iterator();
while (entryIterator.hasNext()) {
Expand All @@ -48,20 +62,11 @@ private Dumper dump(Dumper d, boolean isVarargs) {
d.print(' ');
}
}
d.print(isVarargs && !entryIterator.hasNext() ? "..." : "[]");
d.print(isVarArgs() && !entryIterator.hasNext() ? "..." : "[]");
}
return d;
}

@Override
public Dumper dump(Dumper d) {
return dump(d, false);
}

public Dumper dumpVarargs(Dumper d) {
return dump(d, true);
}

@Override
public JavaAnnotatedTypeIterator pathIterator() {
return new Iterator();
Expand Down Expand Up @@ -103,7 +108,12 @@ public StackType getStackType() {

@Override
public void dumpInto(Dumper d, TypeUsageInformation typeUsageInformation, TypeContext typeContext) {
toCommonString(getNumArrayDimensions(), d);
if (isVarArgs()) {
toCommonString(getNumArrayDimensions() - 1, d);
d.print(" ...");
} else {
toCommonString(getNumArrayDimensions(), d);
}
}

@Override
Expand All @@ -118,11 +128,6 @@ private void toCommonString(int numDims, Dumper d) {
}
}

void toVarargString(Dumper d) {
toCommonString(getNumArrayDimensions() - 1, d);
d.print(" ...");
}

@Override
public boolean isObject() {
return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -264,12 +264,13 @@ public void dumpDeclarationSignature(Dumper d, String methName, Method.MethodCon
LocalVariable param = parameterLValues.get(paramIdx);
if (param.isFinal()) d.print("final ");
if (varargs && (i == argssize - 1)) {
if (!(arg instanceof JavaArrayTypeInstance)) {
if (arg instanceof JavaArrayTypeInstance) {
arg = ((JavaArrayTypeInstance) arg).getVarArgTweak();
annotationsHelper.dumpParamType(arg, paramIdx, d);
} else {
d.print(" /* corrupt varargs signature?! */ ");
annotationsHelper.dumpParamType(arg, paramIdx, d);
d.dump(arg);
} else {
annotationsHelper.dumpVarargsParamType((JavaArrayTypeInstance) arg, paramIdx, d);
}
} else {
annotationsHelper.dumpParamType(arg, paramIdx, d);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,15 +80,7 @@ public boolean test(AnnotationTableTypeEntry in) {
return typeEntries;
}

void dumpParamType(JavaTypeInstance arg, int paramIdx, Dumper d) {
dumpParamType(arg, paramIdx, false, d);
}

void dumpVarargsParamType(JavaArrayTypeInstance arg, int paramIdx, Dumper d) {
dumpParamType(arg, paramIdx, true, d);
}

private void dumpParamType(JavaTypeInstance arg, final int paramIdx, boolean isVarargs, Dumper d) {
public void dumpParamType(JavaTypeInstance arg, final int paramIdx, Dumper d) {
List<AnnotationTableEntry> entries = getParameterAnnotations(paramIdx);
List<AnnotationTableTypeEntry> typeEntries = getTypeParameterAnnotations(paramIdx);
DeclarationAnnotationsInfo annotationsInfo = DeclarationAnnotationHelper.getDeclarationInfo(arg, entries, typeEntries);
Expand All @@ -104,22 +96,13 @@ private void dumpParamType(JavaTypeInstance arg, final int paramIdx, boolean isV
dumpAnnotationTableEntries(declAnnotationsToDump, d);

if (typeAnnotationsToDump.isEmpty()) {
if (isVarargs) {
((JavaArrayTypeInstance) arg).toVarargString(d);
} else {
d.dump(arg);
}
d.dump(arg);
} else {
JavaAnnotatedTypeInstance jat = arg.getAnnotatedInstance();
DecompilerComments comments = new DecompilerComments();
TypeAnnotationHelper.apply(jat, typeAnnotationsToDump, comments);
d.dump(comments);

if (isVarargs) {
((JavaArrayTypeInstance.Annotated) jat).dumpVarargs(d);
} else {
d.dump(jat);
}
d.dump(jat);
}
}
}

0 comments on commit d6f6758

Please sign in to comment.