⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 javacclassgenerator.java

📁 Groovy动态语言 运行在JVM中的动态语言 可以方便的处理业务逻辑变化大的业务
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
//
//    public void visitIfElse(IfStatement ifElse) {
//        onLineNumber(ifElse);
//
//        ifElse.getBooleanExpression().visit(this);
//
//        Label l0 = new Label();
//        cv.visitJumpInsn(IFEQ, l0);
//        ifElse.getIfBlock().visit(this);
//
//        Label l1 = new Label();
//        cv.visitJumpInsn(GOTO, l1);
//        cv.visitLabel(l0);
//
//        ifElse.getElseBlock().visit(this);
//        cv.visitLabel(l1);
//    }
//
//    public void visitTernaryExpression(TernaryExpression expression) {
//        onLineNumber(expression);
//
//        expression.getBooleanExpression().visit(this);
//
//        Label l0 = new Label();
//        cv.visitJumpInsn(IFEQ, l0);
//        expression.getTrueExpression().visit(this);
//
//        Label l1 = new Label();
//        cv.visitJumpInsn(GOTO, l1);
//        cv.visitLabel(l0);
//
//        expression.getFalseExpression().visit(this);
//        cv.visitLabel(l1);
//    }
//
//    public void visitAssertStatement(AssertStatement statement) {
//        onLineNumber(statement);
//
//        //System.out.println("Assert: " + statement.getLineNumber() + " for: "
//        // + statement.getText());
//
//        BooleanExpression booleanExpression = statement.getBooleanExpression();
//        booleanExpression.visit(this);
//
//        Label l0 = new Label();
//        cv.visitJumpInsn(IFEQ, l0);
//
//        // do nothing
//
//        Label l1 = new Label();
//        cv.visitJumpInsn(GOTO, l1);
//        cv.visitLabel(l0);
//
//        // push expression string onto stack
//        String expressionText = booleanExpression.getText();
//        List list = new ArrayList();
//        addVariableNames(booleanExpression, list);
//        if (list.isEmpty()) {
//            cv.visitLdcInsn(expressionText);
//        }
//        else {
//            boolean first = true;
//
//            // lets create a new expression
//            cv.visitTypeInsn(NEW, "java/lang/StringBuffer");
//            cv.visitInsn(DUP);
//            cv.visitLdcInsn(expressionText + ". Values: ");
//
//            cv.visitMethodInsn(INVOKESPECIAL, "java/lang/StringBuffer", "<init>", "(Ljava/lang/String;)V");
//
//            int tempIndex = defineVariable(createVariableName("assert"), "java.lang.Object", false).getIndex();
//
//            cv.visitVarInsn(ASTORE, tempIndex);
//
//            for (Iterator iter = list.iterator(); iter.hasNext();) {
//                String name = (String) iter.next();
//                String text = name + " = ";
//                if (first) {
//                    first = false;
//                }
//                else {
//                    text = ", " + text;
//                }
//
//                cv.visitVarInsn(ALOAD, tempIndex);
//                cv.visitLdcInsn(text);
//                cv.visitMethodInsn(
//                    INVOKEVIRTUAL,
//                    "java/lang/StringBuffer",
//                    "append",
//                    "(Ljava/lang/String;)Ljava/lang/StringBuffer;");
//                cv.visitInsn(POP);
//
//                cv.visitVarInsn(ALOAD, tempIndex);
//                new VariableExpression(name).visit(this);
//                cv.visitMethodInsn(
//                    INVOKEVIRTUAL,
//                    "java/lang/StringBuffer",
//                    "append",
//                    "(Ljava/lang/Object;)Ljava/lang/StringBuffer;");
//                cv.visitInsn(POP);
//
//            }
//            cv.visitVarInsn(ALOAD, tempIndex);
//        }
//
//        // now the optional exception expression
//        statement.getMessageExpression().visit(this);
//
//        assertFailedMethod.call(cv);
//        cv.visitLabel(l1);
//    }
//
//    public void visitTryCatchFinally(TryCatchStatement statement) {
//        onLineNumber(statement);
//
//        CatchStatement catchStatement = statement.getCatchStatement(0);
//
//        Statement tryStatement = statement.getTryStatement();
//
//        if (tryStatement.isEmpty() || catchStatement == null) {
//            final Label l0 = new Label();
//            cv.visitLabel(l0);
//
//            tryStatement.visit(this);
//
//            int index1 = defineVariable(this.createVariableName("exception"), "java.lang.Object").getIndex();
//            int index2 = defineVariable(this.createVariableName("exception"), "java.lang.Object").getIndex();
//
//            final Label l1 = new Label();
//            cv.visitJumpInsn(JSR, l1);
//            final Label l2 = new Label();
//            cv.visitLabel(l2);
//            final Label l3 = new Label();
//            cv.visitJumpInsn(GOTO, l3);
//            final Label l4 = new Label();
//            cv.visitLabel(l4);
//            cv.visitVarInsn(ASTORE, index1);
//            cv.visitJumpInsn(JSR, l1);
//            final Label l5 = new Label();
//            cv.visitLabel(l5);
//            cv.visitVarInsn(ALOAD, index1);
//            cv.visitInsn(ATHROW);
//            cv.visitLabel(l1);
//            cv.visitVarInsn(ASTORE, index2);
//
//            statement.getFinallyStatement().visit(this);
//
//            cv.visitVarInsn(RET, index2);
//            cv.visitLabel(l3);
//
//            exceptionBlocks.add(new Runnable() {
//                public void run() {
//                    cv.visitTryCatchBlock(l0, l2, l4, null);
//                    cv.visitTryCatchBlock(l4, l5, l4, null);
//                }
//            });
//
//        }
//        else {
//            String exceptionVar = catchStatement.getVariable();
//            String exceptionType =
//                checkValidType(catchStatement.getExceptionType(), catchStatement, "in catch statement");
//
//            int exceptionIndex = defineVariable(exceptionVar, exceptionType, false).getIndex();
//            int index2 = defineVariable(this.createVariableName("exception"), "java.lang.Object").getIndex();
//            int index3 = defineVariable(this.createVariableName("exception"), "java.lang.Object").getIndex();
//
//            final Label l0 = new Label();
//            cv.visitLabel(l0);
//
//            tryStatement.visit(this);
//
//            final Label l1 = new Label();
//            cv.visitLabel(l1);
//            Label l2 = new Label();
//            cv.visitJumpInsn(JSR, l2);
//            final Label l3 = new Label();
//            cv.visitLabel(l3);
//            Label l4 = new Label();
//            cv.visitJumpInsn(GOTO, l4);
//            final Label l5 = new Label();
//            cv.visitLabel(l5);
//
//            cv.visitVarInsn(ASTORE, exceptionIndex);
//
//            if (catchStatement != null) {
//                catchStatement.visit(this);
//            }
//
//            cv.visitJumpInsn(JSR, l2);
//            final Label l6 = new Label();
//            cv.visitLabel(l6);
//            cv.visitJumpInsn(GOTO, l4);
//
//            final Label l7 = new Label();
//            cv.visitLabel(l7);
//            cv.visitVarInsn(ASTORE, index2);
//            cv.visitJumpInsn(JSR, l2);
//
//            final Label l8 = new Label();
//            cv.visitLabel(l8);
//            cv.visitVarInsn(ALOAD, index2);
//            cv.visitInsn(ATHROW);
//            cv.visitLabel(l2);
//            cv.visitVarInsn(ASTORE, index3);
//
//            statement.getFinallyStatement().visit(this);
//
//            cv.visitVarInsn(RET, index3);
//            cv.visitLabel(l4);
//
//            // rest of code goes here...
//
//            //final String exceptionTypeInternalName = (catchStatement !=
//            // null) ?
//            // getTypeDescription(exceptionType) : null;
//            final String exceptionTypeInternalName =
//                (catchStatement != null) ? BytecodeHelper.getClassInternalName(exceptionType) : null;
//
//            exceptionBlocks.add(new Runnable() {
//                public void run() {
//                    cv.visitTryCatchBlock(l0, l1, l5, exceptionTypeInternalName);
//                    cv.visitTryCatchBlock(l0, l3, l7, null);
//                    cv.visitTryCatchBlock(l5, l6, l7, null);
//                    cv.visitTryCatchBlock(l7, l8, l7, null);
//                }
//            });
//        }
//    }
//
//    public void visitSwitch(SwitchStatement statement) {
//        onLineNumber(statement);
//
//        statement.getExpression().visit(this);
//
//        pushBlockScope();
//
//        int switchVariableIndex = defineVariable(createVariableName("switch"), "java.lang.Object").getIndex();
//        cv.visitVarInsn(ASTORE, switchVariableIndex);
//
//        List caseStatements = statement.getCaseStatements();
//        int caseCount = caseStatements.size();
//        Label[] labels = new Label[caseCount + 1];
//        for (int i = 0; i < caseCount; i++) {
//            labels[i] = new Label();
//        }
//
//        int i = 0;
//        for (Iterator iter = caseStatements.iterator(); iter.hasNext(); i++) {
//            CaseStatement caseStatement = (CaseStatement) iter.next();
//            visitCaseStatement(caseStatement, switchVariableIndex, labels[i], labels[i + 1]);
//        }
//
//        statement.getDefaultStatement().visit(this);
//
//        cv.visitLabel(scope.getBreakLabel());
//
//        popScope();
//    }
//
//    public void visitCaseStatement(CaseStatement statement) {
//    }
//
//    public void visitCaseStatement(
//        CaseStatement statement,
//        int switchVariableIndex,
//        Label thisLabel,
//        Label nextLabel) {
//
//        onLineNumber(statement);
//
//        cv.visitVarInsn(ALOAD, switchVariableIndex);
//        statement.getExpression().visit(this);
//
//        isCaseMethod.call(cv);
//
//        Label l0 = new Label();
//        cv.visitJumpInsn(IFEQ, l0);
//
//        cv.visitLabel(thisLabel);
//
//        statement.getCode().visit(this);
//
//        // now if we don't finish with a break we need to jump past
//        // the next comparison
//        if (nextLabel != null) {
//            cv.visitJumpInsn(GOTO, nextLabel);
//        }
//
//        cv.visitLabel(l0);
//    }
//
//    public void visitBreakStatement(BreakStatement statement) {
//        onLineNumber(statement);
//
//        cv.visitJumpInsn(GOTO, scope.getBreakLabel());
//    }
//
//    public void visitContinueStatement(ContinueStatement statement) {
//        onLineNumber(statement);
//
//        cv.visitJumpInsn(GOTO, scope.getContinueLabel());
//    }
//
//    public void visitSynchronizedStatement(SynchronizedStatement statement) {
//        onLineNumber(statement);
//
//        statement.getExpression().visit(this);
//
//        int index = defineVariable(createVariableName("synchronized"), "java.lang.Integer").getIndex();
//
//        cv.visitVarInsn(ASTORE, index);
//        cv.visitInsn(MONITORENTER);
//        final Label l0 = new Label();
//        cv.visitLabel(l0);
//
//        statement.getCode().visit(this);
//
//        cv.visitVarInsn(ALOAD, index);
//        cv.visitInsn(MONITOREXIT);
//        final Label l1 = new Label();
//        cv.visitJumpInsn(GOTO, l1);
//        final Label l2 = new Label();
//        cv.visitLabel(l2);
//        cv.visitVarInsn(ALOAD, index);
//        cv.visitInsn(MONITOREXIT);
//        cv.visitInsn(ATHROW);
//        cv.visitLabel(l1);
//
//        exceptionBlocks.add(new Runnable() {
//            public void run() {
//                cv.visitTryCatchBlock(l0, l2, l2, null);
//            }
//        });
//    }
//
//    public void visitThrowStatement(ThrowStatement statement) {
//        statement.getExpression().visit(this);
//
//        // we should infer the type of the exception from the expression
//        cv.visitTypeInsn(CHECKCAST, "java/lang/Throwable");
//
//        cv.visitInsn(ATHROW);
//    }
//
//    public void visitReturnStatement(ReturnStatement statement) {
//        onLineNumber(statement);
//
//        Expression expression = statement.getExpression();
//        evaluateExpression(expression);
//
//        //return is based on class type
//        //TODO: make work with arrays
//        // we may need to cast
//        String returnType = methodNode.getReturnType();
//        helper.unbox(returnType);
//        if (returnType.equals("double")) {
//            cv.visitInsn(DRETURN);
//        }
//        else if (returnType.equals("float")) {
//            cv.visitInsn(FRETURN);
//        }
//        else if (returnType.equals("long")) {
//            cv.visitInsn(LRETURN);
//        }
//        else if (returnType.equals("boolean")) {
//            cv.visitInsn(IRETURN);
//        }
//        else if (
//            returnType.equals("char")
//                || returnType.equals("byte")
//                || returnType.equals("int")
//                || returnType.equals("short")) { //byte,short,boolean,int are
//            // all IRETURN
//            cv.visitInsn(IRETURN);
//        }
//        else {
//            doConvertAndCast(returnType, expression);
//            cv.visitInsn(ARETURN);
//
//            /*
//            if (c == Boolean.class) {
//                Label l0 = new Label();
//                cv.visitJumpInsn(IFEQ, l0);
//                cv.visitFieldInsn(GETSTATIC, "java/lang/Boolean", "TRUE", "Ljava/lang/Boolean;");
//                cv.visitInsn(ARETURN);
//                cv.visitLabel(l0);
//                cv.visitFieldInsn(GETSTATIC, "java/lang/Boolean", "FALSE", "Ljava/lang/Boolean;");
//                cv.visitInsn(ARETURN);
//            }
//            else {
//                if (isValidTypeForCast(returnType) && !returnType.equals(c.getName())) {
//                    doConvertAndCast(returnType, expression);
//                }
//                cv.visitInsn(ARETURN);
//            }
//            */
//        }
//
//        outputReturn = true;
//    }


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -