コード例 #1
0
ファイル: AsmUtil.java プロジェクト: bashor/kotlin
  public static void genNotNullAssertionsForParameters(
      @NotNull InstructionAdapter v,
      @NotNull GenerationState state,
      @NotNull FunctionDescriptor descriptor,
      @NotNull FrameMap frameMap) {
    if (!state.isGenerateNotNullParamAssertions()) return;

    // Private method is not accessible from other classes, no assertions needed
    if (getVisibilityAccessFlag(descriptor) == ACC_PRIVATE) return;

    for (ValueParameterDescriptor parameter : descriptor.getValueParameters()) {
      JetType type = parameter.getReturnType();
      if (type == null || isNullableType(type)) continue;

      int index = frameMap.getIndex(parameter);
      Type asmType = state.getTypeMapper().mapReturnType(type);
      if (asmType.getSort() == Type.OBJECT || asmType.getSort() == Type.ARRAY) {
        v.load(index, asmType);
        v.visitLdcInsn(descriptor.getName().asString());
        v.invokestatic(
            "jet/runtime/Intrinsics",
            "checkParameterIsNotNull",
            "(Ljava/lang/Object;Ljava/lang/String;)V");
      }
    }
  }
コード例 #2
0
ファイル: AsmUtil.java プロジェクト: bashor/kotlin
  public static int getMethodAsmFlags(FunctionDescriptor functionDescriptor, OwnerKind kind) {
    int flags = getCommonCallableFlags(functionDescriptor);

    if (functionDescriptor.getModality() == Modality.FINAL
        && !(functionDescriptor instanceof ConstructorDescriptor)) {
      DeclarationDescriptor containingDeclaration = functionDescriptor.getContainingDeclaration();
      if (!(containingDeclaration instanceof ClassDescriptor)
          || ((ClassDescriptor) containingDeclaration).getKind() != ClassKind.TRAIT) {
        flags |= ACC_FINAL;
      }
    }

    if (isStaticMethod(kind, functionDescriptor)) {
      flags |= ACC_STATIC;
    }

    if (isAbstractMethod(functionDescriptor, kind)) {
      flags |= ACC_ABSTRACT;
    }

    if (JetTypeMapper.isAccessor(functionDescriptor)) {
      flags |= ACC_SYNTHETIC;
    }

    return flags;
  }
コード例 #3
0
ファイル: AsmUtil.java プロジェクト: bashor/kotlin
 private static int getVarargsFlag(FunctionDescriptor functionDescriptor) {
   if (!functionDescriptor.getValueParameters().isEmpty()
       && functionDescriptor
               .getValueParameters()
               .get(functionDescriptor.getValueParameters().size() - 1)
               .getVarargElementType()
           != null) {
     return ACC_VARARGS;
   }
   return 0;
 }
コード例 #4
0
ファイル: AsmUtil.java プロジェクト: bashor/kotlin
 public static boolean isAbstractMethod(FunctionDescriptor functionDescriptor, OwnerKind kind) {
   return (functionDescriptor.getModality() == Modality.ABSTRACT
           || isInterface(functionDescriptor.getContainingDeclaration()))
       && !isStaticMethod(kind, functionDescriptor);
 }