diff --git a/idea/src/org/jetbrains/jet/codegen/ClassCodegen.java b/idea/src/org/jetbrains/jet/codegen/ClassCodegen.java index 74dc8a95207fbea64348509c430b9b6140e5dbb6..0cc66c26babb8f17a81f77c8b80a0a7d9a84dc89 100644 --- a/idea/src/org/jetbrains/jet/codegen/ClassCodegen.java +++ b/idea/src/org/jetbrains/jet/codegen/ClassCodegen.java @@ -7,6 +7,7 @@ import org.jetbrains.jet.lang.types.ClassDescriptor; import org.jetbrains.jet.lang.types.JetStandardLibrary; import org.jetbrains.jet.lang.types.JetType; import org.objectweb.asm.ClassVisitor; +import org.objectweb.asm.Opcodes; import java.util.List; @@ -15,25 +16,29 @@ import java.util.List; */ public class ClassCodegen { private final Project project; - private final ClassVisitor v; private final BindingContext bindingContext; + private final Codegens factory; - public ClassCodegen(Project project, Codegens v, JetClass jetClass, BindingContext bindingContext) { + public ClassCodegen(Project project, Codegens factory, BindingContext bindingContext) { this.project = project; - this.v = null; + this.factory = factory; this.bindingContext = bindingContext; - ClassDescriptor descriptor = bindingContext.getClassDescriptor(jetClass); + } + + public void generate(JetClass aClass) { + ClassDescriptor descriptor = bindingContext.getClassDescriptor(aClass); String fqName = CodeGenUtil.getInternalInterfaceName(descriptor); - List delegationSpecifiers = jetClass.getDelegationSpecifiers(); + List delegationSpecifiers = aClass.getDelegationSpecifiers(); for (JetDelegationSpecifier specifier : delegationSpecifiers) { JetType superType = bindingContext.resolveTypeReference(specifier.getTypeReference()); String superClassFQN = CodeGenUtil.getInternalInterfaceName((ClassDescriptor) superType.getConstructor().getDeclarationDescriptor()); } + //descriptor. -/* + ClassVisitor v = factory.forClassImplementation(descriptor); v.visit(Opcodes.V1_6, Opcodes.ACC_PUBLIC, fqName.replace('.', '/'), @@ -42,24 +47,17 @@ public class ClassCodegen { "java/lang/Object", new String[0] ); -*/ - } - public void generate(JetNamespace namespace) { final PropertyCodegen propertyCodegen = new PropertyCodegen(v); final FunctionCodegen functionCodegen = new FunctionCodegen(v, JetStandardLibrary.getJetStandardLibrary(project), bindingContext); - for (JetDeclaration declaration : namespace.getDeclarations()) { + for (JetDeclaration declaration : aClass.getDeclarations()) { if (declaration instanceof JetProperty) { - propertyCodegen.gen((JetProperty) declaration, namespace); + propertyCodegen.genInInterface((JetProperty) declaration); } else if (declaration instanceof JetFunction) { - functionCodegen.gen((JetFunction) declaration, namespace); + functionCodegen.genInInterface((JetFunction) declaration); } } } - - public ClassVisitor getVisitor() { - return v; - } } diff --git a/idea/src/org/jetbrains/jet/codegen/Codegens.java b/idea/src/org/jetbrains/jet/codegen/Codegens.java index 97c29c9a98e8af922fad6fe1911bf5db4c146fb9..2f6419d15168e28fc139551ee3c9ef4f2b05e68d 100644 --- a/idea/src/org/jetbrains/jet/codegen/Codegens.java +++ b/idea/src/org/jetbrains/jet/codegen/Codegens.java @@ -2,6 +2,7 @@ package org.jetbrains.jet.codegen; import com.intellij.openapi.project.Project; import org.jetbrains.jet.lang.psi.JetNamespace; +import org.jetbrains.jet.lang.types.ClassDescriptor; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.ClassWriter; import org.objectweb.asm.util.TraceClassVisitor; @@ -41,6 +42,18 @@ public class Codegens { return visitor; } + public ClassVisitor forClassInterface(ClassDescriptor aClass) { + return newVisitor(CodeGenUtil.getInternalInterfaceName(aClass)); + } + + public ClassVisitor forClassImplementation(ClassDescriptor aClass) { + return newVisitor(CodeGenUtil.getInternalImplementationName(aClass)); + } + + public ClassVisitor forClassDelegatingImplementation(ClassDescriptor aClass) { + return newVisitor(CodeGenUtil.getInternalDelegatingImplementationName(aClass)); + } + public NamespaceCodegen forNamespace(JetNamespace namespace) { assert !isDone : "Already done!"; String fqName = namespace.getFQName(); diff --git a/idea/src/org/jetbrains/jet/codegen/FunctionCodegen.java b/idea/src/org/jetbrains/jet/codegen/FunctionCodegen.java index b59565627cb6a2ac11b1b18446116416af1ed436..711044ababec643fa557010e2ebcf4197a90d3cd 100644 --- a/idea/src/org/jetbrains/jet/codegen/FunctionCodegen.java +++ b/idea/src/org/jetbrains/jet/codegen/FunctionCodegen.java @@ -27,11 +27,19 @@ public class FunctionCodegen { typeMapper = new JetTypeMapper(standardLibrary, bindingContext); } - public void gen(JetFunction f, JetNamespace owner) { + public void genInNamespace(JetFunction f) { gen(f); } - public void gen(JetFunction f, JetClass owner) { + public void genInInterface(JetFunction f) { + + } + + public void genInImplementation(JetFunction f) { + + } + + public void genInDelegatingImplementation(JetFunction f) { } diff --git a/idea/src/org/jetbrains/jet/codegen/NamespaceCodegen.java b/idea/src/org/jetbrains/jet/codegen/NamespaceCodegen.java index be5929da431a7e145c4852a1b563ce151463fb7d..2706bf3e28841d212ce7ca7a86ad0d65668a0aec 100644 --- a/idea/src/org/jetbrains/jet/codegen/NamespaceCodegen.java +++ b/idea/src/org/jetbrains/jet/codegen/NamespaceCodegen.java @@ -41,10 +41,10 @@ public class NamespaceCodegen { for (JetDeclaration declaration : namespace.getDeclarations()) { if (declaration instanceof JetProperty) { - propertyCodegen.gen((JetProperty) declaration, namespace); + propertyCodegen.genInNamespace((JetProperty) declaration); } else if (declaration instanceof JetFunction) { - functionCodegen.gen((JetFunction) declaration, namespace); + functionCodegen.genInNamespace((JetFunction) declaration); } } } @@ -59,8 +59,4 @@ public class NamespaceCodegen { } return fqName.replace('.', '/') + "/namespace"; } - - public ClassVisitor getVisitor() { - return v; - } } diff --git a/idea/src/org/jetbrains/jet/codegen/PropertyCodegen.java b/idea/src/org/jetbrains/jet/codegen/PropertyCodegen.java index f94b378e9fb7541033498bf3551ca5a2061606f8..6b51df0944a06203056cf79165b5b35e5c895a1a 100644 --- a/idea/src/org/jetbrains/jet/codegen/PropertyCodegen.java +++ b/idea/src/org/jetbrains/jet/codegen/PropertyCodegen.java @@ -1,7 +1,5 @@ package org.jetbrains.jet.codegen; -import org.jetbrains.jet.lang.psi.JetClass; -import org.jetbrains.jet.lang.psi.JetNamespace; import org.jetbrains.jet.lang.psi.JetProperty; import org.objectweb.asm.ClassVisitor; @@ -15,11 +13,19 @@ public class PropertyCodegen { this.v = v; } - public void gen(JetProperty p, JetNamespace owner) { + public void genInNamespace(JetProperty p) { } - public void gen(JetProperty p, JetClass owner) { + public void genInInterface(JetProperty p) { + + } + + public void genInImplementation(JetProperty p) { + + } + + public void genInDelegatingImplementation(JetProperty p) { } }