mirror of
https://github.com/dart-lang/sdk
synced 2024-10-04 17:04:56 +00:00
Apply resolution to AdjacentStrings.
R=brianwilkerson@google.com, paulberry@google.com Bug: Change-Id: Iae09b39be41f1ddcd05a5a5ded554a1b7f9c09f3 Reviewed-on: https://dart-review.googlesource.com/25800 Reviewed-by: Paul Berry <paulberry@google.com> Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
This commit is contained in:
parent
bc5b3f28e4
commit
1699831282
|
@ -218,7 +218,7 @@ class AstBuilder extends ScopeListener {
|
|||
scriptTag = ast.scriptTag(token);
|
||||
}
|
||||
|
||||
void handleStringJuxtaposition(int literalCount) {
|
||||
void handleStringJuxtaposition(int literalCount, Token endToken) {
|
||||
debugEvent("StringJuxtaposition");
|
||||
|
||||
push(ast.adjacentStrings(popList(literalCount)));
|
||||
|
|
|
@ -49,6 +49,12 @@ class ResolutionApplier extends GeneralizingAstVisitor {
|
|||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void visitAdjacentStrings(AdjacentStrings node) {
|
||||
node.strings.accept(this);
|
||||
node.staticType = _getTypeFor(node.endToken.next);
|
||||
}
|
||||
|
||||
@override
|
||||
void visitAsExpression(AsExpression node) {
|
||||
node.expression.accept(this);
|
||||
|
|
|
@ -68,6 +68,32 @@ Future pumpEventQueue([int times = 5000]) {
|
|||
*/
|
||||
@reflectiveTest
|
||||
class AnalysisDriverResolutionTest extends BaseAnalysisDriverTest {
|
||||
test_adjacentStrings() async {
|
||||
String content = r'''
|
||||
void main() {
|
||||
'aaa' 'bbb' 'ccc';
|
||||
}
|
||||
''';
|
||||
addTestFile(content);
|
||||
AnalysisResult result = await driver.getResult(testFile);
|
||||
var typeProvider = result.unit.element.context.typeProvider;
|
||||
|
||||
List<Statement> statements = _getMainStatements(result);
|
||||
|
||||
ExpressionStatement statement = statements[0];
|
||||
AdjacentStrings expression = statement.expression;
|
||||
expect(expression.strings, hasLength(3));
|
||||
|
||||
StringLiteral literal_1 = expression.strings[0];
|
||||
expect(literal_1.staticType, typeProvider.stringType);
|
||||
|
||||
StringLiteral literal_2 = expression.strings[1];
|
||||
expect(literal_2.staticType, typeProvider.stringType);
|
||||
|
||||
StringLiteral literal_3 = expression.strings[2];
|
||||
expect(literal_3.staticType, typeProvider.stringType);
|
||||
}
|
||||
|
||||
test_apply_instanceCreation_noTypeArguments() async {
|
||||
String content = r'''
|
||||
class C {
|
||||
|
|
|
@ -942,7 +942,7 @@ class ElementListener extends Listener {
|
|||
}
|
||||
|
||||
@override
|
||||
void handleStringJuxtaposition(int stringCount) {
|
||||
void handleStringJuxtaposition(int stringCount, Token endToken) {
|
||||
assert(stringCount != 0);
|
||||
Expression accumulator = popNode();
|
||||
stringCount--;
|
||||
|
|
|
@ -1400,7 +1400,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper {
|
|||
}
|
||||
|
||||
@override
|
||||
void handleStringJuxtaposition(int literalCount) {
|
||||
void handleStringJuxtaposition(int literalCount, Token endToken) {
|
||||
debugEvent("StringJuxtaposition");
|
||||
List<Expression> parts = popListForValue(literalCount);
|
||||
List<Expression> expressions;
|
||||
|
@ -1418,7 +1418,8 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper {
|
|||
}
|
||||
}
|
||||
}
|
||||
push(new ShadowStringConcatenation(expressions ?? parts));
|
||||
push(new ShadowStringConcatenation(expressions ?? parts)
|
||||
..fileOffset = offsetForToken(endToken));
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
|
@ -1216,8 +1216,8 @@ class ForwardingListener implements Listener {
|
|||
}
|
||||
|
||||
@override
|
||||
void handleStringJuxtaposition(int literalCount) {
|
||||
listener?.handleStringJuxtaposition(literalCount);
|
||||
void handleStringJuxtaposition(int literalCount, Token endToken) {
|
||||
listener?.handleStringJuxtaposition(literalCount, endToken);
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
|
@ -605,7 +605,7 @@ class Listener {
|
|||
logEvent("LiteralString");
|
||||
}
|
||||
|
||||
void handleStringJuxtaposition(int literalCount) {
|
||||
void handleStringJuxtaposition(int literalCount, Token endToken) {
|
||||
logEvent("StringJuxtaposition");
|
||||
}
|
||||
|
||||
|
|
|
@ -4917,7 +4917,7 @@ class Parser {
|
|||
count++;
|
||||
}
|
||||
if (count > 1) {
|
||||
listener.handleStringJuxtaposition(count);
|
||||
listener.handleStringJuxtaposition(count, token.next);
|
||||
}
|
||||
mayParseFunctionExpressions = old;
|
||||
return token;
|
||||
|
|
|
@ -324,7 +324,7 @@ class DietListener extends StackListener {
|
|||
}
|
||||
|
||||
@override
|
||||
void handleStringJuxtaposition(int literalCount) {
|
||||
void handleStringJuxtaposition(int literalCount, Token endToken) {
|
||||
debugEvent("StringJuxtaposition");
|
||||
}
|
||||
|
||||
|
|
|
@ -279,7 +279,7 @@ class OutlineBuilder extends UnhandledListener {
|
|||
}
|
||||
|
||||
@override
|
||||
void handleStringJuxtaposition(int literalCount) {
|
||||
void handleStringJuxtaposition(int literalCount, Token endToken) {
|
||||
debugEvent("StringJuxtaposition");
|
||||
List<String> list =
|
||||
new List<String>.filled(literalCount, null, growable: false);
|
||||
|
|
|
@ -299,7 +299,7 @@ abstract class StackListener extends Listener {
|
|||
}
|
||||
|
||||
@override
|
||||
void handleStringJuxtaposition(int literalCount) {
|
||||
void handleStringJuxtaposition(int literalCount, Token endToken) {
|
||||
debugEvent("StringJuxtaposition");
|
||||
push(popList(literalCount).join(""));
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue