Don't serialize signature to string to check against toString/hashCode/equals

This commit is contained in:
Alexander Udalov
2014-04-02 20:25:38 +04:00
parent 9fbe2c7cbc
commit a485f24217
@@ -96,10 +96,14 @@ public final class DescriptorResolverUtils {
public static boolean shouldBeInEnumClassObject(@NotNull JavaMethod method) {
if (!method.getContainingClass().isEnum()) return false;
String signature = JavaSignatureFormatter.getInstance().formatMethod(method);
return "values()".equals(signature) ||
"valueOf(java.lang.String)".equals(signature);
String name = method.getName().asString();
if (name.equals("values")) {
return method.getValueParameters().isEmpty();
}
else if (name.equals("valueOf")) {
return isMethodWithOneParameterWithFqName(method, "java.lang.String");
}
return false;
}
public static boolean isObjectMethodInInterface(@NotNull JavaMember member) {
@@ -107,10 +111,29 @@ public final class DescriptorResolverUtils {
}
public static boolean isObjectMethod(@NotNull JavaMethod method) {
String signature = JavaSignatureFormatter.getInstance().formatMethod(method);
return "hashCode()".equals(signature) ||
"equals(java.lang.Object)".equals(signature) ||
"toString()".equals(signature);
String name = method.getName().asString();
if (name.equals("toString") || name.equals("hashCode")) {
return method.getValueParameters().isEmpty();
}
else if (name.equals("equals")) {
return isMethodWithOneParameterWithFqName(method, "java.lang.Object");
}
return false;
}
private static boolean isMethodWithOneParameterWithFqName(@NotNull JavaMethod method, @NotNull String fqName) {
List<JavaValueParameter> parameters = method.getValueParameters();
if (parameters.size() == 1) {
JavaType type = parameters.get(0).getType();
if (type instanceof JavaClassifierType) {
JavaClassifier classifier = ((JavaClassifierType) type).getClassifier();
if (classifier instanceof JavaClass) {
FqName classFqName = ((JavaClass) classifier).getFqName();
return classFqName != null && classFqName.asString().equals(fqName);
}
}
}
return false;
}
@NotNull