assert error/NonExistentClass is only generated when mode = SIGNATURES
move classBuilderMode to injector and GenerationState from ClassBuilder
This commit is contained in:
@@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
package org.jetbrains.jet.codegen;
|
package org.jetbrains.jet.codegen;
|
||||||
|
|
||||||
import com.intellij.psi.PsiElement;
|
|
||||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.PropertyDescriptor;
|
import org.jetbrains.jet.lang.descriptors.PropertyDescriptor;
|
||||||
import org.jetbrains.jet.lang.psi.*;
|
import org.jetbrains.jet.lang.psi.*;
|
||||||
@@ -148,7 +147,7 @@ public abstract class ClassBodyCodegen {
|
|||||||
private void generateStaticInitializer() {
|
private void generateStaticInitializer() {
|
||||||
if (staticInitializerChunks.size() > 0) {
|
if (staticInitializerChunks.size() > 0) {
|
||||||
final MethodVisitor mv = v.newMethod(null, ACC_PUBLIC | Opcodes.ACC_STATIC,"<clinit>", "()V", null, null);
|
final MethodVisitor mv = v.newMethod(null, ACC_PUBLIC | Opcodes.ACC_STATIC,"<clinit>", "()V", null, null);
|
||||||
if (v.generateCode() == ClassBuilder.Mode.FULL) {
|
if (state.getClassBuilderMode() == ClassBuilderMode.FULL) {
|
||||||
mv.visitCode();
|
mv.visitCode();
|
||||||
|
|
||||||
InstructionAdapter v = new InstructionAdapter(mv);
|
InstructionAdapter v = new InstructionAdapter(mv);
|
||||||
|
|||||||
@@ -21,27 +21,24 @@ package org.jetbrains.jet.codegen;
|
|||||||
|
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.objectweb.asm.*;
|
import org.objectweb.asm.AnnotationVisitor;
|
||||||
|
import org.objectweb.asm.ClassVisitor;
|
||||||
|
import org.objectweb.asm.FieldVisitor;
|
||||||
|
import org.objectweb.asm.MethodVisitor;
|
||||||
|
import org.objectweb.asm.Opcodes;
|
||||||
|
|
||||||
public abstract class ClassBuilder {
|
public abstract class ClassBuilder {
|
||||||
public static class Concrete extends ClassBuilder {
|
public static class Concrete extends ClassBuilder {
|
||||||
private final ClassVisitor v;
|
private final ClassVisitor v;
|
||||||
private final boolean stubs;
|
|
||||||
|
|
||||||
public Concrete(ClassVisitor v, boolean stubs) {
|
public Concrete(ClassVisitor v) {
|
||||||
this.v = v;
|
this.v = v;
|
||||||
this.stubs = stubs;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ClassVisitor getVisitor() {
|
public ClassVisitor getVisitor() {
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Mode generateCode() {
|
|
||||||
return stubs ? Mode.STUBS : Mode.FULL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
public FieldVisitor newField(@Nullable PsiElement origin,
|
public FieldVisitor newField(@Nullable PsiElement origin,
|
||||||
int access,
|
int access,
|
||||||
@@ -88,15 +85,4 @@ public abstract class ClassBuilder {
|
|||||||
public void visitInnerClass(String name, String outerName, String innerName, int access) {
|
public void visitInnerClass(String name, String outerName, String innerName, int access) {
|
||||||
getVisitor().visitInnerClass(name, outerName, innerName, access);
|
getVisitor().visitInnerClass(name, outerName, innerName, access);
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum Mode {
|
|
||||||
/** Full function bodies */
|
|
||||||
FULL,
|
|
||||||
/** Only function signatures */
|
|
||||||
SIGNATURES,
|
|
||||||
/** Function with stub bodies: just throw exception */
|
|
||||||
STUBS,
|
|
||||||
}
|
|
||||||
|
|
||||||
public abstract Mode generateCode();
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.jet.codegen;
|
package org.jetbrains.jet.codegen;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.objectweb.asm.ClassWriter;
|
import org.objectweb.asm.ClassWriter;
|
||||||
import org.objectweb.asm.util.TraceClassVisitor;
|
import org.objectweb.asm.util.TraceClassVisitor;
|
||||||
|
|
||||||
@@ -28,9 +29,15 @@ import java.io.StringWriter;
|
|||||||
public class ClassBuilderFactories {
|
public class ClassBuilderFactories {
|
||||||
|
|
||||||
public static ClassBuilderFactory TEXT = new ClassBuilderFactory() {
|
public static ClassBuilderFactory TEXT = new ClassBuilderFactory() {
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public ClassBuilderMode getClassBuilderMode() {
|
||||||
|
return ClassBuilderMode.FULL;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ClassBuilder newClassBuilder() {
|
public ClassBuilder newClassBuilder() {
|
||||||
return new ClassBuilder.Concrete(new TraceClassVisitor(new PrintWriter(new StringWriter())), false);
|
return new ClassBuilder.Concrete(new TraceClassVisitor(new PrintWriter(new StringWriter())));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -51,6 +58,12 @@ public class ClassBuilderFactories {
|
|||||||
|
|
||||||
public static ClassBuilderFactory binaries(final boolean stubs) {
|
public static ClassBuilderFactory binaries(final boolean stubs) {
|
||||||
return new ClassBuilderFactory() {
|
return new ClassBuilderFactory() {
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public ClassBuilderMode getClassBuilderMode() {
|
||||||
|
return stubs ? ClassBuilderMode.STUBS : ClassBuilderMode.FULL;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ClassBuilder newClassBuilder() {
|
public ClassBuilder newClassBuilder() {
|
||||||
return new ClassBuilder.Concrete(new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS){
|
return new ClassBuilder.Concrete(new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS){
|
||||||
@@ -64,7 +77,7 @@ public class ClassBuilderFactories {
|
|||||||
return "java/lang/Object";
|
return "java/lang/Object";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, stubs);
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.jet.codegen;
|
package org.jetbrains.jet.codegen;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.objectweb.asm.ClassWriter;
|
import org.objectweb.asm.ClassWriter;
|
||||||
import org.objectweb.asm.util.TraceClassVisitor;
|
import org.objectweb.asm.util.TraceClassVisitor;
|
||||||
|
|
||||||
@@ -26,6 +27,8 @@ import java.io.StringWriter;
|
|||||||
* @author max
|
* @author max
|
||||||
*/
|
*/
|
||||||
public interface ClassBuilderFactory {
|
public interface ClassBuilderFactory {
|
||||||
|
@NotNull
|
||||||
|
ClassBuilderMode getClassBuilderMode();
|
||||||
ClassBuilder newClassBuilder();
|
ClassBuilder newClassBuilder();
|
||||||
String asText(ClassBuilder builder);
|
String asText(ClassBuilder builder);
|
||||||
byte[] asBytes(ClassBuilder builder);
|
byte[] asBytes(ClassBuilder builder);
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2012 JetBrains s.r.o.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.jet.codegen;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Stepan Koltsov
|
||||||
|
*/
|
||||||
|
public enum ClassBuilderMode {
|
||||||
|
/** Full function bodies */
|
||||||
|
FULL,
|
||||||
|
/** Only function signatures */
|
||||||
|
SIGNATURES,
|
||||||
|
/** Function with stub bodies: just throw exception */
|
||||||
|
STUBS,
|
||||||
|
}
|
||||||
@@ -40,7 +40,7 @@ public class ClassCodegen {
|
|||||||
|
|
||||||
final CodegenContext contextForInners = context.intoClass(descriptor, OwnerKind.IMPLEMENTATION, state.getInjector().getJetTypeMapper());
|
final CodegenContext contextForInners = context.intoClass(descriptor, OwnerKind.IMPLEMENTATION, state.getInjector().getJetTypeMapper());
|
||||||
|
|
||||||
if (classBuilder.generateCode() == ClassBuilder.Mode.SIGNATURES) {
|
if (state.getClassBuilderMode() == ClassBuilderMode.SIGNATURES) {
|
||||||
// Outer class implementation must happen prior inner classes so we get proper scoping tree in JetLightClass's delegate
|
// Outer class implementation must happen prior inner classes so we get proper scoping tree in JetLightClass's delegate
|
||||||
generateImplementation(context, aClass, OwnerKind.IMPLEMENTATION, contextForInners.accessors, classBuilder);
|
generateImplementation(context, aClass, OwnerKind.IMPLEMENTATION, contextForInners.accessors, classBuilder);
|
||||||
}
|
}
|
||||||
@@ -54,7 +54,7 @@ public class ClassCodegen {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (classBuilder.generateCode() != ClassBuilder.Mode.SIGNATURES) {
|
if (state.getClassBuilderMode() != ClassBuilderMode.SIGNATURES) {
|
||||||
generateImplementation(context, aClass, OwnerKind.IMPLEMENTATION, contextForInners.accessors, classBuilder);
|
generateImplementation(context, aClass, OwnerKind.IMPLEMENTATION, contextForInners.accessors, classBuilder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -170,10 +170,10 @@ public class ClosureCodegen extends ObjectOrClosureCodegen {
|
|||||||
cv.newField(fun, ACC_PRIVATE | ACC_STATIC | ACC_FINAL, "$instance", classDescr, null, null);
|
cv.newField(fun, ACC_PRIVATE | ACC_STATIC | ACC_FINAL, "$instance", classDescr, null, null);
|
||||||
|
|
||||||
MethodVisitor mv = cv.newMethod(fun, ACC_PUBLIC | ACC_STATIC, "$getInstance", "()" + classDescr, null, new String[0]);
|
MethodVisitor mv = cv.newMethod(fun, ACC_PUBLIC | ACC_STATIC, "$getInstance", "()" + classDescr, null, new String[0]);
|
||||||
if (cv.generateCode() == ClassBuilder.Mode.STUBS) {
|
if (state.getClassBuilderMode() == ClassBuilderMode.STUBS) {
|
||||||
StubCodegen.generateStubCode(mv);
|
StubCodegen.generateStubCode(mv);
|
||||||
}
|
}
|
||||||
else if (cv.generateCode() == ClassBuilder.Mode.FULL) {
|
else if (state.getClassBuilderMode() == ClassBuilderMode.FULL) {
|
||||||
mv.visitCode();
|
mv.visitCode();
|
||||||
mv.visitFieldInsn(GETSTATIC, name, "$instance", classDescr);
|
mv.visitFieldInsn(GETSTATIC, name, "$instance", classDescr);
|
||||||
mv.visitInsn(DUP);
|
mv.visitInsn(DUP);
|
||||||
@@ -211,10 +211,10 @@ public class ClosureCodegen extends ObjectOrClosureCodegen {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
final MethodVisitor mv = cv.newMethod(fun, ACC_PUBLIC, "invoke", bridge.getAsmMethod().getDescriptor(), null, new String[0]);
|
final MethodVisitor mv = cv.newMethod(fun, ACC_PUBLIC, "invoke", bridge.getAsmMethod().getDescriptor(), null, new String[0]);
|
||||||
if (cv.generateCode() == ClassBuilder.Mode.STUBS) {
|
if (state.getClassBuilderMode() == ClassBuilderMode.STUBS) {
|
||||||
StubCodegen.generateStubCode(mv);
|
StubCodegen.generateStubCode(mv);
|
||||||
}
|
}
|
||||||
if (cv.generateCode() == ClassBuilder.Mode.FULL) {
|
if (state.getClassBuilderMode() == ClassBuilderMode.FULL) {
|
||||||
mv.visitCode();
|
mv.visitCode();
|
||||||
|
|
||||||
InstructionAdapter iv = new InstructionAdapter(mv);
|
InstructionAdapter iv = new InstructionAdapter(mv);
|
||||||
@@ -296,10 +296,10 @@ public class ClosureCodegen extends ObjectOrClosureCodegen {
|
|||||||
|
|
||||||
final Method constructor = new Method("<init>", Type.VOID_TYPE, argTypes);
|
final Method constructor = new Method("<init>", Type.VOID_TYPE, argTypes);
|
||||||
final MethodVisitor mv = cv.newMethod(fun, ACC_PUBLIC, "<init>", constructor.getDescriptor(), null, new String[0]);
|
final MethodVisitor mv = cv.newMethod(fun, ACC_PUBLIC, "<init>", constructor.getDescriptor(), null, new String[0]);
|
||||||
if (cv.generateCode() == ClassBuilder.Mode.STUBS) {
|
if (state.getClassBuilderMode() == ClassBuilderMode.STUBS) {
|
||||||
StubCodegen.generateStubCode(mv);
|
StubCodegen.generateStubCode(mv);
|
||||||
}
|
}
|
||||||
else if (cv.generateCode() == ClassBuilder.Mode.FULL) {
|
else if (state.getClassBuilderMode() == ClassBuilderMode.FULL) {
|
||||||
mv.visitCode();
|
mv.visitCode();
|
||||||
InstructionAdapter iv = new InstructionAdapter(mv);
|
InstructionAdapter iv = new InstructionAdapter(mv);
|
||||||
|
|
||||||
|
|||||||
@@ -124,7 +124,7 @@ public class FunctionCodegen {
|
|||||||
|
|
||||||
final MethodVisitor mv = v.newMethod(fun, flags, jvmSignature.getAsmMethod().getName(), jvmSignature.getAsmMethod().getDescriptor(), jvmSignature.getGenericsSignature(), null);
|
final MethodVisitor mv = v.newMethod(fun, flags, jvmSignature.getAsmMethod().getName(), jvmSignature.getAsmMethod().getDescriptor(), jvmSignature.getGenericsSignature(), null);
|
||||||
AnnotationCodegen.forMethod(mv, state.getInjector().getJetTypeMapper()).genAnnotations(functionDescriptor);
|
AnnotationCodegen.forMethod(mv, state.getInjector().getJetTypeMapper()).genAnnotations(functionDescriptor);
|
||||||
if(v.generateCode() != ClassBuilder.Mode.SIGNATURES) {
|
if(state.getClassBuilderMode() != ClassBuilderMode.SIGNATURES) {
|
||||||
int start = 0;
|
int start = 0;
|
||||||
if (needJetAnnotations) {
|
if (needJetAnnotations) {
|
||||||
if (functionDescriptor instanceof PropertyAccessorDescriptor) {
|
if (functionDescriptor instanceof PropertyAccessorDescriptor) {
|
||||||
@@ -169,12 +169,12 @@ public class FunctionCodegen {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isAbstract && v.generateCode() == ClassBuilder.Mode.STUBS) {
|
if (!isAbstract && state.getClassBuilderMode() == ClassBuilderMode.STUBS) {
|
||||||
StubCodegen.generateStubCode(mv);
|
StubCodegen.generateStubCode(mv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (!isAbstract && v.generateCode() == ClassBuilder.Mode.FULL) {
|
if (!isAbstract && state.getClassBuilderMode() == ClassBuilderMode.FULL) {
|
||||||
mv.visitCode();
|
mv.visitCode();
|
||||||
|
|
||||||
Label methodBegin = new Label();
|
Label methodBegin = new Label();
|
||||||
@@ -345,10 +345,10 @@ public class FunctionCodegen {
|
|||||||
descriptor = descriptor.replace("(","(L" + ownerInternalName + ";");
|
descriptor = descriptor.replace("(","(L" + ownerInternalName + ";");
|
||||||
final MethodVisitor mv = v.newMethod(null, flags | (isConstructor ? 0 : ACC_STATIC), isConstructor ? "<init>" : jvmSignature.getName() + JvmAbi.DEFAULT_PARAMS_IMPL_SUFFIX, descriptor, null, null);
|
final MethodVisitor mv = v.newMethod(null, flags | (isConstructor ? 0 : ACC_STATIC), isConstructor ? "<init>" : jvmSignature.getName() + JvmAbi.DEFAULT_PARAMS_IMPL_SUFFIX, descriptor, null, null);
|
||||||
InstructionAdapter iv = new InstructionAdapter(mv);
|
InstructionAdapter iv = new InstructionAdapter(mv);
|
||||||
if (v.generateCode() == ClassBuilder.Mode.STUBS) {
|
if (state.getClassBuilderMode() == ClassBuilderMode.STUBS) {
|
||||||
StubCodegen.generateStubCode(mv);
|
StubCodegen.generateStubCode(mv);
|
||||||
}
|
}
|
||||||
else if (v.generateCode() == ClassBuilder.Mode.FULL) {
|
else if (state.getClassBuilderMode() == ClassBuilderMode.FULL) {
|
||||||
mv.visitCode();
|
mv.visitCode();
|
||||||
|
|
||||||
FrameMap frameMap = owner.prepareFrame(state.getInjector().getJetTypeMapper());
|
FrameMap frameMap = owner.prepareFrame(state.getInjector().getJetTypeMapper());
|
||||||
@@ -474,10 +474,10 @@ public class FunctionCodegen {
|
|||||||
int flags = ACC_PUBLIC | ACC_BRIDGE; // TODO.
|
int flags = ACC_PUBLIC | ACC_BRIDGE; // TODO.
|
||||||
|
|
||||||
final MethodVisitor mv = v.newMethod(null, flags, jvmSignature.getName(), overriden.getDescriptor(), null, null);
|
final MethodVisitor mv = v.newMethod(null, flags, jvmSignature.getName(), overriden.getDescriptor(), null, null);
|
||||||
if (v.generateCode() == ClassBuilder.Mode.STUBS) {
|
if (state.getClassBuilderMode() == ClassBuilderMode.STUBS) {
|
||||||
StubCodegen.generateStubCode(mv);
|
StubCodegen.generateStubCode(mv);
|
||||||
}
|
}
|
||||||
else if (v.generateCode() == ClassBuilder.Mode.FULL) {
|
else if (state.getClassBuilderMode() == ClassBuilderMode.FULL) {
|
||||||
mv.visitCode();
|
mv.visitCode();
|
||||||
|
|
||||||
Type[] argTypes = overriden.getArgumentTypes();
|
Type[] argTypes = overriden.getArgumentTypes();
|
||||||
@@ -515,10 +515,10 @@ public class FunctionCodegen {
|
|||||||
int flags = ACC_PUBLIC | ACC_SYNTHETIC; // TODO.
|
int flags = ACC_PUBLIC | ACC_SYNTHETIC; // TODO.
|
||||||
|
|
||||||
final MethodVisitor mv = v.newMethod(null, flags, method.getName(), method.getDescriptor(), null, null);
|
final MethodVisitor mv = v.newMethod(null, flags, method.getName(), method.getDescriptor(), null, null);
|
||||||
if (v.generateCode() == ClassBuilder.Mode.STUBS) {
|
if (state.getClassBuilderMode() == ClassBuilderMode.STUBS) {
|
||||||
StubCodegen.generateStubCode(mv);
|
StubCodegen.generateStubCode(mv);
|
||||||
}
|
}
|
||||||
else if (v.generateCode() == ClassBuilder.Mode.FULL) {
|
else if (state.getClassBuilderMode() == ClassBuilderMode.FULL) {
|
||||||
mv.visitCode();
|
mv.visitCode();
|
||||||
|
|
||||||
Type[] argTypes = method.getArgumentTypes();
|
Type[] argTypes = method.getArgumentTypes();
|
||||||
|
|||||||
@@ -49,6 +49,8 @@ public class GenerationState {
|
|||||||
private final List<JetFile> files;
|
private final List<JetFile> files;
|
||||||
@NotNull
|
@NotNull
|
||||||
private final InjectorForJvmCodegen injector;
|
private final InjectorForJvmCodegen injector;
|
||||||
|
@NotNull
|
||||||
|
private final ClassBuilderMode classBuilderMode;
|
||||||
|
|
||||||
|
|
||||||
public GenerationState(Project project, ClassBuilderFactory builderFactory, AnalyzeExhaust analyzeExhaust, List<JetFile> files) {
|
public GenerationState(Project project, ClassBuilderFactory builderFactory, AnalyzeExhaust analyzeExhaust, List<JetFile> files) {
|
||||||
@@ -61,9 +63,10 @@ public class GenerationState {
|
|||||||
this.progress = progress;
|
this.progress = progress;
|
||||||
this.analyzeExhaust = exhaust;
|
this.analyzeExhaust = exhaust;
|
||||||
this.files = files;
|
this.files = files;
|
||||||
|
this.classBuilderMode = builderFactory.getClassBuilderMode();
|
||||||
this.injector = new InjectorForJvmCodegen(
|
this.injector = new InjectorForJvmCodegen(
|
||||||
analyzeExhaust.getStandardLibrary(), analyzeExhaust.getBindingContext(),
|
analyzeExhaust.getStandardLibrary(), analyzeExhaust.getBindingContext(),
|
||||||
this.files, project, compilerSpecialMode, this, builderFactory);
|
this.files, project, compilerSpecialMode, builderFactory.getClassBuilderMode(), this, builderFactory);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -83,6 +86,11 @@ public class GenerationState {
|
|||||||
return analyzeExhaust.getBindingContext();
|
return analyzeExhaust.getBindingContext();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public ClassBuilderMode getClassBuilderMode() {
|
||||||
|
return classBuilderMode;
|
||||||
|
}
|
||||||
|
|
||||||
public ClassCodegen forClass() {
|
public ClassCodegen forClass() {
|
||||||
return new ClassCodegen(this);
|
return new ClassCodegen(this);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -296,10 +296,10 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
Type[] argTypes = method.getArgumentTypes();
|
Type[] argTypes = method.getArgumentTypes();
|
||||||
|
|
||||||
MethodVisitor mv = v.newMethod(null, ACC_PUBLIC| ACC_BRIDGE| ACC_FINAL, bridge.getName(), method.getDescriptor(), null, null);
|
MethodVisitor mv = v.newMethod(null, ACC_PUBLIC| ACC_BRIDGE| ACC_FINAL, bridge.getName(), method.getDescriptor(), null, null);
|
||||||
if (v.generateCode() == ClassBuilder.Mode.STUBS) {
|
if (state.getClassBuilderMode() == ClassBuilderMode.STUBS) {
|
||||||
StubCodegen.generateStubCode(mv);
|
StubCodegen.generateStubCode(mv);
|
||||||
}
|
}
|
||||||
else if (v.generateCode() == ClassBuilder.Mode.FULL) {
|
else if (state.getClassBuilderMode() == ClassBuilderMode.FULL) {
|
||||||
mv.visitCode();
|
mv.visitCode();
|
||||||
|
|
||||||
InstructionAdapter iv = new InstructionAdapter(mv);
|
InstructionAdapter iv = new InstructionAdapter(mv);
|
||||||
@@ -327,10 +327,10 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
Method originalMethod = originalSignature.getJvmMethodSignature().getAsmMethod();
|
Method originalMethod = originalSignature.getJvmMethodSignature().getAsmMethod();
|
||||||
MethodVisitor mv = v.newMethod(null, ACC_PUBLIC | ACC_BRIDGE | ACC_FINAL, method.getName(), method.getDescriptor(), null, null);
|
MethodVisitor mv = v.newMethod(null, ACC_PUBLIC | ACC_BRIDGE | ACC_FINAL, method.getName(), method.getDescriptor(), null, null);
|
||||||
PropertyCodegen.generateJetPropertyAnnotation(mv, originalSignature.getPropertyTypeKotlinSignature(), originalSignature.getJvmMethodSignature().getKotlinTypeParameter());
|
PropertyCodegen.generateJetPropertyAnnotation(mv, originalSignature.getPropertyTypeKotlinSignature(), originalSignature.getJvmMethodSignature().getKotlinTypeParameter());
|
||||||
if (v.generateCode() == ClassBuilder.Mode.STUBS) {
|
if (state.getClassBuilderMode() == ClassBuilderMode.STUBS) {
|
||||||
StubCodegen.generateStubCode(mv);
|
StubCodegen.generateStubCode(mv);
|
||||||
}
|
}
|
||||||
else if (v.generateCode() == ClassBuilder.Mode.FULL) {
|
else if (state.getClassBuilderMode() == ClassBuilderMode.FULL) {
|
||||||
mv.visitCode();
|
mv.visitCode();
|
||||||
|
|
||||||
InstructionAdapter iv = new InstructionAdapter(mv);
|
InstructionAdapter iv = new InstructionAdapter(mv);
|
||||||
@@ -353,10 +353,10 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
Method originalMethod = originalSignature2.getJvmMethodSignature().getAsmMethod();
|
Method originalMethod = originalSignature2.getJvmMethodSignature().getAsmMethod();
|
||||||
MethodVisitor mv = v.newMethod(null, ACC_PUBLIC | ACC_BRIDGE | ACC_FINAL, method.getName(), method.getDescriptor(), null, null);
|
MethodVisitor mv = v.newMethod(null, ACC_PUBLIC | ACC_BRIDGE | ACC_FINAL, method.getName(), method.getDescriptor(), null, null);
|
||||||
PropertyCodegen.generateJetPropertyAnnotation(mv, originalSignature2.getPropertyTypeKotlinSignature(), originalSignature2.getJvmMethodSignature().getKotlinTypeParameter());
|
PropertyCodegen.generateJetPropertyAnnotation(mv, originalSignature2.getPropertyTypeKotlinSignature(), originalSignature2.getJvmMethodSignature().getKotlinTypeParameter());
|
||||||
if (v.generateCode() == ClassBuilder.Mode.STUBS) {
|
if (state.getClassBuilderMode() == ClassBuilderMode.STUBS) {
|
||||||
StubCodegen.generateStubCode(mv);
|
StubCodegen.generateStubCode(mv);
|
||||||
}
|
}
|
||||||
else if (v.generateCode() == ClassBuilder.Mode.FULL) {
|
else if (state.getClassBuilderMode() == ClassBuilderMode.FULL) {
|
||||||
mv.visitCode();
|
mv.visitCode();
|
||||||
|
|
||||||
InstructionAdapter iv = new InstructionAdapter(mv);
|
InstructionAdapter iv = new InstructionAdapter(mv);
|
||||||
@@ -531,7 +531,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
|
|
||||||
int flags = ACC_PUBLIC; // TODO
|
int flags = ACC_PUBLIC; // TODO
|
||||||
final MethodVisitor mv = v.newMethod(myClass, flags, constructorMethod.getName(), constructorMethod.getAsmMethod().getDescriptor(), constructorMethod.getGenericsSignature(), null);
|
final MethodVisitor mv = v.newMethod(myClass, flags, constructorMethod.getName(), constructorMethod.getAsmMethod().getDescriptor(), constructorMethod.getGenericsSignature(), null);
|
||||||
if (v.generateCode() == ClassBuilder.Mode.SIGNATURES) return;
|
if (state.getClassBuilderMode() == ClassBuilderMode.SIGNATURES) return;
|
||||||
|
|
||||||
AnnotationVisitor jetConstructorVisitor = mv.visitAnnotation(JvmStdlibNames.JET_CONSTRUCTOR.getDescriptor(), true);
|
AnnotationVisitor jetConstructorVisitor = mv.visitAnnotation(JvmStdlibNames.JET_CONSTRUCTOR.getDescriptor(), true);
|
||||||
if (constructorDescriptor == null) {
|
if (constructorDescriptor == null) {
|
||||||
@@ -558,7 +558,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (v.generateCode() == ClassBuilder.Mode.STUBS) {
|
if (state.getClassBuilderMode() == ClassBuilderMode.STUBS) {
|
||||||
StubCodegen.generateStubCode(mv);
|
StubCodegen.generateStubCode(mv);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -733,10 +733,10 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
Method functionOriginal = typeMapper.mapSignature(fun.getName(), fun.getOriginal()).getAsmMethod();
|
Method functionOriginal = typeMapper.mapSignature(fun.getName(), fun.getOriginal()).getAsmMethod();
|
||||||
|
|
||||||
final MethodVisitor mv = v.newMethod(myClass, flags, function.getName(), function.getDescriptor(), null, null);
|
final MethodVisitor mv = v.newMethod(myClass, flags, function.getName(), function.getDescriptor(), null, null);
|
||||||
if (v.generateCode() == ClassBuilder.Mode.STUBS) {
|
if (state.getClassBuilderMode() == ClassBuilderMode.STUBS) {
|
||||||
StubCodegen.generateStubCode(mv);
|
StubCodegen.generateStubCode(mv);
|
||||||
}
|
}
|
||||||
else if (v.generateCode() == ClassBuilder.Mode.FULL) {
|
else if (state.getClassBuilderMode() == ClassBuilderMode.FULL) {
|
||||||
mv.visitCode();
|
mv.visitCode();
|
||||||
|
|
||||||
codegen.generateThisOrOuter(descriptor);
|
codegen.generateThisOrOuter(descriptor);
|
||||||
@@ -872,10 +872,10 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
CallableMethod method = typeMapper.mapToCallableMethod(constructorDescriptor, kind, typeMapper.hasThis0(constructorDescriptor.getContainingDeclaration()));
|
CallableMethod method = typeMapper.mapToCallableMethod(constructorDescriptor, kind, typeMapper.hasThis0(constructorDescriptor.getContainingDeclaration()));
|
||||||
int flags = ACC_PUBLIC; // TODO
|
int flags = ACC_PUBLIC; // TODO
|
||||||
final MethodVisitor mv = v.newMethod(constructor, flags, "<init>", method.getSignature().getAsmMethod().getDescriptor(), null, null);
|
final MethodVisitor mv = v.newMethod(constructor, flags, "<init>", method.getSignature().getAsmMethod().getDescriptor(), null, null);
|
||||||
if (v.generateCode() == ClassBuilder.Mode.STUBS) {
|
if (state.getClassBuilderMode() == ClassBuilderMode.STUBS) {
|
||||||
StubCodegen.generateStubCode(mv);
|
StubCodegen.generateStubCode(mv);
|
||||||
}
|
}
|
||||||
else if (v.generateCode() == ClassBuilder.Mode.FULL) {
|
else if (state.getClassBuilderMode() == ClassBuilderMode.FULL) {
|
||||||
mv.visitCode();
|
mv.visitCode();
|
||||||
|
|
||||||
ConstructorFrameMap frameMap = new ConstructorFrameMap(method, constructorDescriptor, typeMapper.hasThis0(constructorDescriptor.getContainingDeclaration()));
|
ConstructorFrameMap frameMap = new ConstructorFrameMap(method, constructorDescriptor, typeMapper.hasThis0(constructorDescriptor.getContainingDeclaration()));
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ public class JetTypeMapper {
|
|||||||
public BindingContext bindingContext;
|
public BindingContext bindingContext;
|
||||||
private ClosureAnnotator closureAnnotator;
|
private ClosureAnnotator closureAnnotator;
|
||||||
private CompilerSpecialMode compilerSpecialMode;
|
private CompilerSpecialMode compilerSpecialMode;
|
||||||
|
private ClassBuilderMode classBuilderMode;
|
||||||
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
@@ -87,6 +88,11 @@ public class JetTypeMapper {
|
|||||||
this.compilerSpecialMode = compilerSpecialMode;
|
this.compilerSpecialMode = compilerSpecialMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
public void setClassBuilderMode(ClassBuilderMode classBuilderMode) {
|
||||||
|
this.classBuilderMode = classBuilderMode;
|
||||||
|
}
|
||||||
|
|
||||||
@PostConstruct
|
@PostConstruct
|
||||||
public void init() {
|
public void init() {
|
||||||
initKnownTypes();
|
initKnownTypes();
|
||||||
@@ -335,6 +341,9 @@ public class JetTypeMapper {
|
|||||||
DeclarationDescriptor descriptor = jetType.getConstructor().getDeclarationDescriptor();
|
DeclarationDescriptor descriptor = jetType.getConstructor().getDeclarationDescriptor();
|
||||||
|
|
||||||
if (ErrorUtils.isError(descriptor)) {
|
if (ErrorUtils.isError(descriptor)) {
|
||||||
|
if (classBuilderMode != ClassBuilderMode.SIGNATURES) {
|
||||||
|
throw new IllegalStateException("error types are not allowed when classBuilderMode = " + classBuilderMode);
|
||||||
|
}
|
||||||
Type asmType = Type.getObjectType("error/NonExistentClass");
|
Type asmType = Type.getObjectType("error/NonExistentClass");
|
||||||
if (signatureVisitor != null) {
|
if (signatureVisitor != null) {
|
||||||
visitAsmType(signatureVisitor, asmType, true);
|
visitAsmType(signatureVisitor, asmType, true);
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ public class NamespaceCodegen {
|
|||||||
|
|
||||||
private void generateStaticInitializers(JetFile namespace) {
|
private void generateStaticInitializers(JetFile namespace) {
|
||||||
MethodVisitor mv = v.newMethod(namespace, ACC_PUBLIC | ACC_STATIC, "<clinit>", "()V", null, null);
|
MethodVisitor mv = v.newMethod(namespace, ACC_PUBLIC | ACC_STATIC, "<clinit>", "()V", null, null);
|
||||||
if (v.generateCode() == ClassBuilder.Mode.FULL) {
|
if (state.getClassBuilderMode() == ClassBuilderMode.FULL) {
|
||||||
mv.visitCode();
|
mv.visitCode();
|
||||||
|
|
||||||
FrameMap frameMap = new FrameMap();
|
FrameMap frameMap = new FrameMap();
|
||||||
|
|||||||
@@ -182,10 +182,10 @@ public class PropertyCodegen {
|
|||||||
AnnotationCodegen.forMethod(mv, state.getInjector().getJetTypeMapper()).genAnnotations(propertyDescriptor.getGetter());
|
AnnotationCodegen.forMethod(mv, state.getInjector().getJetTypeMapper()).genAnnotations(propertyDescriptor.getGetter());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (v.generateCode() != ClassBuilder.Mode.SIGNATURES && (!isTrait || kind instanceof OwnerKind.DelegateKind)) {
|
if (state.getClassBuilderMode() != ClassBuilderMode.SIGNATURES && (!isTrait || kind instanceof OwnerKind.DelegateKind)) {
|
||||||
if(propertyDescriptor.getModality() != Modality.ABSTRACT) {
|
if(propertyDescriptor.getModality() != Modality.ABSTRACT) {
|
||||||
mv.visitCode();
|
mv.visitCode();
|
||||||
if (v.generateCode() == ClassBuilder.Mode.STUBS) {
|
if (state.getClassBuilderMode() == ClassBuilderMode.STUBS) {
|
||||||
StubCodegen.generateStubThrow(mv);
|
StubCodegen.generateStubThrow(mv);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -266,10 +266,10 @@ public class PropertyCodegen {
|
|||||||
AnnotationCodegen.forMethod(mv, state.getInjector().getJetTypeMapper()).genAnnotations(propertyDescriptor.getSetter());
|
AnnotationCodegen.forMethod(mv, state.getInjector().getJetTypeMapper()).genAnnotations(propertyDescriptor.getSetter());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (v.generateCode() != ClassBuilder.Mode.SIGNATURES && (!isTrait || kind instanceof OwnerKind.DelegateKind)) {
|
if (state.getClassBuilderMode() != ClassBuilderMode.SIGNATURES && (!isTrait || kind instanceof OwnerKind.DelegateKind)) {
|
||||||
if(propertyDescriptor.getModality() != Modality.ABSTRACT) {
|
if(propertyDescriptor.getModality() != Modality.ABSTRACT) {
|
||||||
mv.visitCode();
|
mv.visitCode();
|
||||||
if (v.generateCode() == ClassBuilder.Mode.STUBS) {
|
if (state.getClassBuilderMode() == ClassBuilderMode.STUBS) {
|
||||||
StubCodegen.generateStubThrow(mv);
|
StubCodegen.generateStubThrow(mv);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import java.util.List;
|
|||||||
import org.jetbrains.jet.lang.psi.JetFile;
|
import org.jetbrains.jet.lang.psi.JetFile;
|
||||||
import org.jetbrains.jet.codegen.JetTypeMapper;
|
import org.jetbrains.jet.codegen.JetTypeMapper;
|
||||||
import org.jetbrains.jet.lang.resolve.java.CompilerSpecialMode;
|
import org.jetbrains.jet.lang.resolve.java.CompilerSpecialMode;
|
||||||
|
import org.jetbrains.jet.codegen.ClassBuilderMode;
|
||||||
import org.jetbrains.jet.codegen.ClosureAnnotator;
|
import org.jetbrains.jet.codegen.ClosureAnnotator;
|
||||||
import org.jetbrains.jet.lang.types.lang.JetStandardLibrary;
|
import org.jetbrains.jet.lang.types.lang.JetStandardLibrary;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||||
@@ -42,9 +43,11 @@ public class InjectorForJetTypeMapper {
|
|||||||
) {
|
) {
|
||||||
this.jetTypeMapper = new JetTypeMapper();
|
this.jetTypeMapper = new JetTypeMapper();
|
||||||
CompilerSpecialMode compilerSpecialMode = CompilerSpecialMode.REGULAR;
|
CompilerSpecialMode compilerSpecialMode = CompilerSpecialMode.REGULAR;
|
||||||
|
ClassBuilderMode classBuilderMode = ClassBuilderMode.FULL;
|
||||||
ClosureAnnotator closureAnnotator = new ClosureAnnotator();
|
ClosureAnnotator closureAnnotator = new ClosureAnnotator();
|
||||||
|
|
||||||
this.jetTypeMapper.setBindingContext(bindingContext);
|
this.jetTypeMapper.setBindingContext(bindingContext);
|
||||||
|
this.jetTypeMapper.setClassBuilderMode(classBuilderMode);
|
||||||
this.jetTypeMapper.setClosureAnnotator(closureAnnotator);
|
this.jetTypeMapper.setClosureAnnotator(closureAnnotator);
|
||||||
this.jetTypeMapper.setCompilerSpecialMode(compilerSpecialMode);
|
this.jetTypeMapper.setCompilerSpecialMode(compilerSpecialMode);
|
||||||
this.jetTypeMapper.setStandardLibrary(jetStandardLibrary);
|
this.jetTypeMapper.setStandardLibrary(jetStandardLibrary);
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import java.util.List;
|
|||||||
import org.jetbrains.jet.lang.psi.JetFile;
|
import org.jetbrains.jet.lang.psi.JetFile;
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
import org.jetbrains.jet.lang.resolve.java.CompilerSpecialMode;
|
import org.jetbrains.jet.lang.resolve.java.CompilerSpecialMode;
|
||||||
|
import org.jetbrains.jet.codegen.ClassBuilderMode;
|
||||||
import org.jetbrains.jet.codegen.GenerationState;
|
import org.jetbrains.jet.codegen.GenerationState;
|
||||||
import org.jetbrains.jet.codegen.ClassBuilderFactory;
|
import org.jetbrains.jet.codegen.ClassBuilderFactory;
|
||||||
import org.jetbrains.jet.codegen.JetTypeMapper;
|
import org.jetbrains.jet.codegen.JetTypeMapper;
|
||||||
@@ -35,6 +36,7 @@ import java.util.List;
|
|||||||
import org.jetbrains.jet.lang.psi.JetFile;
|
import org.jetbrains.jet.lang.psi.JetFile;
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
import org.jetbrains.jet.lang.resolve.java.CompilerSpecialMode;
|
import org.jetbrains.jet.lang.resolve.java.CompilerSpecialMode;
|
||||||
|
import org.jetbrains.jet.codegen.ClassBuilderMode;
|
||||||
import org.jetbrains.jet.codegen.GenerationState;
|
import org.jetbrains.jet.codegen.GenerationState;
|
||||||
import org.jetbrains.jet.codegen.ClassBuilderFactory;
|
import org.jetbrains.jet.codegen.ClassBuilderFactory;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
@@ -54,6 +56,7 @@ public class InjectorForJvmCodegen {
|
|||||||
@NotNull List<JetFile> listOfJetFile,
|
@NotNull List<JetFile> listOfJetFile,
|
||||||
@NotNull Project project,
|
@NotNull Project project,
|
||||||
@NotNull CompilerSpecialMode compilerSpecialMode,
|
@NotNull CompilerSpecialMode compilerSpecialMode,
|
||||||
|
@NotNull ClassBuilderMode classBuilderMode,
|
||||||
@NotNull GenerationState generationState,
|
@NotNull GenerationState generationState,
|
||||||
@NotNull ClassBuilderFactory classBuilderFactory
|
@NotNull ClassBuilderFactory classBuilderFactory
|
||||||
) {
|
) {
|
||||||
@@ -65,6 +68,7 @@ public class InjectorForJvmCodegen {
|
|||||||
ClosureAnnotator closureAnnotator = new ClosureAnnotator();
|
ClosureAnnotator closureAnnotator = new ClosureAnnotator();
|
||||||
|
|
||||||
this.jetTypeMapper.setBindingContext(bindingContext);
|
this.jetTypeMapper.setBindingContext(bindingContext);
|
||||||
|
this.jetTypeMapper.setClassBuilderMode(classBuilderMode);
|
||||||
this.jetTypeMapper.setClosureAnnotator(closureAnnotator);
|
this.jetTypeMapper.setClosureAnnotator(closureAnnotator);
|
||||||
this.jetTypeMapper.setCompilerSpecialMode(compilerSpecialMode);
|
this.jetTypeMapper.setCompilerSpecialMode(compilerSpecialMode);
|
||||||
this.jetTypeMapper.setStandardLibrary(jetStandardLibrary);
|
this.jetTypeMapper.setStandardLibrary(jetStandardLibrary);
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.jet.analyzer.AnalyzeExhaust;
|
import org.jetbrains.jet.analyzer.AnalyzeExhaust;
|
||||||
import org.jetbrains.jet.codegen.ClassBuilder;
|
import org.jetbrains.jet.codegen.ClassBuilder;
|
||||||
import org.jetbrains.jet.codegen.ClassBuilderFactory;
|
import org.jetbrains.jet.codegen.ClassBuilderFactory;
|
||||||
|
import org.jetbrains.jet.codegen.ClassBuilderMode;
|
||||||
import org.jetbrains.jet.codegen.CompilationErrorHandler;
|
import org.jetbrains.jet.codegen.CompilationErrorHandler;
|
||||||
import org.jetbrains.jet.codegen.GenerationState;
|
import org.jetbrains.jet.codegen.GenerationState;
|
||||||
import org.jetbrains.jet.lang.psi.JetFile;
|
import org.jetbrains.jet.lang.psi.JetFile;
|
||||||
@@ -141,6 +142,12 @@ public class JetLightClass extends AbstractLightClass implements JetJavaMirrorMa
|
|||||||
final Stack<StubElement> stubStack = new Stack<StubElement>();
|
final Stack<StubElement> stubStack = new Stack<StubElement>();
|
||||||
|
|
||||||
final ClassBuilderFactory builderFactory = new ClassBuilderFactory() {
|
final ClassBuilderFactory builderFactory = new ClassBuilderFactory() {
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public ClassBuilderMode getClassBuilderMode() {
|
||||||
|
return ClassBuilderMode.SIGNATURES;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ClassBuilder newClassBuilder() {
|
public ClassBuilder newClassBuilder() {
|
||||||
return new StubClassBuilder(stubStack);
|
return new StubClassBuilder(stubStack);
|
||||||
|
|||||||
@@ -107,9 +107,4 @@ public class StubClassBuilder extends ClassBuilder {
|
|||||||
}
|
}
|
||||||
super.done();
|
super.done();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Mode generateCode() {
|
|
||||||
return Mode.SIGNATURES;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ package org.jetbrains.jet.di;
|
|||||||
|
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
import org.jetbrains.jet.codegen.ClassBuilderFactory;
|
import org.jetbrains.jet.codegen.ClassBuilderFactory;
|
||||||
|
import org.jetbrains.jet.codegen.ClassBuilderMode;
|
||||||
import org.jetbrains.jet.codegen.ClassFileFactory;
|
import org.jetbrains.jet.codegen.ClassFileFactory;
|
||||||
import org.jetbrains.jet.codegen.GenerationState;
|
import org.jetbrains.jet.codegen.GenerationState;
|
||||||
import org.jetbrains.jet.codegen.JetTypeMapper;
|
import org.jetbrains.jet.codegen.JetTypeMapper;
|
||||||
@@ -149,6 +150,7 @@ public class AllInjectorsGenerator {
|
|||||||
generator.addParameter(DiType.listOf(JetFile.class));
|
generator.addParameter(DiType.listOf(JetFile.class));
|
||||||
generator.addParameter(Project.class);
|
generator.addParameter(Project.class);
|
||||||
generator.addParameter(CompilerSpecialMode.class);
|
generator.addParameter(CompilerSpecialMode.class);
|
||||||
|
generator.addParameter(ClassBuilderMode.class);
|
||||||
generator.addPublicParameter(GenerationState.class);
|
generator.addPublicParameter(GenerationState.class);
|
||||||
generator.addParameter(ClassBuilderFactory.class);
|
generator.addParameter(ClassBuilderFactory.class);
|
||||||
generator.addPublicField(JetTypeMapper.class);
|
generator.addPublicField(JetTypeMapper.class);
|
||||||
@@ -164,6 +166,7 @@ public class AllInjectorsGenerator {
|
|||||||
generator.addParameter(DiType.listOf(JetFile.class));
|
generator.addParameter(DiType.listOf(JetFile.class));
|
||||||
generator.addPublicField(JetTypeMapper.class);
|
generator.addPublicField(JetTypeMapper.class);
|
||||||
generator.addField(CompilerSpecialMode.REGULAR);
|
generator.addField(CompilerSpecialMode.REGULAR);
|
||||||
|
generator.addField(ClassBuilderMode.FULL);
|
||||||
generator.generate("compiler/backend/src", "org.jetbrains.jet.di", "InjectorForJetTypeMapper");
|
generator.generate("compiler/backend/src", "org.jetbrains.jet.di", "InjectorForJetTypeMapper");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user