Intrinsic receiver parameter annotated with NotNull
This commit is contained in:
@@ -1797,7 +1797,7 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> implem
|
||||
}
|
||||
|
||||
@Override
|
||||
public StackValue visitSimpleNameExpression(@NotNull JetSimpleNameExpression expression, StackValue receiver) {
|
||||
public StackValue visitSimpleNameExpression(@NotNull JetSimpleNameExpression expression, @NotNull StackValue receiver) {
|
||||
ResolvedCall<?> resolvedCall = getResolvedCall(expression, bindingContext);
|
||||
|
||||
DeclarationDescriptor descriptor;
|
||||
@@ -2810,7 +2810,7 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> implem
|
||||
}
|
||||
|
||||
@Override
|
||||
public StackValue visitBinaryExpression(@NotNull JetBinaryExpression expression, StackValue receiver) {
|
||||
public StackValue visitBinaryExpression(@NotNull JetBinaryExpression expression, @NotNull StackValue receiver) {
|
||||
JetSimpleNameExpression reference = expression.getOperationReference();
|
||||
IElementType opToken = reference.getReferencedNameElementType();
|
||||
if (opToken == JetTokens.EQ) {
|
||||
@@ -3194,7 +3194,7 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> implem
|
||||
}
|
||||
|
||||
@Override
|
||||
public StackValue visitPrefixExpression(@NotNull JetPrefixExpression expression, StackValue receiver) {
|
||||
public StackValue visitPrefixExpression(@NotNull JetPrefixExpression expression, @NotNull StackValue receiver) {
|
||||
DeclarationDescriptor originalOperation = bindingContext.get(REFERENCE_TARGET, expression.getOperationReference());
|
||||
ResolvedCall<?> resolvedCall = getResolvedCallWithAssert(expression, bindingContext);
|
||||
CallableDescriptor op = resolvedCall.getResultingDescriptor();
|
||||
|
||||
@@ -1005,7 +1005,7 @@ public abstract class StackValue {
|
||||
((CallableMethod) getter).invokeWithNotNullAssertion(v, state, resolvedGetCall);
|
||||
}
|
||||
else {
|
||||
StackValue result = ((IntrinsicMethod) getter).generate(codegen, this.type, null, Collections.<JetExpression>emptyList(), null);
|
||||
StackValue result = ((IntrinsicMethod) getter).generate(codegen, this.type, null, Collections.<JetExpression>emptyList(), StackValue.none());
|
||||
result.put(result.type, v);
|
||||
}
|
||||
coerceTo(type, v);
|
||||
@@ -1070,7 +1070,7 @@ public abstract class StackValue {
|
||||
}
|
||||
else {
|
||||
//noinspection ConstantConditions
|
||||
StackValue result = ((IntrinsicMethod) setter).generate(codegen, null, null, Collections.<JetExpression>emptyList(), null);
|
||||
StackValue result = ((IntrinsicMethod) setter).generate(codegen, null, null, Collections.<JetExpression>emptyList(), StackValue.none());
|
||||
result.put(result.type, v);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,11 +36,11 @@ public class ArrayGet extends IntrinsicMethod {
|
||||
@NotNull InstructionAdapter v,
|
||||
@NotNull Type returnType,
|
||||
PsiElement element,
|
||||
List<JetExpression> arguments,
|
||||
StackValue receiver
|
||||
@NotNull List<JetExpression> arguments,
|
||||
@NotNull StackValue receiver
|
||||
) {
|
||||
int argumentIndex;
|
||||
if (receiver == null || receiver == StackValue.none()) {
|
||||
if (receiver == StackValue.none()) {
|
||||
receiver = codegen.gen(arguments.get(0));
|
||||
argumentIndex = 1;
|
||||
} else {
|
||||
|
||||
@@ -50,7 +50,7 @@ public class ArrayIterator extends IntrinsicMethod {
|
||||
@NotNull Type returnType,
|
||||
PsiElement element,
|
||||
@NotNull List<JetExpression> arguments,
|
||||
StackValue receiver
|
||||
@NotNull StackValue receiver
|
||||
) {
|
||||
receiver.put(receiver.type, v);
|
||||
JetCallExpression call = (JetCallExpression) element;
|
||||
|
||||
@@ -37,7 +37,7 @@ public class ArraySet extends IntrinsicMethod {
|
||||
@NotNull Type returnType,
|
||||
PsiElement element,
|
||||
@NotNull List<JetExpression> arguments,
|
||||
StackValue receiver
|
||||
@NotNull StackValue receiver
|
||||
) {
|
||||
receiver.put(receiver.type, v);
|
||||
Type type = correctElementType(receiver.type);
|
||||
|
||||
@@ -35,7 +35,7 @@ public class ArraySize extends IntrinsicMethod {
|
||||
@NotNull Type returnType,
|
||||
PsiElement element,
|
||||
@NotNull List<JetExpression> arguments,
|
||||
StackValue receiver
|
||||
@NotNull StackValue receiver
|
||||
) {
|
||||
receiver.put(receiver.type, v);
|
||||
v.arraylength();
|
||||
|
||||
@@ -45,7 +45,7 @@ public class BinaryOp extends IntrinsicMethod {
|
||||
@NotNull Type returnType,
|
||||
PsiElement element,
|
||||
@NotNull List<JetExpression> arguments,
|
||||
StackValue receiver
|
||||
@NotNull StackValue receiver
|
||||
) {
|
||||
assert isPrimitive(returnType) : "Return type of BinaryOp intrinsic should be of primitive type : " + returnType;
|
||||
|
||||
@@ -53,7 +53,7 @@ public class BinaryOp extends IntrinsicMethod {
|
||||
|
||||
if (arguments.size() == 1) {
|
||||
// Intrinsic is called as an ordinary function
|
||||
if (receiver != null) {
|
||||
if (receiver != StackValue.none()) {
|
||||
receiver.put(operandType, v);
|
||||
}
|
||||
codegen.gen(arguments.get(0), shift() ? Type.INT_TYPE : operandType);
|
||||
|
||||
@@ -44,7 +44,7 @@ public class Clone extends IntrinsicMethod {
|
||||
@NotNull Type returnType,
|
||||
@Nullable PsiElement element,
|
||||
@NotNull List<JetExpression> arguments,
|
||||
@Nullable StackValue receiver
|
||||
@NotNull StackValue receiver
|
||||
) {
|
||||
ResolvedCall<?> resolvedCall = getResolvedCallWithAssert(((JetElement) element), codegen.getBindingContext());
|
||||
StackValue.receiver(resolvedCall, receiver, codegen, null).put(OBJECT_TYPE, v);
|
||||
|
||||
@@ -38,10 +38,9 @@ public class CompareTo extends IntrinsicMethod {
|
||||
@NotNull Type returnType,
|
||||
@Nullable PsiElement element,
|
||||
@NotNull List<JetExpression> arguments,
|
||||
StackValue receiver
|
||||
@NotNull StackValue receiver
|
||||
) {
|
||||
JetExpression argument;
|
||||
assert arguments != null;
|
||||
if (arguments.size() == 1) {
|
||||
argument = arguments.get(0);
|
||||
}
|
||||
|
||||
@@ -40,9 +40,9 @@ public class Concat extends IntrinsicMethod {
|
||||
@NotNull Type returnType,
|
||||
PsiElement element,
|
||||
@NotNull List<JetExpression> arguments,
|
||||
StackValue receiver
|
||||
@NotNull StackValue receiver
|
||||
) {
|
||||
if (receiver == null || receiver == StackValue.none()) {
|
||||
if (receiver == StackValue.none()) {
|
||||
// LHS + RHS
|
||||
genStringBuilderConstructor(v);
|
||||
codegen.invokeAppend(arguments.get(0));
|
||||
|
||||
@@ -39,9 +39,8 @@ public class CopyToArray extends IntrinsicMethod {
|
||||
@NotNull Type returnType,
|
||||
@Nullable PsiElement element,
|
||||
@NotNull List<JetExpression> arguments,
|
||||
@Nullable StackValue receiver
|
||||
@NotNull StackValue receiver
|
||||
) {
|
||||
assert receiver != null;
|
||||
receiver.put(receiver.type, v);
|
||||
v.dup();
|
||||
v.invokeinterface("java/util/Collection", "size", "()I");
|
||||
|
||||
@@ -40,7 +40,7 @@ public class Equals extends IntrinsicMethod {
|
||||
@NotNull Type returnType,
|
||||
PsiElement element,
|
||||
@NotNull List<JetExpression> arguments,
|
||||
StackValue receiver
|
||||
@NotNull StackValue receiver
|
||||
) {
|
||||
StackValue leftExpr;
|
||||
JetExpression rightExpr;
|
||||
|
||||
@@ -38,7 +38,7 @@ public class HashCode extends IntrinsicMethod {
|
||||
@NotNull Type returnType,
|
||||
@Nullable PsiElement element,
|
||||
@NotNull List<JetExpression> arguments,
|
||||
StackValue receiver
|
||||
@NotNull StackValue receiver
|
||||
) {
|
||||
receiver.put(AsmTypeConstants.OBJECT_TYPE, v);
|
||||
v.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/Object", "hashCode", "()I", false);
|
||||
|
||||
@@ -40,7 +40,7 @@ public class IdentityEquals extends IntrinsicMethod {
|
||||
@NotNull Type returnType,
|
||||
PsiElement element,
|
||||
@NotNull List<JetExpression> arguments,
|
||||
StackValue receiver
|
||||
@NotNull StackValue receiver
|
||||
) {
|
||||
StackValue left;
|
||||
StackValue right;
|
||||
|
||||
@@ -44,7 +44,7 @@ public class Increment extends IntrinsicMethod {
|
||||
@NotNull Type returnType,
|
||||
PsiElement element,
|
||||
@NotNull List<JetExpression> arguments,
|
||||
StackValue receiver
|
||||
@NotNull StackValue receiver
|
||||
) {
|
||||
assert isPrimitive(returnType) : "Return type of Increment intrinsic should be of primitive type : " + returnType;
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ public abstract class IntrinsicMethod implements Callable {
|
||||
@NotNull final Type returnType,
|
||||
@Nullable final PsiElement element,
|
||||
@NotNull final List<JetExpression> arguments,
|
||||
@Nullable final StackValue receiver
|
||||
@NotNull final StackValue receiver
|
||||
) {
|
||||
return StackValue.operation(returnType, new Function1<InstructionAdapter, Unit>() {
|
||||
|
||||
@@ -56,6 +56,6 @@ public abstract class IntrinsicMethod implements Callable {
|
||||
@NotNull Type returnType,
|
||||
@Nullable PsiElement element,
|
||||
@NotNull List<JetExpression> arguments,
|
||||
@Nullable StackValue receiver
|
||||
@NotNull StackValue receiver
|
||||
);
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ public class Inv extends IntrinsicMethod {
|
||||
@NotNull Type returnType,
|
||||
PsiElement element,
|
||||
@NotNull List<JetExpression> arguments,
|
||||
StackValue receiver
|
||||
@NotNull StackValue receiver
|
||||
) {
|
||||
assert isPrimitive(returnType) : "Return type of Inv intrinsic should be of primitive type : " + returnType;
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ public class IteratorNext extends IntrinsicMethod {
|
||||
@NotNull Type returnType,
|
||||
PsiElement element,
|
||||
@NotNull List<JetExpression> arguments,
|
||||
StackValue receiver
|
||||
@NotNull StackValue receiver
|
||||
) {
|
||||
String name;
|
||||
if (returnType == Type.CHAR_TYPE) {
|
||||
|
||||
@@ -44,7 +44,7 @@ public class JavaClassArray extends IntrinsicMethod {
|
||||
@NotNull Type returnType,
|
||||
@Nullable PsiElement element,
|
||||
@NotNull List<JetExpression> arguments,
|
||||
StackValue receiver
|
||||
@NotNull StackValue receiver
|
||||
) {
|
||||
assert element != null : "Element should not be null";
|
||||
ResolvedCall<?> resolvedCall = getResolvedCallWithAssert((JetElement) element, codegen.getBindingContext());
|
||||
|
||||
@@ -44,7 +44,7 @@ public class JavaClassFunction extends IntrinsicMethod {
|
||||
@NotNull Type expectedType,
|
||||
@Nullable PsiElement element,
|
||||
@NotNull List<JetExpression> arguments,
|
||||
StackValue receiver
|
||||
@NotNull StackValue receiver
|
||||
) {
|
||||
ResolvedCall<?> resolvedCall = CallUtilPackage.getResolvedCallWithAssert(
|
||||
(JetElement) element, codegen.getBindingContext());
|
||||
|
||||
@@ -41,7 +41,7 @@ public class JavaClassProperty extends IntrinsicMethod {
|
||||
@NotNull Type returnType,
|
||||
@Nullable PsiElement element,
|
||||
@NotNull List<JetExpression> arguments,
|
||||
StackValue receiver
|
||||
@NotNull StackValue receiver
|
||||
) {
|
||||
Type type = receiver.type;
|
||||
if (isPrimitive(type)) {
|
||||
|
||||
@@ -55,7 +55,7 @@ public class MonitorInstruction extends IntrinsicMethod {
|
||||
@NotNull Type returnType,
|
||||
@Nullable PsiElement element,
|
||||
@NotNull List<JetExpression> arguments,
|
||||
@Nullable StackValue receiver
|
||||
@NotNull StackValue receiver
|
||||
) {
|
||||
assert element != null : "Element should not be null";
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ public class NewArray extends IntrinsicMethod {
|
||||
@NotNull Type returnType,
|
||||
PsiElement element,
|
||||
@NotNull List<JetExpression> arguments,
|
||||
StackValue receiver
|
||||
@NotNull StackValue receiver
|
||||
) {
|
||||
codegen.generateNewArray((JetCallExpression) element).put(returnType, v);
|
||||
return returnType;
|
||||
|
||||
@@ -34,8 +34,8 @@ public class Not extends IntrinsicMethod {
|
||||
@NotNull InstructionAdapter v,
|
||||
@NotNull Type returnType,
|
||||
PsiElement element,
|
||||
List<JetExpression> arguments,
|
||||
StackValue receiver
|
||||
@NotNull List<JetExpression> arguments,
|
||||
@NotNull StackValue receiver
|
||||
) {
|
||||
StackValue stackValue;
|
||||
if (arguments.size() == 1) {
|
||||
|
||||
@@ -35,7 +35,7 @@ public class NumberCast extends IntrinsicMethod {
|
||||
@NotNull Type returnType,
|
||||
PsiElement element,
|
||||
@NotNull List<JetExpression> arguments,
|
||||
StackValue receiver
|
||||
@NotNull StackValue receiver
|
||||
) {
|
||||
receiver.put(returnType, v);
|
||||
return returnType;
|
||||
|
||||
@@ -38,7 +38,7 @@ public class RangeTo extends IntrinsicMethod {
|
||||
@NotNull Type returnType,
|
||||
PsiElement element,
|
||||
@NotNull List<JetExpression> arguments,
|
||||
StackValue receiver
|
||||
@NotNull StackValue receiver
|
||||
) {
|
||||
v.anew(returnType);
|
||||
v.dup();
|
||||
|
||||
@@ -35,9 +35,9 @@ public class StringGetChar extends IntrinsicMethod {
|
||||
@NotNull Type returnType,
|
||||
PsiElement element,
|
||||
@NotNull List<JetExpression> arguments,
|
||||
StackValue receiver
|
||||
@NotNull StackValue receiver
|
||||
) {
|
||||
if (receiver != null) {
|
||||
if (receiver != StackValue.none()) {
|
||||
receiver.put(receiver.type, v);
|
||||
}
|
||||
if (!arguments.isEmpty()) {
|
||||
|
||||
@@ -38,9 +38,9 @@ public class StringPlus extends IntrinsicMethod {
|
||||
@NotNull Type returnType,
|
||||
PsiElement element,
|
||||
@NotNull List<JetExpression> arguments,
|
||||
StackValue receiver
|
||||
@NotNull StackValue receiver
|
||||
) {
|
||||
if (receiver == null || receiver == StackValue.none()) {
|
||||
if (receiver == StackValue.none()) {
|
||||
codegen.gen(arguments.get(0)).put(JAVA_STRING_TYPE, v);
|
||||
codegen.gen(arguments.get(1)).put(OBJECT_TYPE, v);
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ public class ToString extends IntrinsicMethod {
|
||||
@NotNull Type returnType,
|
||||
PsiElement element,
|
||||
@NotNull List<JetExpression> arguments,
|
||||
StackValue receiver
|
||||
@NotNull StackValue receiver
|
||||
) {
|
||||
genToString(v, receiver, receiver.type).put(returnType, v);
|
||||
return returnType;
|
||||
|
||||
@@ -37,16 +37,16 @@ public class UnaryPlus extends IntrinsicMethod {
|
||||
@NotNull InstructionAdapter v,
|
||||
@NotNull Type returnType,
|
||||
@Nullable PsiElement element,
|
||||
@Nullable List<JetExpression> arguments,
|
||||
StackValue receiver
|
||||
@NotNull List<JetExpression> arguments,
|
||||
@NotNull StackValue receiver
|
||||
) {
|
||||
assert isPrimitive(returnType) : "Return type of UnaryPlus intrinsic should be of primitive type : " + returnType;
|
||||
|
||||
if (receiver != null && receiver != StackValue.none()) {
|
||||
if (receiver != StackValue.none()) {
|
||||
receiver.put(returnType, v);
|
||||
}
|
||||
else {
|
||||
assert arguments != null;
|
||||
assert !arguments.isEmpty();
|
||||
codegen.gen(arguments.get(0), returnType);
|
||||
}
|
||||
return returnType;
|
||||
|
||||
Reference in New Issue
Block a user