mirror of
https://github.com/zaaarf/lillero-processor.git
synced 2024-11-14 05:19:20 +01:00
fix: member name mapping bugs
This commit is contained in:
parent
cc22e84eb7
commit
642373b4ac
4 changed files with 21 additions and 23 deletions
|
@ -134,7 +134,7 @@ public class ASTUtils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Finds the member name and maps it to the correct format.
|
* Finds the member name and maps it to the correct format.
|
||||||
* @param parentFQN the already mapped FQN of the parent class
|
* @param parentFQN the unobfuscated FQN of the parent class
|
||||||
* @param memberName the name of the member
|
* @param memberName the name of the member
|
||||||
* @param methodDescriptor the descriptor of the method, may be null
|
* @param methodDescriptor the descriptor of the method, may be null
|
||||||
* @param mapper the {@link ObfuscationMapper} to use, may be null
|
* @param mapper the {@link ObfuscationMapper} to use, may be null
|
||||||
|
|
|
@ -79,7 +79,7 @@ public class FieldContainer {
|
||||||
this.descriptor = descriptorFromType(this.elem.asType());
|
this.descriptor = descriptorFromType(this.elem.asType());
|
||||||
this.descriptorObf = mapper == null ? this.descriptor : mapper.obfuscateType(Type.getType(this.descriptor)).getDescriptor();
|
this.descriptorObf = mapper == null ? this.descriptor : mapper.obfuscateType(Type.getType(this.descriptor)).getDescriptor();
|
||||||
}
|
}
|
||||||
this.nameObf = findMemberName(parent.fqnObf, name, descriptor, mapper);
|
this.nameObf = findMemberName(parent.fqnObf, this.name, null, mapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -81,7 +81,7 @@ public class MethodContainer {
|
||||||
this.descriptor = descriptorFromExecutableElement(this.elem);
|
this.descriptor = descriptorFromExecutableElement(this.elem);
|
||||||
this.descriptorObf = mapper == null ? this.descriptor : mapper.obfuscateMethodDescriptor(this.descriptor);
|
this.descriptorObf = mapper == null ? this.descriptor : mapper.obfuscateMethodDescriptor(this.descriptor);
|
||||||
}
|
}
|
||||||
this.nameObf = findMemberName(parent.fqnObf, name, descriptor, mapper);
|
this.nameObf = findMemberName(parent.fqn, this.name, this.descriptor, mapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -89,10 +89,7 @@ public class ObfuscationMapper {
|
||||||
ObfuscationData data = mapper.get(parentName.replace('.', '/'));
|
ObfuscationData data = mapper.get(parentName.replace('.', '/'));
|
||||||
if(data == null)
|
if(data == null)
|
||||||
throw new MappingNotFoundException(parentName + "::" + memberName);
|
throw new MappingNotFoundException(parentName + "::" + memberName);
|
||||||
String member = data.get(memberName, methodDescriptor);
|
return data.get(memberName, methodDescriptor);
|
||||||
if(member == null)
|
|
||||||
throw new MappingNotFoundException(parentName + "::" + memberName);
|
|
||||||
return member;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -231,28 +228,29 @@ public class ObfuscationMapper {
|
||||||
* @throws AmbiguousDefinitionException if not enough data was given to uniquely identify a mapping
|
* @throws AmbiguousDefinitionException if not enough data was given to uniquely identify a mapping
|
||||||
*/
|
*/
|
||||||
public String get(String memberName, String methodDescriptor) {
|
public String get(String memberName, String methodDescriptor) {
|
||||||
if(methodDescriptor == null) {
|
//find all keys that start with the name
|
||||||
String res = members.get(memberName);
|
|
||||||
if(res != null) return res;
|
|
||||||
else {
|
|
||||||
List<String> candidates = members.keySet().stream().filter(k -> k.startsWith(memberName)).collect(Collectors.toList());
|
|
||||||
if(candidates.size() == 1)
|
|
||||||
return candidates.get(0);
|
|
||||||
else throw new AmbiguousDefinitionException("Mapper could not uniquely identify method " + this.unobf + "::" + memberName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
List<String> candidates = members.keySet().stream().filter(m -> m.startsWith(memberName)).collect(Collectors.toList());
|
List<String> candidates = members.keySet().stream().filter(m -> m.startsWith(memberName)).collect(Collectors.toList());
|
||||||
if(candidates.size() == 1)
|
if(methodDescriptor != null) {
|
||||||
return members.get(candidates.get(0));
|
String signature = String.format("%s %s", memberName, methodDescriptor);
|
||||||
String signature = memberName + " " + methodDescriptor;
|
candidates = candidates.stream().filter(m -> m.equals(signature)).collect(Collectors.toList());
|
||||||
candidates = candidates.stream().filter(m -> m.startsWith(signature)).collect(Collectors.toList());
|
}
|
||||||
switch(candidates.size()) {
|
switch(candidates.size()) {
|
||||||
case 0:
|
case 0:
|
||||||
return null;
|
throw new MappingNotFoundException(String.format(
|
||||||
|
"%s.%s%s",
|
||||||
|
this.unobf,
|
||||||
|
memberName,
|
||||||
|
methodDescriptor == null ? "" : "()"
|
||||||
|
));
|
||||||
case 1:
|
case 1:
|
||||||
return members.get(candidates.get(0));
|
return members.get(candidates.get(0));
|
||||||
default:
|
default:
|
||||||
throw new AmbiguousDefinitionException("Mapper could not uniquely identify method " + this.unobf + "::" + memberName);
|
throw new AmbiguousDefinitionException(String.format(
|
||||||
|
"Mapper could not uniquely identify member %s.%s%s",
|
||||||
|
this.unobf,
|
||||||
|
memberName,
|
||||||
|
methodDescriptor == null ? "" : "()"
|
||||||
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue