/*
* Copyright 2001-2008 Geert Bevin (gbevin[remove] at uwyn dot com)
* Licensed under the Apache License, Version 2.0 (the "License")
* $Id: TypesClassVisitor.java 3918 2008-04-14 17:35:35Z gbevin $
*/
package com.uwyn.rife.continuations.instrument;
import com.uwyn.rife.asm.*;
import com.uwyn.rife.continuations.ContinuationConfigInstrument;
class TypesClassVisitor implements ClassVisitor
{
private ContinuationConfigInstrument mConfig = null;
private MetricsClassVisitor mMetrics = null;
private String mClassName = null;
private String mEntryMethodDesc = null;
private String mEntryMethodName = null;
private TypesContext[] mPauseContexts = null;
private TypesContext[] mLabelContexts = null;
private int mPauseContextCounter = 0;
private int mLabelContextCounter = 0;
private NoOpAnnotationVisitor mAnnotationVisitor = new NoOpAnnotationVisitor();
TypesClassVisitor(ContinuationConfigInstrument config, MetricsClassVisitor metrics, String className)
{
mConfig = config;
mMetrics = metrics;
mClassName = className;
mEntryMethodName = config.getEntryMethodName();
mEntryMethodDesc = Type.getMethodDescriptor(config.getEntryMethodReturnType(), config.getEntryMethodArgumentTypes());
}
MetricsClassVisitor getMetrics()
{
return mMetrics;
}
void setPauseContexts(TypesContext[] pauseContexts)
{
mPauseContexts = pauseContexts;
}
TypesContext nextPauseContext()
{
return mPauseContexts[mPauseContextCounter++];
}
void setLabelContexts(TypesContext[] labelContexts)
{
mLabelContexts = labelContexts;
}
TypesContext nextLabelTypes()
{
return mLabelContexts[mLabelContextCounter++];
}
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions)
{
if (mEntryMethodName.equals(name) &&
mEntryMethodDesc.equals(desc))
{
return new TypesMethodVisitor(mConfig, this, mClassName);
}
return null;
}
public void visitInnerClass(String name, String outerName, String innerName, int access)
{
}
public void visitOuterClass(String owner, String name, String desc)
{
}
public void visit(int version, int access, String name, String signature, String superName, String[] interfaces)
{
}
public void visitSource(String source, String debug)
{
}
public FieldVisitor visitField(int access, String name, String desc, String signature, Object value)
{
return null;
}
public void visitAttribute(Attribute attr)
{
}
public AnnotationVisitor visitAnnotation(String desc, boolean visible)
{
return mAnnotationVisitor;
}
public void visitEnd()
{
}
}