Added nestedPatterns
This commit is contained in:
parent
3ed6edc323
commit
1643412f1b
@ -4,9 +4,9 @@ record Point(int x, int y) {}
|
||||
interface Shape {}
|
||||
record ColoredPoint(Point pt, String color) {}
|
||||
record Rectangle(ColoredPoint upperLeft, ColoredPoint lowerRight) implements Shape {}
|
||||
sealed class Color permits Blue, Red {
|
||||
|
||||
}
|
||||
sealed class Color permits Blue, Red {}
|
||||
class Blue extends Color {}
|
||||
class Red extends Color {}
|
||||
|
||||
class PatternMatching {
|
||||
void printColorOfUpperLeftPoint(Shape shape)
|
||||
@ -14,6 +14,6 @@ void printColorOfUpperLeftPoint(Shape shape)
|
||||
switch (shape) {
|
||||
case Rectangle(ColoredPoint(Point pt, String color), ColoredPoint lowerRight) -> System.out.println("x: " + pt.x() + " / color: " + color + " / lowerRight: " + lowerRight);
|
||||
default -> System.out.println("not a rectangle");
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -530,7 +530,6 @@ statement
|
||||
| YIELD expression ';' #yieldstmt // Java17
|
||||
| SEMI #semistmt
|
||||
| statementExpression=expression ';' #stmtexpression
|
||||
| switchExpression ';' #switchexpressionstmt // Java17
|
||||
| identifierLabel=identifier ':' statement #labeledstmt
|
||||
;
|
||||
|
||||
|
@ -81,7 +81,6 @@ import de.dhbwstuttgart.parser.antlr.Java17Parser.SwitchLabelPatternContext;
|
||||
import de.dhbwstuttgart.parser.antlr.Java17Parser.SwitchLabeledRuleContext;
|
||||
import de.dhbwstuttgart.parser.antlr.Java17Parser.SwitchRuleOutcomeContext;
|
||||
import de.dhbwstuttgart.parser.antlr.Java17Parser.SwitchexpressionContext;
|
||||
import de.dhbwstuttgart.parser.antlr.Java17Parser.SwitchexpressionstmtContext;
|
||||
import de.dhbwstuttgart.parser.antlr.Java17Parser.SwitchstmtContext;
|
||||
import de.dhbwstuttgart.parser.antlr.Java17Parser.SynchronizedstmtContext;
|
||||
import de.dhbwstuttgart.parser.antlr.Java17Parser.TPatternContext;
|
||||
@ -193,8 +192,6 @@ public class StatementGenerator {
|
||||
return convert(dowhileloop);
|
||||
case SwitchstmtContext switchstmt:
|
||||
return convert(switchstmt);
|
||||
case SwitchexpressionstmtContext switchexpression:
|
||||
return convert(switchexpression);
|
||||
case ReturnstmtContext returnstmt:
|
||||
return convert(returnstmt);
|
||||
case YieldstmtContext yieldstmt:
|
||||
@ -274,6 +271,10 @@ public class StatementGenerator {
|
||||
ret = convert(prefix);
|
||||
ret.setStatement();
|
||||
return ret;
|
||||
case SwitchexpressionContext switchexpr:
|
||||
ret = convert(switchexpr);
|
||||
ret.setStatement();
|
||||
return ret;
|
||||
default:
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
@ -356,7 +357,8 @@ public class StatementGenerator {
|
||||
return new Switch(switched, switchBlocks, switched.getType(), true, stmt.getStart());
|
||||
}
|
||||
|
||||
private Statement convert(Java17Parser.SwitchexpressionstmtContext switchexpression) {
|
||||
// Um switchExpressions als Statement zu behandeln
|
||||
private Statement convert(Java17Parser.SwitchexpressionContext switchexpression) {
|
||||
Expression switchExpr = convert(switchexpression.switchExpression());
|
||||
if (switchExpr instanceof Switch s) {
|
||||
s.setStatement();
|
||||
|
@ -87,6 +87,25 @@ public class TestNewFeatures {
|
||||
fail("An error occured while generating the AST for applyLambda.jav");
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void patternMatching() {
|
||||
try {
|
||||
/*
|
||||
* FileInputStream fileIn = new FileInputStream(javFiles.get("PatternMatching")[1]); String expectedAST = new String(fileIn.readAllBytes()); fileIn.close(); expectedAST = expectedAST.replaceAll("TPH [A-Z]+", "TPH");
|
||||
*/
|
||||
File srcfile = javFiles.get("PatternMatching")[0];
|
||||
JavaTXCompiler compiler = new JavaTXCompiler(srcfile);
|
||||
String resultingAST = new String(ASTPrinter.print(compiler.sourceFiles.get(srcfile)));
|
||||
resultingAST = resultingAST.replaceAll("TPH [A-Z]+", "TPH");
|
||||
// System.out.println("Expected:\n" + new String(expectedAST));
|
||||
System.out.println("Result:\n" + new String(resultingAST));
|
||||
// assertEquals("Comparing expected and resulting AST for PatternMatching.jav", expectedAST, resultingAST);
|
||||
} catch (Exception exc) {
|
||||
exc.printStackTrace();
|
||||
fail("An error occured while generating the AST for PatternMatching.jav");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class JavFilter implements FileFilter {
|
||||
|
Loading…
Reference in New Issue
Block a user