Search in sources :

Example 1 with CtContinue

use of spoon.reflect.code.CtContinue in project spoon by INRIA.

the class DefaultCoreFactory method createContinue.

public CtContinue createContinue() {
    CtContinue e = new CtContinueImpl();
    e.setFactory(getMainFactory());
    return e;
}
Also used : CtContinueImpl(spoon.support.reflect.code.CtContinueImpl) CtContinue(spoon.reflect.code.CtContinue)

Example 2 with CtContinue

use of spoon.reflect.code.CtContinue in project spoon by INRIA.

the class JDTTreeBuilder method visit.

@Override
public boolean visit(ContinueStatement continueStatement, BlockScope scope) {
    CtContinue c = factory.Core().createContinue();
    context.enter(c, continueStatement);
    if (continueStatement.label != null) {
        c.setTargetLabel(new String(continueStatement.label));
    }
    return true;
}
Also used : CtContinue(spoon.reflect.code.CtContinue)

Example 3 with CtContinue

use of spoon.reflect.code.CtContinue in project spoon by INRIA.

the class EqualsChecker method visitCtContinue.

@Override
public void visitCtContinue(CtContinue e) {
    final CtContinue peek = (CtContinue) this.other;
    if (e.getTargetLabel() == null) {
        if (peek.getTargetLabel() != null) {
            isNotEqual = true;
            return;
        }
    } else if (peek.getTargetLabel() == null) {
        isNotEqual = true;
        return;
    } else if (!e.getTargetLabel().equals(peek.getTargetLabel())) {
        isNotEqual = true;
        return;
    }
    super.visitCtContinue(e);
}
Also used : CtContinue(spoon.reflect.code.CtContinue)

Example 4 with CtContinue

use of spoon.reflect.code.CtContinue in project spoon by INRIA.

the class TestLabels method testLabelsAreDetected.

@Test
public void testLabelsAreDetected() {
    Launcher launcher = new Launcher();
    launcher.addInputResource("./src/test/java/spoon/test/labels/testclasses/ManyLabels.java");
    launcher.buildModel();
    CtMethod mainMethod = launcher.getFactory().getModel().getElements(new NamedElementFilter<>(CtMethod.class, "main")).get(0);
    CtBlock body = mainMethod.getBody();
    assertEquals(2, body.getStatements().size());
    CtBlock block = (CtBlock) body.getStatement(0);
    CtSwitch ctSwitch = (CtSwitch) body.getStatement(1);
    assertEquals("labelBlock", block.getLabel());
    assertEquals("sw", ctSwitch.getLabel());
    assertTrue(block.getStatement(1) instanceof CtIf);
    CtIf firstIf = (CtIf) block.getStatement(1);
    CtBlock then = firstIf.getThenStatement();
    CtBreak firstBreak = (CtBreak) then.getStatement(1);
    assertEquals("labelBlock", firstBreak.getTargetLabel());
    assertSame(block, firstBreak.getLabelledStatement());
    CtIf secondIf = (CtIf) block.getStatement(2);
    assertEquals("labelIf", secondIf.getLabel());
    CtBlock thenBlock = secondIf.getThenStatement();
    CtIf innerIf = (CtIf) thenBlock.getStatement(0);
    CtBlock innerThenBlock = innerIf.getThenStatement();
    CtBreak breakInnerIf = (CtBreak) innerThenBlock.getStatement(0);
    assertSame(secondIf, breakInnerIf.getLabelledStatement());
    CtCase firstCase = (CtCase) ctSwitch.getCases().get(0);
    List<CtStatement> statementList = firstCase.getStatements();
    assertEquals(2, statementList.size());
    CtDo ctDo = (CtDo) statementList.get(0);
    assertEquals("label", ctDo.getLabel());
    CtBreak finalBreak = (CtBreak) statementList.get(1);
    assertNull(finalBreak.getTargetLabel());
    assertNull(finalBreak.getLabelledStatement());
    CtBlock doBlock = (CtBlock) ctDo.getBody();
    CtWhile ctWhile = (CtWhile) doBlock.getStatement(1);
    assertEquals("lWhile", ctWhile.getLabel());
    CtBlock whileBlock = (CtBlock) ctWhile.getBody();
    CtFor forLoop = (CtFor) whileBlock.getStatement(0);
    CtBreak breakSwitch = (CtBreak) whileBlock.getStatement(1);
    assertEquals("sw", breakSwitch.getTargetLabel());
    assertSame(ctSwitch, breakSwitch.getLabelledStatement());
    assertEquals("forloop", forLoop.getLabel());
    CtBlock forBlock = (CtBlock) forLoop.getBody();
    assertEquals(7, forBlock.getStatements().size());
    CtIf firstForIf = (CtIf) forBlock.getStatement(1);
    CtIf secondForIf = (CtIf) forBlock.getStatement(2);
    CtIf thirdForIf = (CtIf) forBlock.getStatement(3);
    CtIf fourthForIf = (CtIf) forBlock.getStatement(4);
    CtBreak breakItself = (CtBreak) forBlock.getStatement(6);
    CtContinue continueFor = (CtContinue) ((CtBlock) firstForIf.getThenStatement()).getStatement(0);
    assertSame(forLoop, continueFor.getLabelledStatement());
    CtContinue continueWhile = (CtContinue) ((CtBlock) secondForIf.getThenStatement()).getStatement(0);
    assertSame(ctWhile, continueWhile.getLabelledStatement());
    CtContinue continueDo = (CtContinue) ((CtBlock) thirdForIf.getThenStatement()).getStatement(0);
    assertSame(ctDo, continueDo.getLabelledStatement());
    CtBreak breakDo = (CtBreak) ((CtBlock) fourthForIf.getThenStatement()).getStatement(0);
    assertSame(ctDo, breakDo.getLabelledStatement());
    assertEquals("labelbreak", breakItself.getLabel());
    assertEquals("labelbreak", breakItself.getTargetLabel());
    assertSame(breakItself, breakItself.getLabelledStatement());
}
Also used : CtBreak(spoon.reflect.code.CtBreak) CtSwitch(spoon.reflect.code.CtSwitch) CtIf(spoon.reflect.code.CtIf) CtWhile(spoon.reflect.code.CtWhile) CtBlock(spoon.reflect.code.CtBlock) CtStatement(spoon.reflect.code.CtStatement) CtCase(spoon.reflect.code.CtCase) NamedElementFilter(spoon.reflect.visitor.filter.NamedElementFilter) Launcher(spoon.Launcher) CtDo(spoon.reflect.code.CtDo) CtFor(spoon.reflect.code.CtFor) CtMethod(spoon.reflect.declaration.CtMethod) CtContinue(spoon.reflect.code.CtContinue) Test(org.junit.Test)

Aggregations

CtContinue (spoon.reflect.code.CtContinue)4 Test (org.junit.Test)1 Launcher (spoon.Launcher)1 CtBlock (spoon.reflect.code.CtBlock)1 CtBreak (spoon.reflect.code.CtBreak)1 CtCase (spoon.reflect.code.CtCase)1 CtDo (spoon.reflect.code.CtDo)1 CtFor (spoon.reflect.code.CtFor)1 CtIf (spoon.reflect.code.CtIf)1 CtStatement (spoon.reflect.code.CtStatement)1 CtSwitch (spoon.reflect.code.CtSwitch)1 CtWhile (spoon.reflect.code.CtWhile)1 CtMethod (spoon.reflect.declaration.CtMethod)1 NamedElementFilter (spoon.reflect.visitor.filter.NamedElementFilter)1 CtContinueImpl (spoon.support.reflect.code.CtContinueImpl)1