OpenJDK / amber / amber
changeset 52349:d7b19832f535 patterns
Post-merge fixes.
author | jlahoda |
---|---|
date | Thu, 30 Aug 2018 08:19:58 +0200 |
parents | 04adf962576e |
children | bc6e1e4b584d |
files | src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Flow.java src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Lower.java src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TransPatterns.java src/jdk.compiler/share/classes/com/sun/tools/javac/tree/JCTree.java test/langtools/tools/javac/patterns/PatternMatchPosTest.java |
diffstat | 7 files changed, 31 insertions(+), 24 deletions(-) [+] |
line wrap: on
line diff
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java Wed Aug 29 13:34:55 2018 +0200 +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java Thu Aug 30 08:19:58 2018 +0200 @@ -76,7 +76,7 @@ import static com.sun.tools.javac.code.Kinds.Kind.*; import static com.sun.tools.javac.code.TypeTag.*; import static com.sun.tools.javac.code.TypeTag.WILDCARD; -import com.sun.tools.javac.tree.JCTree.JCSwitch.SwitchKind; +import com.sun.tools.javac.tree.JCTree.GenericSwitch.SwitchKind; import com.sun.tools.javac.comp.Analyzer.AnalyzerMode; import static com.sun.tools.javac.tree.JCTree.Tag.*; import com.sun.tools.javac.util.JCDiagnostic.DiagnosticFlag; @@ -1443,7 +1443,7 @@ ListBuffer<DiagnosticPosition> caseTypePositions = new ListBuffer<>(); ListBuffer<Type> caseTypes = new ListBuffer<>(); - handleSwitch(tree, tree.selector, tree.cases, (t, k) -> {/*XXX: ignored for now*/}, (c, caseEnv) -> { + handleSwitch(tree, tree.selector, tree.cases, (t, k) -> ((JCSwitchExpression) t).kind = k, (c, caseEnv) -> { caseEnv.info.breakResult = condInfo; attribStats(c.stats, caseEnv); new TreeScanner() { @@ -1532,7 +1532,7 @@ wasError = true; } List<BindingSymbol> matchBindings = prevBindings; - if (c.getExpressions().nonEmpty()) { + if (c.getPatterns().nonEmpty()) { for (JCPattern pat : c.getPatterns()) { if (TreeInfo.isNull(pat)) { log.error(pat.pos(),
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Flow.java Wed Aug 29 13:34:55 2018 +0200 +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Flow.java Thu Aug 30 08:19:58 2018 +0200 @@ -45,7 +45,7 @@ import com.sun.tools.javac.code.Symbol.*; import com.sun.tools.javac.tree.JCTree.*; -import com.sun.tools.javac.tree.JCTree.JCSwitch.SwitchKind; +import com.sun.tools.javac.tree.JCTree.GenericSwitch.SwitchKind; import static com.sun.tools.javac.code.Flags.*; import static com.sun.tools.javac.code.Flags.BLOCK; @@ -630,12 +630,12 @@ boolean hasDefault = false; for (List<JCCase> l = tree.cases; l.nonEmpty(); l = l.tail) { JCCase c = l.head; + alive = true; if (c.pats.nonEmpty()) { for (JCPattern pat : c.pats) { if (patternDominated(tree.cases, pat, tree.selector.type)) { log.error(c, Errors.PatternDominated); } - alive = true; scan(pat); } } else { @@ -665,6 +665,9 @@ } } for (JCPattern pat : c.pats) { + if (pat == givenPattern) { + break OUTTER; + } switch (pat.getTag()) { case BINDINGPATTERN: { JCBindingPattern vpatt = (JCBindingPattern)pat;
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java Wed Aug 29 13:34:55 2018 +0200 +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java Thu Aug 30 08:19:58 2018 +0200 @@ -67,7 +67,7 @@ import static com.sun.tools.javac.code.Kinds.Kind.*; import static com.sun.tools.javac.code.TypeTag.*; import static com.sun.tools.javac.tree.JCTree.Tag.*; -import com.sun.tools.javac.tree.JCTree.JCSwitch.SwitchKind; +import com.sun.tools.javac.tree.JCTree.GenericSwitch.SwitchKind; import static com.sun.tools.javac.jvm.Pool.DynamicMethod; import javax.lang.model.element.ElementKind;
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Lower.java Wed Aug 29 13:34:55 2018 +0200 +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Lower.java Thu Aug 30 08:19:58 2018 +0200 @@ -62,7 +62,7 @@ import com.sun.tools.javac.tree.JCTree.JCExpression; import com.sun.tools.javac.tree.JCTree.JCExpressionStatement; import static com.sun.tools.javac.tree.JCTree.JCOperatorExpression.OperandPos.LEFT; -import com.sun.tools.javac.tree.JCTree.JCSwitch.SwitchKind; +import com.sun.tools.javac.tree.JCTree.GenericSwitch.SwitchKind; import static com.sun.tools.javac.tree.JCTree.Tag.*; @@ -3651,6 +3651,7 @@ stmtList.append(make.at(tree.pos()).VarDef(dollar_switchexpr, null).setType(dollar_switchexpr.type)); JCSwitch switchStatement = make.Switch(tree.selector, null); + switchStatement.kind = tree.kind; switchStatement.cases = tree.cases.stream() .map(c -> convertCase(dollar_switchexpr, switchStatement, tree, c))
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TransPatterns.java Wed Aug 29 13:34:55 2018 +0200 +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TransPatterns.java Thu Aug 30 08:19:58 2018 +0200 @@ -32,6 +32,7 @@ import com.sun.tools.javac.code.Types; import com.sun.tools.javac.comp.MatchBindingsComputer.BindingSymbol; import com.sun.tools.javac.tree.JCTree; +import com.sun.tools.javac.tree.JCTree.GenericSwitch.SwitchKind; import com.sun.tools.javac.tree.JCTree.JCAssign; import com.sun.tools.javac.tree.JCTree.JCBinary; import com.sun.tools.javac.tree.JCTree.JCBlock; @@ -50,7 +51,6 @@ import com.sun.tools.javac.tree.JCTree.JCMethodDecl; import com.sun.tools.javac.tree.JCTree.JCStatement; import com.sun.tools.javac.tree.JCTree.JCSwitch; -import com.sun.tools.javac.tree.JCTree.JCSwitch.SwitchKind; import com.sun.tools.javac.tree.JCTree.JCVariableDecl; import com.sun.tools.javac.tree.JCTree.JCBindingPattern; import com.sun.tools.javac.tree.JCTree.JCWhileLoop;
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/JCTree.java Wed Aug 29 13:34:55 2018 +0200 +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/JCTree.java Thu Aug 30 08:19:58 2018 +0200 @@ -28,6 +28,7 @@ import java.io.IOException; import java.io.StringWriter; import java.util.*; +import java.util.stream.Collectors; import javax.lang.model.element.Modifier; import javax.lang.model.type.TypeKind; @@ -1225,10 +1226,18 @@ } } + public interface GenericSwitch { + public enum SwitchKind { + ORDINARY, + STRING, + ENUM, + MATCHING; + } + } /** * A "switch ( ) { }" construction. */ - public static class JCSwitch extends JCStatement implements SwitchTree { + public static class JCSwitch extends JCStatement implements SwitchTree, GenericSwitch { public JCExpression selector; public List<JCCase> cases; public SwitchKind kind; @@ -1253,12 +1262,6 @@ public Tag getTag() { return SWITCH; } - public enum SwitchKind { - ORDINARY, - STRING, - ENUM, - MATCHING; - } } /** @@ -1295,16 +1298,15 @@ @DefinedBy(Api.COMPILER_TREE) @Deprecated public JCExpression getExpression() { - return constExpressions().stream().findFirst().orElse(null); - } - public List<JCExpression> constExpressions() { - return pats.stream() - .map(pat -> pat.hasTag(LITERALPATTERN) ? ((JCLiteralPattern) pat).value : null) - .collect(List.collector()); + return pats.nonEmpty() ? pats.head.constExpression() : null; } @Override @DefinedBy(Api.COMPILER_TREE) @SuppressWarnings("removal") - public List<JCExpression> getExpressions() { return constExpressions(); } + public java.util.List<JCExpression> getExpressions() { + return pats.stream() + .map(pat -> pat.constExpression()) + .collect(Collectors.toList()); + } public List<JCPattern> getPatterns() { return pats; } @Override @DefinedBy(Api.COMPILER_TREE) @SuppressWarnings("removal") @@ -1335,9 +1337,10 @@ * A "switch ( ) { }" construction. */ @SuppressWarnings("removal") - public static class JCSwitchExpression extends JCPolyExpression implements SwitchExpressionTree { + public static class JCSwitchExpression extends JCPolyExpression implements SwitchExpressionTree, GenericSwitch { public JCExpression selector; public List<JCCase> cases; + public SwitchKind kind; protected JCSwitchExpression(JCExpression selector, List<JCCase> cases) { this.selector = selector; this.cases = cases;
--- a/test/langtools/tools/javac/patterns/PatternMatchPosTest.java Wed Aug 29 13:34:55 2018 +0200 +++ b/test/langtools/tools/javac/patterns/PatternMatchPosTest.java Thu Aug 30 08:19:58 2018 +0200 @@ -83,7 +83,7 @@ boolean prevPrint = print; try { print = true; - scan(node.getPattern(), p); + scan(node.getPatterns(), p); } finally { print = prevPrint; }