cf.markSynthetic();
cf.setSourceFile(PatternMatcher.class.getName());
// constructor
TypeDesc objectArrayType = TypeDesc.OBJECT.toArrayType();
TypeDesc[] params = {objectArrayType};
MethodInfo mi = cf.addConstructor(Modifiers.PUBLIC, params);
mBuilder = new CodeBuilder(mi);
mBuilder.loadThis();
mBuilder.loadLocal(mBuilder.getParameter(0));
mBuilder.invokeSuperConstructor(params);
mBuilder.returnVoid();
mIntType = TypeDesc.INT;
mBooleanType = TypeDesc.BOOLEAN;
mListType = TypeDesc.forClass(List.class);
mStringType = TypeDesc.STRING;
mObjectType = TypeDesc.OBJECT;
mIntArrayType = TypeDesc.INT.toArrayType();
// fillMatchResults method
TypeDesc charArrayType = TypeDesc.CHAR.toArrayType();
params = new TypeDesc[]{charArrayType, mIntType, mListType};
mi = cf.addMethod(Modifiers.PUBLIC, "fillMatchResults", null, params);
mBuilder = new CodeBuilder(mi);
mLookupLocal = mBuilder.getParameter(0);