Minor, Nullable/NotNull annotations

This commit is contained in:
Alexander Udalov
2013-07-12 17:35:35 +04:00
parent 87d4e35388
commit cf7c27ba79
5 changed files with 56 additions and 25 deletions
@@ -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 {
@@ -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;
}
}
@@ -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);
@@ -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);