// Path: core/src/main/java/net/onedaybeard/constexpr/inspect/FieldDescriptor.java
// public class FieldDescriptor {
// 	public final int access;
// 	public final String name;
// 	public final String desc;
// 	public final String signature;
// 	public final Object value;
// 
// 	public boolean isConstExpr;
// 
// 	public FieldDescriptor(int access, String name, String desc, String signature, Object value) {
// 		this.access = access;
// 		this.name = name;
// 		this.desc = desc;
// 		this.signature = signature;
// 		this.value = value;
// 	}
// 
// 	public void validate() {
// 		if (!isConstExpr)
// 			return;
// 
// 		int access = this.access & (STATIC | FINAL);
// 		if (access != (STATIC | FINAL))
// 			throw new InvalidConstExprException("fields must be 'static final'", this);
// 
// 		boolean isPrimitive = desc.length() == 1;
// 		if (!isPrimitive && !isString())
// 			throw new InvalidConstExprException("fields can only be primitive values or strings", this);
// 	}
// 
// 	private boolean isString() {
// 		return desc.equals(Type.getDescriptor(String.class));
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return "FieldDescriptor[" +
// 			"access=" + access +
// 			" name='" + name + '\'' +
// 			" desc='" + desc + '\'' +
// 			" signature='" + signature + '\'' +
// 			" value=" + value +
// 			" isConstExpr=" + isConstExpr +
// 			']';
// 	}
// }


import net.onedaybeard.constexpr.inspect.FieldDescriptor;
import org.objectweb.asm.AnnotationVisitor;
import org.objectweb.asm.FieldVisitor;
import org.objectweb.asm.Opcodes;
import java.lang.annotation.Annotation;
package net.onedaybeard.constexpr.visitor;



class FieldAnnotationScanner extends FieldVisitor {
	private final FieldDescriptor field;
	private AnnotationScanner<FieldDescriptor> scanner;

	public FieldAnnotationScanner(FieldVisitor fv,
	                              FieldDescriptor field) {

		super(Opcodes.ASM5, fv);
		this.field = field;
	}

	public FieldAnnotationScanner scanFor(Class<? extends Annotation> annotation,
// Path: core/src/main/java/net/onedaybeard/constexpr/inspect/FieldDescriptor.java
// public class FieldDescriptor {
// 	public final int access;
// 	public final String name;
// 	public final String desc;
// 	public final String signature;
// 	public final Object value;
// 
// 	public boolean isConstExpr;
// 
// 	public FieldDescriptor(int access, String name, String desc, String signature, Object value) {
// 		this.access = access;
// 		this.name = name;
// 		this.desc = desc;
// 		this.signature = signature;
// 		this.value = value;
// 	}
// 
// 	public void validate() {
// 		if (!isConstExpr)
// 			return;
// 
// 		int access = this.access & (STATIC | FINAL);
// 		if (access != (STATIC | FINAL))
// 			throw new InvalidConstExprException("fields must be 'static final'", this);
// 
// 		boolean isPrimitive = desc.length() == 1;
// 		if (!isPrimitive && !isString())
// 			throw new InvalidConstExprException("fields can only be primitive values or strings", this);
// 	}
// 
// 	private boolean isString() {
// 		return desc.equals(Type.getDescriptor(String.class));
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return "FieldDescriptor[" +
// 			"access=" + access +
// 			" name='" + name + '\'' +
// 			" desc='" + desc + '\'' +
// 			" signature='" + signature + '\'' +
// 			" value=" + value +
// 			" isConstExpr=" + isConstExpr +
// 			']';
// 	}
// }


// Path: core/src/main/java/net/onedaybeard/constexpr/visitor/FieldAnnotationScanner.java
import net.onedaybeard.constexpr.inspect.FieldDescriptor;
import org.objectweb.asm.AnnotationVisitor;
import org.objectweb.asm.FieldVisitor;
import org.objectweb.asm.Opcodes;
import java.lang.annotation.Annotation;

package net.onedaybeard.constexpr.visitor;



class FieldAnnotationScanner extends FieldVisitor {
	private final FieldDescriptor field;
	private AnnotationScanner<FieldDescriptor> scanner;

	public FieldAnnotationScanner(FieldVisitor fv,
	                              FieldDescriptor field) {

		super(Opcodes.ASM5, fv);
		this.field = field;
	}

	public FieldAnnotationScanner scanFor(Class<? extends Annotation> annotation,
	                                      AnnotationFoundListener<FieldDescriptor> listener) {