method extracted to avoid duplicates

This commit is contained in:
Alex Tkachman
2012-08-23 14:30:13 +03:00
parent fbb78e47b0
commit 94593fd08f
2 changed files with 8 additions and 15 deletions
@@ -197,22 +197,10 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> {
@Override
public StackValue visitClass(JetClass klass, StackValue data) {
ClassDescriptor descriptor = bindingContext.get(BindingContext.CLASS, klass);
ObjectOrClosureCodegen closure = new LocalClassClosureCodegen(this, context, state, descriptor);
Pair<JvmClassName, ClassBuilder> nameAndVisitor = state.forAnonymousSubclass(klass);
closure.cv = nameAndVisitor.getSecond();
closure.name = nameAndVisitor.getFirst();
final CodegenContext objectContext = closure.context.intoAnonymousClass(
closure, descriptor, OwnerKind.IMPLEMENTATION,
typeMapper);
new ImplementationBodyCodegen(klass, objectContext, nameAndVisitor.getSecond(), state).generate();
return StackValue.none();
return visitClassOrObject(klass);
}
@Override
public StackValue visitObjectDeclaration(JetObjectDeclaration declaration, StackValue data) {
private StackValue visitClassOrObject(JetClassOrObject declaration) {
ClassDescriptor descriptor = bindingContext.get(BindingContext.CLASS, declaration);
ObjectOrClosureCodegen closure = new LocalClassClosureCodegen(this, context, state, descriptor);
Pair<JvmClassName, ClassBuilder> nameAndVisitor = state.forAnonymousSubclass(declaration);
@@ -227,6 +215,11 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> {
return StackValue.none();
}
@Override
public StackValue visitObjectDeclaration(JetObjectDeclaration declaration, StackValue data) {
return visitClassOrObject(declaration);
}
@Override
public StackValue visitExpression(JetExpression expression, StackValue receiver) {
throw new UnsupportedOperationException("Codegen for " + expression + " is not yet implemented");
@@ -129,7 +129,7 @@ public class GenerationState {
getInjector().getJetTypeMapper().mapType(aClass.getDefaultType(), MapTypeMode.TRAIT_IMPL).getInternalName() + ".class");
}
public Pair<JvmClassName, ClassBuilder> forAnonymousSubclass(JetExpression expression) {
public Pair<JvmClassName, ClassBuilder> forAnonymousSubclass(JetElement expression) {
JvmClassName className = getInjector().getJetTypeMapper().getClosureAnnotator().classNameForAnonymousClass(expression);
return Pair.create(className, getFactory().forAnonymousSubclass(className));
}