diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ClassBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ClassBodyCodegen.java index 6bf4ce123b4..97fd5c0da3c 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ClassBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ClassBodyCodegen.java @@ -28,14 +28,13 @@ import org.jetbrains.jet.lang.descriptors.impl.SimpleFunctionDescriptorImpl; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.DescriptorUtils; -import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant; import org.jetbrains.jet.lang.resolve.name.Name; import java.util.Collections; import java.util.List; import static org.jetbrains.asm4.Opcodes.*; -import static org.jetbrains.jet.codegen.AsmUtil.*; +import static org.jetbrains.jet.codegen.AsmUtil.genMethodThrow; import static org.jetbrains.jet.codegen.binding.CodegenBinding.enumEntryNeedSubclass; public abstract class ClassBodyCodegen extends MemberCodegen { diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ClassBuilder.java b/compiler/backend/src/org/jetbrains/jet/codegen/ClassBuilder.java index 60c455df3e0..c0227c94eda 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ClassBuilder.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ClassBuilder.java @@ -17,8 +17,12 @@ package org.jetbrains.jet.codegen; import com.intellij.psi.PsiElement; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.asm4.*; +import org.jetbrains.asm4.AnnotationVisitor; +import org.jetbrains.asm4.ClassVisitor; +import org.jetbrains.asm4.FieldVisitor; +import org.jetbrains.asm4.MethodVisitor; public abstract class ClassBuilder { private String thisName; @@ -26,11 +30,12 @@ public abstract class ClassBuilder { public static class Concrete extends ClassBuilder { private final ClassVisitor v; - public Concrete(ClassVisitor v) { + public Concrete(@NotNull ClassVisitor v) { this.v = v; } @Override + @NotNull public ClassVisitor getVisitor() { return v; } @@ -39,8 +44,8 @@ public abstract class ClassBuilder { public FieldVisitor newField( @Nullable PsiElement origin, int access, - String name, - String desc, + @NotNull String name, + @NotNull String desc, @Nullable String signature, @Nullable Object value ) { @@ -50,18 +55,16 @@ public abstract class ClassBuilder { public MethodVisitor newMethod( @Nullable PsiElement origin, int access, - String name, - String desc, + @NotNull String name, + @NotNull String desc, @Nullable String signature, @Nullable String[] exceptions ) { return getVisitor().visitMethod(access, name, desc, signature, exceptions); } - public AnnotationVisitor newAnnotation( - String desc, - boolean visible - ) { + @NotNull + public AnnotationVisitor newAnnotation(@NotNull String desc, boolean visible) { return getVisitor().visitAnnotation(desc, visible); } @@ -69,34 +72,37 @@ public abstract class ClassBuilder { getVisitor().visitEnd(); } + @NotNull public abstract ClassVisitor getVisitor(); public void defineClass( - PsiElement origin, + @Nullable PsiElement origin, int version, int access, - String name, + @NotNull String name, @Nullable String signature, - String superName, - String[] interfaces + @NotNull String superName, + @NotNull String[] interfaces ) { thisName = name; getVisitor().visit(version, access, name, signature, superName, interfaces); } - public void visitSource(String name, @Nullable String debug) { + public void visitSource(@NotNull String name, @Nullable String debug) { getVisitor().visitSource(name, debug); } - public void visitOuterClass(String owner, @Nullable String name, @Nullable String desc) { + public void visitOuterClass(@NotNull String owner, @Nullable String name, @Nullable String desc) { getVisitor().visitOuterClass(owner, name, desc); } - public void visitInnerClass(String name, String outerName, String innerName, int access) { + public void visitInnerClass(@NotNull String name, @Nullable String outerName, @Nullable String innerName, int access) { getVisitor().visitInnerClass(name, outerName, innerName, access); } + @NotNull public String getThisName() { + assert thisName != null : "This name isn't set"; return thisName; } } diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java index e97b5e76306..97b64bed30b 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java @@ -1542,6 +1542,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { protected void generateDeclaration(PropertyCodegen propertyCodegen, JetDeclaration declaration) { if (declaration instanceof JetEnumEntry) { String name = declaration.getName(); + assert name != null : "Enum entry has no name: " + declaration.getText(); String desc = "L" + classAsmType.getInternalName() + ";"; v.newField(declaration, ACC_PUBLIC | ACC_ENUM | ACC_STATIC | ACC_FINAL, name, desc, null, null); myEnumConstants.add((JetEnumEntry) declaration); diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/PropertyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/PropertyCodegen.java index 1815cb705b6..f7a808e3e03 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/PropertyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/PropertyCodegen.java @@ -107,7 +107,9 @@ public class PropertyCodegen extends GenerationStateAware { public void generateConstructorPropertyAsMethodForAnnotationClass(JetParameter p, PropertyDescriptor descriptor) { Type type = state.getTypeMapper().mapType(descriptor); - MethodVisitor visitor = v.newMethod(p, ACC_PUBLIC | ACC_ABSTRACT, p.getName(), "()" + type.getDescriptor(), null, null); + String name = p.getName(); + assert name != null : "Annotation parameter has no name: " + p.getText(); + MethodVisitor visitor = v.newMethod(p, ACC_PUBLIC | ACC_ABSTRACT, name, "()" + type.getDescriptor(), null, null); JetExpression defaultValue = p.getDefaultValue(); if (defaultValue != null) { CompileTimeConstant constant = state.getBindingContext().get(BindingContext.COMPILE_TIME_VALUE, defaultValue); diff --git a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/StubClassBuilder.java b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/StubClassBuilder.java index 01ec5211092..28970cdde0f 100644 --- a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/StubClassBuilder.java +++ b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/StubClassBuilder.java @@ -22,6 +22,7 @@ import com.intellij.psi.impl.compiled.StubBuildingVisitor; import com.intellij.psi.stubs.StubBase; import com.intellij.psi.stubs.StubElement; import com.intellij.util.containers.Stack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.asm4.ClassReader; import org.jetbrains.asm4.ClassVisitor; @@ -29,7 +30,6 @@ import org.jetbrains.asm4.FieldVisitor; import org.jetbrains.asm4.MethodVisitor; import org.jetbrains.jet.codegen.ClassBuilder; import org.jetbrains.jet.lang.psi.JetFile; -import org.jetbrains.jet.lang.psi.JetNamedDeclaration; import org.jetbrains.jet.lang.psi.JetPsiUtil; import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; import org.jetbrains.jet.lang.resolve.name.FqName; @@ -53,11 +53,12 @@ public class StubClassBuilder extends ClassBuilder { private final Stack parentStack; private boolean isNamespace = false; - public StubClassBuilder(Stack parentStack) { + public StubClassBuilder(@NotNull Stack parentStack) { this.parentStack = parentStack; this.parent = parentStack.peek(); } + @NotNull @Override public ClassVisitor getVisitor() { assert v != null : "Called before class is defined"; @@ -65,7 +66,15 @@ public class StubClassBuilder extends ClassBuilder { } @Override - public void defineClass(PsiElement origin, int version, int access, String name, @Nullable String signature, String superName, String[] interfaces) { + public void defineClass( + PsiElement origin, + int version, + int access, + @NotNull String name, + @Nullable String signature, + @NotNull String superName, + @NotNull String[] interfaces + ) { assert v == null : "defineClass() called twice?"; v = new StubBuildingVisitor(null, EMPTY_STRATEGY, parent, access); @@ -88,7 +97,14 @@ public class StubClassBuilder extends ClassBuilder { } @Override - public MethodVisitor newMethod(@Nullable PsiElement origin, int access, String name, String desc, @Nullable String signature, @Nullable String[] exceptions) { + public MethodVisitor newMethod( + @Nullable PsiElement origin, + int access, + @NotNull String name, + @NotNull String desc, + @Nullable String signature, + @Nullable String[] exceptions + ) { MethodVisitor internalVisitor = super.newMethod(origin, access, name, desc, signature, exceptions); if (internalVisitor != null) { @@ -100,7 +116,14 @@ public class StubClassBuilder extends ClassBuilder { } @Override - public FieldVisitor newField(@Nullable PsiElement origin, int access, String name, String desc, @Nullable String signature, @Nullable Object value) { + public FieldVisitor newField( + @Nullable PsiElement origin, + int access, + @NotNull String name, + @NotNull String desc, + @Nullable String signature, + @Nullable Object value + ) { FieldVisitor internalVisitor = super.newField(origin, access, name, desc, signature, value); if (internalVisitor != null) {