mirror of
https://github.com/moparisthebest/fernflower
synced 2024-11-30 04:52:22 -05:00
single "extends Object" omitted for type parameters (ultimate fix)
- sole "extends Object" ignored - correct decompilation of <T extends I> vs. <T exends Object & I> cases
This commit is contained in:
parent
e5a9687c94
commit
f221cd1c55
@ -411,11 +411,11 @@ public class ClassWriter {
|
||||
writer.write(descriptor.fparameters.get(i));
|
||||
|
||||
List<GenericType> lstBounds = descriptor.fbounds.get(i);
|
||||
int skip = InterpreterUtil.equalObjects(VarType.VARTYPE_OBJECT.value, lstBounds.get(0).value) ? 1 : 0;
|
||||
if(skip<lstBounds.size()) {
|
||||
if (lstBounds.size() > 1 || !"java/lang/Object".equals(lstBounds.get(0).value)) {
|
||||
writer.write(" extends ");
|
||||
writer.write(GenericMain.getGenericCastTypeName(lstBounds.get(skip)));
|
||||
for(int j=skip+1;j<lstBounds.size();j++) {
|
||||
writer.write(GenericMain.getGenericCastTypeName(lstBounds.get(0)));
|
||||
|
||||
for(int j=1;j<lstBounds.size();j++) {
|
||||
writer.write(" & " + GenericMain.getGenericCastTypeName(lstBounds.get(j)));
|
||||
}
|
||||
}
|
||||
@ -795,11 +795,11 @@ public class ClassWriter {
|
||||
bufstrwriter.write(descriptor.fparameters.get(i));
|
||||
|
||||
List<GenericType> lstBounds = descriptor.fbounds.get(i);
|
||||
int skip = InterpreterUtil.equalObjects(VarType.VARTYPE_OBJECT.value, lstBounds.get(0).value) ? 1 : 0;
|
||||
if(skip<lstBounds.size()) {
|
||||
if (lstBounds.size() > 1 || !"java/lang/Object".equals(lstBounds.get(0).value)) {
|
||||
bufstrwriter.write(" extends ");
|
||||
bufstrwriter.write(GenericMain.getGenericCastTypeName(lstBounds.get(skip)));
|
||||
for(int j=skip+1;j<lstBounds.size();j++) {
|
||||
bufstrwriter.write(GenericMain.getGenericCastTypeName(lstBounds.get(0)));
|
||||
|
||||
for(int j=1;j<lstBounds.size();j++) {
|
||||
bufstrwriter.write(" & " + GenericMain.getGenericCastTypeName(lstBounds.get(j)));
|
||||
}
|
||||
}
|
||||
|
@ -127,8 +127,8 @@ public class GenericMain {
|
||||
List<GenericType> lstBounds = new ArrayList<GenericType>();
|
||||
|
||||
for(;;) {
|
||||
if(value.charAt(0) == ':') { // empty superclass
|
||||
lstBounds.add(new GenericType(CodeConstants.TYPE_OBJECT, 0, "java/lang/Object"));
|
||||
if(value.charAt(0) == ':') {
|
||||
// empty superclass, skip
|
||||
value = value.substring(1);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user