aboutsummaryrefslogtreecommitdiff
path: root/src/eclipseAgent/lombok/eclipse/agent/Issue164Fixer.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/eclipseAgent/lombok/eclipse/agent/Issue164Fixer.java')
-rw-r--r--src/eclipseAgent/lombok/eclipse/agent/Issue164Fixer.java93
1 files changed, 0 insertions, 93 deletions
diff --git a/src/eclipseAgent/lombok/eclipse/agent/Issue164Fixer.java b/src/eclipseAgent/lombok/eclipse/agent/Issue164Fixer.java
deleted file mode 100644
index 65e04e44..00000000
--- a/src/eclipseAgent/lombok/eclipse/agent/Issue164Fixer.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package lombok.eclipse.agent;
-
-import lombok.core.debug.DebugSnapshotStore;
-
-import org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration;
-import org.eclipse.jdt.internal.compiler.ast.TypeDeclaration;
-import org.eclipse.jdt.internal.compiler.lookup.ClassScope;
-import org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope;
-import org.eclipse.jdt.internal.compiler.lookup.Scope;
-import org.objectweb.asm.ClassAdapter;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.MethodAdapter;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.commons.JSRInlinerAdapter;
-
-public class Issue164Fixer {
- public static byte[] fix(byte[] classfileBuffer) {
- return runAsm(classfileBuffer, true);
- }
-
- static class FixedClassWriter extends ClassWriter {
- FixedClassWriter(ClassReader classReader, int flags) {
- super(classReader, flags);
- }
-
- @Override protected String getCommonSuperClass(String type1, String type2) {
- //By default, ASM will attempt to live-load the class types, which will fail if meddling with classes in an
- //environment with custom classloaders, such as Equinox. It's just an optimization; returning Object is always legal.
- try {
- return super.getCommonSuperClass(type1, type2);
- } catch (Exception e) {
- return "java/lang/Object";
- }
- }
- }
-
- public static void catchScopeSet(TypeDeclaration typeDeclaration, ClassScope scope) {
- typeDeclaration.scope = scope;
- Scope sc = scope;
- while (sc != null && !(sc instanceof CompilationUnitScope)) {
- sc = sc.parent;
- }
-
- if (sc instanceof CompilationUnitScope) {
- CompilationUnitDeclaration cud = ((CompilationUnitScope) sc).referenceContext;
- DebugSnapshotStore.INSTANCE.snapshot(cud, "Scope is being set");
- }
- }
-
- /**
- * Runs ASM on the provider byteCode, chaining a reader to a writer and using the {@code ClassVisitor} you yourself provide
- * via the {@see #createClassVisitor(ClassWriter)} method as the filter.
- */
- protected static byte[] runAsm(byte[] byteCode, boolean computeFrames) {
- byte[] fixedByteCode = fixJSRInlining(byteCode);
-
- ClassReader reader = new ClassReader(fixedByteCode);
- ClassWriter writer = new FixedClassWriter(reader, computeFrames ? ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES : 0);
-
- ClassVisitor visitor = new ClassAdapter(writer) {
- @Override public MethodVisitor visitMethod(int access, final String mName, String desc, String signature, String[] exceptions) {
- return new MethodAdapter(super.visitMethod(access, mName, desc, signature, exceptions)) {
- @Override public void visitFieldInsn(int opcode, String owner, String name, String desc) {
- if (opcode == Opcodes.PUTFIELD && "org/eclipse/jdt/internal/compiler/ast/TypeDeclaration".equals(owner) && "scope".equals(name) && !"catchScopeSet".equals(mName)) {
- super.visitMethodInsn(Opcodes.INVOKESTATIC, "lombok/eclipse/agent/Issue164Fixer", "catchScopeSet", "(Lorg/eclipse/jdt/internal/compiler/ast/TypeDeclaration;Lorg/eclipse/jdt/internal/compiler/lookup/ClassScope;)V");
- } else {
- super.visitFieldInsn(opcode, owner, name, desc);
- }
- }
- };
- }
- };
- reader.accept(visitor, 0);
- return writer.toByteArray();
- }
-
- protected static byte[] fixJSRInlining(byte[] byteCode) {
- ClassReader reader = new ClassReader(byteCode);
- ClassWriter writer = new FixedClassWriter(reader, 0);
-
- ClassVisitor visitor = new ClassAdapter(writer) {
- @Override public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
- return new JSRInlinerAdapter(super.visitMethod(access, name, desc, signature, exceptions), access, name, desc, signature, exceptions);
- }
- };
-
- reader.accept(visitor, 0);
- return writer.toByteArray();
- }
-}