Remove OwnerKind.DelegateKind

It's not used anywhere anymore.

Add another assertion to checkMustGenerateCode()
This commit is contained in:
Alexander Udalov
2012-10-29 20:52:25 +04:00
parent fcbb5fe191
commit 8a0c057bd0
5 changed files with 17 additions and 94 deletions
@@ -196,11 +196,8 @@ public class CodegenUtil {
}
public static void checkMustGenerateCode(CallableMemberDescriptor descriptor) {
if (descriptor.getKind() == CallableMemberDescriptor.Kind.FAKE_OVERRIDE) {
throw new IllegalStateException("must not generate code for fake overrides");
}
if (descriptor.getKind() == CallableMemberDescriptor.Kind.SYNTHESIZED) {
throw new IllegalStateException("code generation for synthesized members should be handled separately");
if (descriptor.getKind() != CallableMemberDescriptor.Kind.DECLARATION) {
throw new IllegalStateException("Must not generate code for descriptor: " + descriptor);
}
}
@@ -93,10 +93,6 @@ public class FunctionCodegen extends GenerationStateAware {
checkMustGenerateCode(functionDescriptor);
OwnerKind kind = owner.getContextKind();
if (!isStatic(kind) &&
(kind instanceof OwnerKind.DelegateKind) != (functionDescriptor.getKind() == FunctionDescriptor.Kind.DELEGATION)) {
throw new IllegalStateException("Mismatching kind in " + functionDescriptor + "; context kind: " + kind);
}
if (kind == OwnerKind.TRAIT_IMPL) {
needJetAnnotations = false;
@@ -188,9 +184,6 @@ public class FunctionCodegen extends GenerationStateAware {
if (kind instanceof OwnerKind.StaticDelegateKind) {
generateStaticDelegateMethodBody(mv, asmMethod, (OwnerKind.StaticDelegateKind) kind);
}
else if (kind instanceof OwnerKind.DelegateKind) {
generateDelegateMethodBody(mv, asmMethod, (OwnerKind.DelegateKind) kind);
}
else {
FrameMap frameMap = context.prepareFrame(typeMapper);
@@ -317,24 +310,6 @@ public class FunctionCodegen extends GenerationStateAware {
}
}
private void generateDelegateMethodBody(
@NotNull MethodVisitor mv,
@NotNull Method asmMethod,
@NotNull OwnerKind.DelegateKind dk
) {
InstructionAdapter iv = new InstructionAdapter(mv);
Type[] argTypes = asmMethod.getArgumentTypes();
iv.load(0, OBJECT_TYPE);
dk.getDelegate().put(OBJECT_TYPE, iv);
for (int i = 0; i < argTypes.length; i++) {
Type argType = argTypes[i];
iv.load(i + 1, argType);
}
iv.invokeinterface(dk.getOwnerClass(), asmMethod.getName(), asmMethod.getDescriptor());
iv.areturn(asmMethod.getReturnType());
}
private void generateStaticDelegateMethodBody(
@NotNull MethodVisitor mv,
@NotNull Method asmMethod,
@@ -30,25 +30,6 @@ public class OwnerKind {
public static final OwnerKind IMPLEMENTATION = new OwnerKind("implementation");
public static final OwnerKind TRAIT_IMPL = new OwnerKind("trait implementation");
public static class DelegateKind extends OwnerKind {
private final StackValue delegate;
private final String ownerClass;
public DelegateKind(StackValue delegate, String ownerClass) {
super("delegateKind");
this.delegate = delegate;
this.ownerClass = ownerClass;
}
public StackValue getDelegate() {
return delegate;
}
public String getOwnerClass() {
return ownerClass;
}
}
public static class StaticDelegateKind extends OwnerKind {
private final String ownerClass;
@@ -180,7 +180,7 @@ public class PropertyCodegen extends GenerationStateAware {
PsiElement psiElement = descriptorToDeclaration(bindingContext, propertyDescriptor.getContainingDeclaration());
boolean isTrait = psiElement instanceof JetClass && ((JetClass) psiElement).isTrait();
if (isTrait && !(kind instanceof OwnerKind.DelegateKind)) {
if (isTrait) {
flags |= ACC_ABSTRACT;
}
@@ -202,7 +202,7 @@ public class PropertyCodegen extends GenerationStateAware {
AnnotationCodegen.forMethod(mv, typeMapper).genAnnotations(getter);
}
if (state.getClassBuilderMode() != ClassBuilderMode.SIGNATURES && (!isTrait || kind instanceof OwnerKind.DelegateKind)) {
if (state.getClassBuilderMode() != ClassBuilderMode.SIGNATURES && !isTrait) {
if (propertyDescriptor.getModality() != Modality.ABSTRACT) {
mv.visitCode();
if (state.getClassBuilderMode() == ClassBuilderMode.STUBS) {
@@ -215,22 +215,11 @@ public class PropertyCodegen extends GenerationStateAware {
}
final Type type = typeMapper.mapType(propertyDescriptor);
if ((kind instanceof OwnerKind.DelegateKind) != (propertyDescriptor.getKind() == FunctionDescriptor.Kind.DELEGATION)) {
throw new IllegalStateException("mismatching kind in " + propertyDescriptor);
}
if (kind instanceof OwnerKind.DelegateKind) {
OwnerKind.DelegateKind dk = (OwnerKind.DelegateKind) kind;
dk.getDelegate().put(OBJECT_TYPE, iv);
iv.invokeinterface(dk.getOwnerClass(), getterName, descriptor);
}
else {
iv.visitFieldInsn(
kind == OwnerKind.NAMESPACE ? GETSTATIC : GETFIELD,
typeMapper.getOwner(propertyDescriptor, kind).getInternalName(),
propertyDescriptor.getName().getName(),
type.getDescriptor());
}
iv.visitFieldInsn(
kind == OwnerKind.NAMESPACE ? GETSTATIC : GETFIELD,
typeMapper.getOwner(propertyDescriptor, kind).getInternalName(),
propertyDescriptor.getName().getName(),
type.getDescriptor());
iv.areturn(type);
}
}
@@ -271,7 +260,7 @@ public class PropertyCodegen extends GenerationStateAware {
PsiElement psiElement = descriptorToDeclaration(bindingContext, propertyDescriptor.getContainingDeclaration());
boolean isTrait = psiElement instanceof JetClass && ((JetClass) psiElement).isTrait();
if (isTrait && !(kind instanceof OwnerKind.DelegateKind)) {
if (isTrait) {
flags |= ACC_ABSTRACT;
}
@@ -289,7 +278,7 @@ public class PropertyCodegen extends GenerationStateAware {
assert !setter.hasBody();
AnnotationCodegen.forMethod(mv, typeMapper).genAnnotations(setter);
if (state.getClassBuilderMode() != ClassBuilderMode.SIGNATURES && (!isTrait || kind instanceof OwnerKind.DelegateKind)) {
if (state.getClassBuilderMode() != ClassBuilderMode.SIGNATURES && (!isTrait)) {
if (propertyDescriptor.getModality() != Modality.ABSTRACT) {
mv.visitCode();
if (state.getClassBuilderMode() == ClassBuilderMode.STUBS) {
@@ -304,25 +293,11 @@ public class PropertyCodegen extends GenerationStateAware {
paramCode = 1;
}
if ((kind instanceof OwnerKind.DelegateKind) != (propertyDescriptor.getKind() == FunctionDescriptor.Kind.DELEGATION)) {
throw new IllegalStateException("mismatching kind in " + propertyDescriptor);
}
if (kind instanceof OwnerKind.DelegateKind) {
OwnerKind.DelegateKind dk = (OwnerKind.DelegateKind) kind;
iv.load(0, OBJECT_TYPE);
dk.getDelegate().put(OBJECT_TYPE, iv);
iv.load(paramCode, type);
iv.invokeinterface(dk.getOwnerClass(), setterName(propertyDescriptor.getName()), descriptor);
}
else {
iv.load(paramCode, type);
iv.visitFieldInsn(kind == OwnerKind.NAMESPACE ? PUTSTATIC : PUTFIELD,
typeMapper.getOwner(propertyDescriptor, kind).getInternalName(),
propertyDescriptor.getName().getName(),
type.getDescriptor());
}
iv.load(paramCode, type);
iv.visitFieldInsn(kind == OwnerKind.NAMESPACE ? PUTSTATIC : PUTFIELD,
typeMapper.getOwner(propertyDescriptor, kind).getInternalName(),
propertyDescriptor.getName().getName(),
type.getDescriptor());
iv.visitInsn(RETURN);
}
@@ -75,14 +75,9 @@ public class JetTypeMapper extends BindingTraceAware {
}
else if (containingDeclaration instanceof ClassDescriptor) {
ClassDescriptor classDescriptor = (ClassDescriptor) containingDeclaration;
if (kind instanceof OwnerKind.DelegateKind) {
if (classDescriptor.getKind() == ClassKind.OBJECT) {
mapTypeMode = JetTypeMapperMode.IMPL;
}
else {
if (classDescriptor.getKind() == ClassKind.OBJECT) {
mapTypeMode = JetTypeMapperMode.IMPL;
}
}
Type asmType = mapType(classDescriptor.getDefaultType(), mapTypeMode);
if (asmType.getSort() != Type.OBJECT) {
throw new IllegalStateException();