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);
@@ -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<StubElement> parentStack;
private boolean isNamespace = false;
public StubClassBuilder(Stack<StubElement> parentStack) {
public StubClassBuilder(@NotNull Stack<StubElement> 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<Object>(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) {