mirror of
https://github.com/GravitLauncher/Launcher
synced 2025-03-29 04:28:16 +03:00
40 lines
No EOL
1.4 KiB
Java
40 lines
No EOL
1.4 KiB
Java
package ru.gravit.launchserver.asm;
|
||
|
||
import java.util.ArrayList;
|
||
|
||
import org.objectweb.asm.ClassReader;
|
||
import org.objectweb.asm.ClassWriter;
|
||
|
||
/**
|
||
* ClassWriter с другой реализацией метода getCommonSuperClass: при его
|
||
* использовании не происходит загрузки классов.
|
||
*/
|
||
public class SafeClassWriter extends ClassWriter {
|
||
|
||
private final ClassMetadataReader classMetadataReader;
|
||
|
||
public SafeClassWriter(ClassMetadataReader classMetadataReader, int flags) {
|
||
super(flags);
|
||
this.classMetadataReader = classMetadataReader;
|
||
}
|
||
|
||
public SafeClassWriter(ClassReader classReader, ClassMetadataReader classMetadataReader, int flags) {
|
||
super(classReader, flags);
|
||
this.classMetadataReader = classMetadataReader;
|
||
}
|
||
|
||
@Override
|
||
protected String getCommonSuperClass(String type1, String type2) {
|
||
ArrayList<String> superClasses1 = classMetadataReader.getSuperClasses(type1);
|
||
ArrayList<String> superClasses2 = classMetadataReader.getSuperClasses(type2);
|
||
int size = Math.min(superClasses1.size(), superClasses2.size());
|
||
int i;
|
||
for (i = 0; i < size && superClasses1.get(i).equals(superClasses2.get(i)); i++)
|
||
;
|
||
if (i == 0)
|
||
return "java/lang/Object";
|
||
else
|
||
return superClasses1.get(i - 1);
|
||
}
|
||
|
||
} |