Index: compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java |
diff --git a/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java b/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java |
index 9debd56d30c003c36c2429b56288415ef81117b2..d1c574178b393744a2e8c87cc17a9ec138fb1434 100644 |
--- a/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java |
+++ b/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java |
@@ -267,7 +267,7 @@ public class TypeAnalyzer implements DartCompilationPhase { |
void setCurrentClass(InterfaceType type) { |
currentClass = type; |
} |
- |
+ |
@VisibleForTesting |
void pushBasicBlockContext() { |
blockOldTypes.addFirst(new BlockTypeContext()); |
@@ -406,7 +406,7 @@ public class TypeAnalyzer implements DartCompilationPhase { |
return dynamicType; |
} |
} |
- |
+ |
private Type analyzeTernaryOperator(DartNode node, Type lhsType, Token operator, |
DartNode diagnosticNode, DartExpression arg1, DartExpression arg2) { |
String methodName = methodNameForBinaryOperator(operator); |
@@ -459,9 +459,7 @@ public class TypeAnalyzer implements DartCompilationPhase { |
return rhs; |
} |
- case ASSIGN_ADD: { |
- checkStringConcatPlus(node, lhs); |
- } |
+ case ASSIGN_ADD: |
case ASSIGN_SUB: |
case ASSIGN_MUL: |
case ASSIGN_DIV: |
@@ -521,9 +519,7 @@ public class TypeAnalyzer implements DartCompilationPhase { |
} |
} |
- case ADD: { |
- checkStringConcatPlus(node, lhs); |
- } |
+ case ADD: |
case SUB: |
case MUL: |
case DIV: |
@@ -596,14 +592,6 @@ public class TypeAnalyzer implements DartCompilationPhase { |
} |
} |
- private void checkStringConcatPlus(DartBinaryExpression binary, Type lhs) { |
- if (Objects.equal(lhs, stringType)) { |
- Token operator = binary.getOperator(); |
- HasSourceInfo errorTarget = getOperatorHasSourceInfo(binary); |
- onError(errorTarget, TypeErrorCode.PLUS_CANNOT_BE_USED_FOR_STRING_CONCAT, operator); |
- } |
- } |
- |
/** |
* @return the best guess for operator token location in the given {@link DartNode}. |
*/ |
@@ -1024,7 +1012,7 @@ public class TypeAnalyzer implements DartCompilationPhase { |
setVariableElementType(variable, mergedType, mergedTypeQuality); |
} |
} |
- |
+ |
private boolean isAssignable(Type t, Type s) { |
t.getClass(); // Null check. |
s.getClass(); // Null check. |
@@ -1073,7 +1061,7 @@ public class TypeAnalyzer implements DartCompilationPhase { |
} |
return functionType; |
} |
- |
+ |
private FunctionType getMethodType0(Type receiver, Member member, String name, |
DartNode diagnosticNode) { |
if (member == null) { |
@@ -1203,7 +1191,7 @@ public class TypeAnalyzer implements DartCompilationPhase { |
argumentIndex++; |
} |
} |
- |
+ |
// Check named parameters. |
{ |
Set<String> usedNamedParametersPositional = Sets.newHashSet(); |
@@ -1413,7 +1401,7 @@ public class TypeAnalyzer implements DartCompilationPhase { |
Type result = analyzeBinaryOperator(node, target, Token.INDEX, node, argKey); |
return Types.makeInferred(result, target.getQuality()); |
} |
- |
+ |
/** |
* Asserts that given {@link DartExpression} is valid for using in "assert" statement. |
*/ |
@@ -1926,7 +1914,7 @@ public class TypeAnalyzer implements DartCompilationPhase { |
case CLASS: |
return element.getType(); |
- |
+ |
case FIELD: |
type = typeAsMemberOf(element, currentClass); |
// try to resolve as getter/setter |
@@ -2453,7 +2441,7 @@ public class TypeAnalyzer implements DartCompilationPhase { |
case FIELD: |
FieldElement fieldElement = (FieldElement) element; |
Modifiers fieldModifiers = fieldElement.getModifiers(); |
- |
+ |
// Prepare getter/setter members. |
Member getterMember; |
Member setterMember; |
@@ -2689,7 +2677,7 @@ public class TypeAnalyzer implements DartCompilationPhase { |
blockOldTypes.addFirst(new BlockTypeContext()); |
return typeAsVoid(node); |
} |
- |
+ |
@Override |
public Type visitAssertStatement(DartAssertStatement node) { |
DartExpression condition = node.getCondition(); |
@@ -3120,7 +3108,7 @@ public class TypeAnalyzer implements DartCompilationPhase { |
public Type visitImportDirective(DartImportDirective node) { |
return voidType; |
} |
- |
+ |
@Override |
public Type visitExportDirective(DartExportDirective node) { |
return voidType; |
@@ -3231,7 +3219,7 @@ public class TypeAnalyzer implements DartCompilationPhase { |
} |
} |
} |
- |
+ |
// visit mixins |
for (InterfaceType mixType : currentClass.getElement().getMixins()) { |
ClassElement mixElement = mixType.getElement(); |
@@ -3239,7 +3227,7 @@ public class TypeAnalyzer implements DartCompilationPhase { |
removeSuperMemberIfNotAbstract(member); |
} |
} |
- |
+ |
// Remove artificial "setter " members. |
for (String name : artificialNames) { |
superMembers.removeAll(name); |
@@ -3257,7 +3245,7 @@ public class TypeAnalyzer implements DartCompilationPhase { |
} |
} |
} |
- |
+ |
// add abstract members of current class |
for (Element member : currentClass.getElement().getMembers()) { |
if (ElementKind.of(member) == ElementKind.FIELD && member.getModifiers().isAbstractField()) { |
@@ -3274,7 +3262,7 @@ public class TypeAnalyzer implements DartCompilationPhase { |
unimplementedElements.add(member); |
} |
} |
- |
+ |
return null; |
} |
@@ -3659,7 +3647,7 @@ public class TypeAnalyzer implements DartCompilationPhase { |
return type != null && TypeKind.of(type) != TypeKind.DYNAMIC |
&& !TypeQuality.isInferred(type); |
} |
- |
+ |
/** |
* @return the {@link TypeQuality} of given {@link DartExpression}. |
*/ |
@@ -3708,7 +3696,7 @@ public class TypeAnalyzer implements DartCompilationPhase { |
Type type = expr.getType(); |
return isCoreType(type, "bool") || isCoreType(type, "int") || isCoreType(type, "double"); |
} |
- |
+ |
private static boolean isCoreType(Type type, String name) { |
return type != null |
&& Elements.isCoreLibrarySource(type.getElement().getSourceInfo().getSource()) |