コード例 #1
0
 /**
  * Generates a new statement that checks if the given variable is null, and if so, throws a {@code
  * NullPointerException} with the variable name as message.
  */
 public static JCStatement generateNullCheck(TreeMaker treeMaker, JavacNode variable) {
   JCVariableDecl varDecl = (JCVariableDecl) variable.get();
   if (isPrimitive(varDecl.vartype)) return null;
   Name fieldName = varDecl.name;
   JCExpression npe = chainDots(variable, "java", "lang", "NullPointerException");
   JCTree exception =
       treeMaker.NewClass(
           null,
           List.<JCExpression>nil(),
           npe,
           List.<JCExpression>of(treeMaker.Literal(fieldName.toString())),
           null);
   JCStatement throwStatement = treeMaker.Throw(exception);
   return treeMaker.If(
       treeMaker.Binary(CTC_EQUAL, treeMaker.Ident(fieldName), treeMaker.Literal(CTC_BOT, null)),
       throwStatement,
       null);
 }
コード例 #2
0
ファイル: HandleSneakyThrows.java プロジェクト: Reder/lombok
  private JCStatement buildTryCatchBlock(
      JavacNode node, List<JCStatement> contents, String exception) {
    TreeMaker maker = node.getTreeMaker();

    JCBlock tryBlock = maker.Block(0, contents);

    JCExpression varType = chainDots(maker, node, exception.split("\\."));

    JCVariableDecl catchParam =
        maker.VarDef(maker.Modifiers(Flags.FINAL), node.toName("$ex"), varType, null);
    JCExpression lombokLombokSneakyThrowNameRef =
        chainDots(maker, node, "lombok", "Lombok", "sneakyThrow");
    JCBlock catchBody =
        maker.Block(
            0,
            List.<JCStatement>of(
                maker.Throw(
                    maker.Apply(
                        List.<JCExpression>nil(),
                        lombokLombokSneakyThrowNameRef,
                        List.<JCExpression>of(maker.Ident(node.toName("$ex")))))));

    return maker.Try(tryBlock, List.of(maker.Catch(catchParam, catchBody)), null);
  }