/*
* Copyright (c) 2013, the Dart project authors.
*
* Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.eclipse.org/legal/epl-v10.html
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.dart.engine.parser;
import com.google.dart.engine.EngineTestCase;
import com.google.dart.engine.ast.Annotation;
import com.google.dart.engine.ast.AsExpression;
import com.google.dart.engine.ast.AssignmentExpression;
import com.google.dart.engine.ast.BinaryExpression;
import com.google.dart.engine.ast.BooleanLiteral;
import com.google.dart.engine.ast.CascadeExpression;
import com.google.dart.engine.ast.CompilationUnit;
import com.google.dart.engine.ast.ConditionalExpression;
import com.google.dart.engine.ast.ConstructorDeclaration;
import com.google.dart.engine.ast.ConstructorName;
import com.google.dart.engine.ast.DoubleLiteral;
import com.google.dart.engine.ast.ExportDirective;
import com.google.dart.engine.ast.FunctionExpression;
import com.google.dart.engine.ast.FunctionExpressionInvocation;
import com.google.dart.engine.ast.ImportDirective;
import com.google.dart.engine.ast.IndexExpression;
import com.google.dart.engine.ast.InstanceCreationExpression;
import com.google.dart.engine.ast.IntegerLiteral;
import com.google.dart.engine.ast.IsExpression;
import com.google.dart.engine.ast.LibraryIdentifier;
import com.google.dart.engine.ast.ListLiteral;
import com.google.dart.engine.ast.MapLiteral;
import com.google.dart.engine.ast.MethodInvocation;
import com.google.dart.engine.ast.NamedExpression;
import com.google.dart.engine.ast.NullLiteral;
import com.google.dart.engine.ast.ParenthesizedExpression;
import com.google.dart.engine.ast.PartDirective;
import com.google.dart.engine.ast.PartOfDirective;
import com.google.dart.engine.ast.PostfixExpression;
import com.google.dart.engine.ast.PrefixExpression;
import com.google.dart.engine.ast.PrefixedIdentifier;
import com.google.dart.engine.ast.PropertyAccess;
import com.google.dart.engine.ast.RedirectingConstructorInvocation;
import com.google.dart.engine.ast.RethrowExpression;
import com.google.dart.engine.ast.SimpleIdentifier;
import com.google.dart.engine.ast.SimpleStringLiteral;
import com.google.dart.engine.ast.StringInterpolation;
import com.google.dart.engine.ast.SuperConstructorInvocation;
import com.google.dart.engine.ast.SuperExpression;
import com.google.dart.engine.ast.SymbolLiteral;
import com.google.dart.engine.ast.ThisExpression;
import com.google.dart.engine.ast.ThrowExpression;
import com.google.dart.engine.ast.TypeName;
import com.google.dart.engine.element.CompilationUnitElement;
import com.google.dart.engine.element.ConstructorElement;
import com.google.dart.engine.element.Element;
import com.google.dart.engine.element.ExportElement;
import com.google.dart.engine.element.ImportElement;
import com.google.dart.engine.element.LibraryElement;
import com.google.dart.engine.element.MethodElement;
import com.google.dart.engine.internal.element.AuxiliaryElements;
import com.google.dart.engine.internal.element.CompilationUnitElementImpl;
import com.google.dart.engine.internal.element.ExportElementImpl;
import com.google.dart.engine.internal.element.ImportElementImpl;
import com.google.dart.engine.internal.element.LibraryElementImpl;
import com.google.dart.engine.scanner.Keyword;
import com.google.dart.engine.scanner.TokenType;
import com.google.dart.engine.type.Type;
import static com.google.dart.engine.ast.AstFactory.annotation;
import static com.google.dart.engine.ast.AstFactory.asExpression;
import static com.google.dart.engine.ast.AstFactory.assignmentExpression;
import static com.google.dart.engine.ast.AstFactory.binaryExpression;
import static com.google.dart.engine.ast.AstFactory.booleanLiteral;
import static com.google.dart.engine.ast.AstFactory.cascadeExpression;
import static com.google.dart.engine.ast.AstFactory.compilationUnit;
import static com.google.dart.engine.ast.AstFactory.conditionalExpression;
import static com.google.dart.engine.ast.AstFactory.constructorDeclaration;
import static com.google.dart.engine.ast.AstFactory.constructorName;
import static com.google.dart.engine.ast.AstFactory.doubleLiteral;
import static com.google.dart.engine.ast.AstFactory.emptyFunctionBody;
import static com.google.dart.engine.ast.AstFactory.exportDirective;
import static com.google.dart.engine.ast.AstFactory.formalParameterList;
import static com.google.dart.engine.ast.AstFactory.functionExpression;
import static com.google.dart.engine.ast.AstFactory.functionExpressionInvocation;
import static com.google.dart.engine.ast.AstFactory.identifier;
import static com.google.dart.engine.ast.AstFactory.importDirective;
import static com.google.dart.engine.ast.AstFactory.indexExpression;
import static com.google.dart.engine.ast.AstFactory.instanceCreationExpression;
import static com.google.dart.engine.ast.AstFactory.integer;
import static com.google.dart.engine.ast.AstFactory.interpolationString;
import static com.google.dart.engine.ast.AstFactory.isExpression;
import static com.google.dart.engine.ast.AstFactory.libraryIdentifier;
import static com.google.dart.engine.ast.AstFactory.listLiteral;
import static com.google.dart.engine.ast.AstFactory.mapLiteral;
import static com.google.dart.engine.ast.AstFactory.methodInvocation;
import static com.google.dart.engine.ast.AstFactory.namedExpression;
import static com.google.dart.engine.ast.AstFactory.nullLiteral;
import static com.google.dart.engine.ast.AstFactory.parenthesizedExpression;
import static com.google.dart.engine.ast.AstFactory.partDirective;
import static com.google.dart.engine.ast.AstFactory.partOfDirective;
import static com.google.dart.engine.ast.AstFactory.postfixExpression;
import static com.google.dart.engine.ast.AstFactory.prefixExpression;
import static com.google.dart.engine.ast.AstFactory.propertyAccess;
import static com.google.dart.engine.ast.AstFactory.redirectingConstructorInvocation;
import static com.google.dart.engine.ast.AstFactory.rethrowExpression;
import static com.google.dart.engine.ast.AstFactory.string;
import static com.google.dart.engine.ast.AstFactory.superConstructorInvocation;
import static com.google.dart.engine.ast.AstFactory.superExpression;
import static com.google.dart.engine.ast.AstFactory.symbolLiteral;
import static com.google.dart.engine.ast.AstFactory.thisExpression;
import static com.google.dart.engine.ast.AstFactory.throwExpression;
import static com.google.dart.engine.ast.AstFactory.typeName;
import static com.google.dart.engine.element.ElementFactory.classElement;
import static com.google.dart.engine.element.ElementFactory.constructorElement;
import static com.google.dart.engine.element.ElementFactory.methodElement;
import static com.google.dart.engine.element.ElementFactory.topLevelVariableElement;
public class ResolutionCopierTest extends EngineTestCase {
public void test_visitAnnotation() {
String annotationName = "proxy";
Annotation fromNode = annotation(identifier(annotationName));
Element element = topLevelVariableElement(annotationName);
fromNode.setElement(element);
Annotation toNode = annotation(identifier(annotationName));
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(element, toNode.getElement());
}
public void test_visitAsExpression() {
AsExpression fromNode = asExpression(identifier("x"), typeName("A"));
Type propagatedType = classElement("A").getType();
fromNode.setPropagatedType(propagatedType);
Type staticType = classElement("B").getType();
fromNode.setStaticType(staticType);
AsExpression toNode = asExpression(identifier("x"), typeName("A"));
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(propagatedType, toNode.getPropagatedType());
assertSame(staticType, toNode.getStaticType());
}
public void test_visitAssignmentExpression() {
AssignmentExpression fromNode = assignmentExpression(
identifier("a"),
TokenType.PLUS_EQ,
identifier("b"));
Type propagatedType = classElement("C").getType();
MethodElement propagatedElement = methodElement("+", propagatedType);
fromNode.setPropagatedElement(propagatedElement);
fromNode.setPropagatedType(propagatedType);
Type staticType = classElement("C").getType();
MethodElement staticElement = methodElement("+", staticType);
fromNode.setStaticElement(staticElement);
fromNode.setStaticType(staticType);
AssignmentExpression toNode = assignmentExpression(
identifier("a"),
TokenType.PLUS_EQ,
identifier("b"));
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(propagatedElement, toNode.getPropagatedElement());
assertSame(propagatedType, toNode.getPropagatedType());
assertSame(staticElement, toNode.getStaticElement());
assertSame(staticType, toNode.getStaticType());
}
public void test_visitBinaryExpression() {
BinaryExpression fromNode = binaryExpression(identifier("a"), TokenType.PLUS, identifier("b"));
Type propagatedType = classElement("C").getType();
MethodElement propagatedElement = methodElement("+", propagatedType);
fromNode.setPropagatedElement(propagatedElement);
fromNode.setPropagatedType(propagatedType);
Type staticType = classElement("C").getType();
MethodElement staticElement = methodElement("+", staticType);
fromNode.setStaticElement(staticElement);
fromNode.setStaticType(staticType);
BinaryExpression toNode = binaryExpression(identifier("a"), TokenType.PLUS, identifier("b"));
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(propagatedElement, toNode.getPropagatedElement());
assertSame(propagatedType, toNode.getPropagatedType());
assertSame(staticElement, toNode.getStaticElement());
assertSame(staticType, toNode.getStaticType());
}
public void test_visitBooleanLiteral() {
BooleanLiteral fromNode = booleanLiteral(true);
Type propagatedType = classElement("C").getType();
fromNode.setPropagatedType(propagatedType);
Type staticType = classElement("C").getType();
fromNode.setStaticType(staticType);
BooleanLiteral toNode = booleanLiteral(true);
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(propagatedType, toNode.getPropagatedType());
assertSame(staticType, toNode.getStaticType());
}
public void test_visitCascadeExpression() {
CascadeExpression fromNode = cascadeExpression(identifier("a"), identifier("b"));
Type propagatedType = classElement("C").getType();
fromNode.setPropagatedType(propagatedType);
Type staticType = classElement("C").getType();
fromNode.setStaticType(staticType);
CascadeExpression toNode = cascadeExpression(identifier("a"), identifier("b"));
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(propagatedType, toNode.getPropagatedType());
assertSame(staticType, toNode.getStaticType());
}
public void test_visitCompilationUnit() {
CompilationUnit fromNode = compilationUnit();
CompilationUnitElement element = new CompilationUnitElementImpl("test.dart");
fromNode.setElement(element);
CompilationUnit toNode = compilationUnit();
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(element, toNode.getElement());
}
public void test_visitConditionalExpression() {
ConditionalExpression fromNode = conditionalExpression(
identifier("c"),
identifier("a"),
identifier("b"));
Type propagatedType = classElement("C").getType();
fromNode.setPropagatedType(propagatedType);
Type staticType = classElement("C").getType();
fromNode.setStaticType(staticType);
ConditionalExpression toNode = conditionalExpression(
identifier("c"),
identifier("a"),
identifier("b"));
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(propagatedType, toNode.getPropagatedType());
assertSame(staticType, toNode.getStaticType());
}
public void test_visitConstructorDeclaration() {
String className = "A";
String constructorName = "c";
ConstructorDeclaration fromNode = constructorDeclaration(
identifier(className),
constructorName,
formalParameterList(),
null);
ConstructorElement element = constructorElement(classElement(className), constructorName);
fromNode.setElement(element);
ConstructorDeclaration toNode = constructorDeclaration(
identifier(className),
constructorName,
formalParameterList(),
null);
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(element, toNode.getElement());
}
public void test_visitConstructorName() {
ConstructorName fromNode = constructorName(typeName("A"), "c");
ConstructorElement staticElement = constructorElement(classElement("A"), "c");
fromNode.setStaticElement(staticElement);
ConstructorName toNode = constructorName(typeName("A"), "c");
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(staticElement, toNode.getStaticElement());
}
public void test_visitDoubleLiteral() {
DoubleLiteral fromNode = doubleLiteral(1.0);
Type propagatedType = classElement("C").getType();
fromNode.setPropagatedType(propagatedType);
Type staticType = classElement("C").getType();
fromNode.setStaticType(staticType);
DoubleLiteral toNode = doubleLiteral(1.0);
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(propagatedType, toNode.getPropagatedType());
assertSame(staticType, toNode.getStaticType());
}
public void test_visitExportDirective() {
ExportDirective fromNode = exportDirective("dart:uri");
ExportElement element = new ExportElementImpl();
fromNode.setElement(element);
ExportDirective toNode = exportDirective("dart:uri");
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(element, toNode.getElement());
}
public void test_visitFunctionExpression() {
FunctionExpression fromNode = functionExpression(formalParameterList(), emptyFunctionBody());
MethodElement element = methodElement("m", classElement("C").getType());
fromNode.setElement(element);
Type propagatedType = classElement("C").getType();
fromNode.setPropagatedType(propagatedType);
Type staticType = classElement("C").getType();
fromNode.setStaticType(staticType);
FunctionExpression toNode = functionExpression(formalParameterList(), emptyFunctionBody());
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(element, toNode.getElement());
assertSame(propagatedType, toNode.getPropagatedType());
assertSame(staticType, toNode.getStaticType());
}
public void test_visitFunctionExpressionInvocation() {
FunctionExpressionInvocation fromNode = functionExpressionInvocation(identifier("f"));
MethodElement propagatedElement = methodElement("m", classElement("C").getType());
fromNode.setPropagatedElement(propagatedElement);
Type propagatedType = classElement("C").getType();
fromNode.setPropagatedType(propagatedType);
MethodElement staticElement = methodElement("m", classElement("C").getType());
fromNode.setStaticElement(staticElement);
Type staticType = classElement("C").getType();
fromNode.setStaticType(staticType);
FunctionExpressionInvocation toNode = functionExpressionInvocation(identifier("f"));
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(propagatedElement, toNode.getPropagatedElement());
assertSame(propagatedType, toNode.getPropagatedType());
assertSame(staticElement, toNode.getStaticElement());
assertSame(staticType, toNode.getStaticType());
}
public void test_visitImportDirective() {
ImportDirective fromNode = importDirective("dart:uri", null);
ImportElement element = new ImportElementImpl(0);
fromNode.setElement(element);
ImportDirective toNode = importDirective("dart:uri", null);
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(element, toNode.getElement());
}
public void test_visitIndexExpression() {
IndexExpression fromNode = indexExpression(identifier("a"), integer(0L));
MethodElement propagatedElement = methodElement("m", classElement("C").getType());
MethodElement staticElement = methodElement("m", classElement("C").getType());
AuxiliaryElements auxiliaryElements = new AuxiliaryElements(staticElement, propagatedElement);
fromNode.setAuxiliaryElements(auxiliaryElements);
fromNode.setPropagatedElement(propagatedElement);
Type propagatedType = classElement("C").getType();
fromNode.setPropagatedType(propagatedType);
fromNode.setStaticElement(staticElement);
Type staticType = classElement("C").getType();
fromNode.setStaticType(staticType);
IndexExpression toNode = indexExpression(identifier("a"), integer(0L));
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(auxiliaryElements, toNode.getAuxiliaryElements());
assertSame(propagatedElement, toNode.getPropagatedElement());
assertSame(propagatedType, toNode.getPropagatedType());
assertSame(staticElement, toNode.getStaticElement());
assertSame(staticType, toNode.getStaticType());
}
public void test_visitInstanceCreationExpression() {
InstanceCreationExpression fromNode = instanceCreationExpression(Keyword.NEW, typeName("C"));
Type propagatedType = classElement("C").getType();
fromNode.setPropagatedType(propagatedType);
ConstructorElement staticElement = constructorElement(classElement("C"), null);
fromNode.setStaticElement(staticElement);
Type staticType = classElement("C").getType();
fromNode.setStaticType(staticType);
InstanceCreationExpression toNode = instanceCreationExpression(Keyword.NEW, typeName("C"));
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(propagatedType, toNode.getPropagatedType());
assertSame(staticElement, toNode.getStaticElement());
assertSame(staticType, toNode.getStaticType());
}
public void test_visitIntegerLiteral() {
IntegerLiteral fromNode = integer(2L);
Type propagatedType = classElement("C").getType();
fromNode.setPropagatedType(propagatedType);
Type staticType = classElement("C").getType();
fromNode.setStaticType(staticType);
IntegerLiteral toNode = integer(2L);
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(propagatedType, toNode.getPropagatedType());
assertSame(staticType, toNode.getStaticType());
}
public void test_visitIsExpression() {
IsExpression fromNode = isExpression(identifier("x"), false, typeName("A"));
Type propagatedType = classElement("C").getType();
fromNode.setPropagatedType(propagatedType);
Type staticType = classElement("C").getType();
fromNode.setStaticType(staticType);
IsExpression toNode = isExpression(identifier("x"), false, typeName("A"));
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(propagatedType, toNode.getPropagatedType());
assertSame(staticType, toNode.getStaticType());
}
public void test_visitLibraryIdentifier() {
LibraryIdentifier fromNode = libraryIdentifier(identifier("lib"));
Type propagatedType = classElement("C").getType();
fromNode.setPropagatedType(propagatedType);
Type staticType = classElement("C").getType();
fromNode.setStaticType(staticType);
LibraryIdentifier toNode = libraryIdentifier(identifier("lib"));
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(propagatedType, toNode.getPropagatedType());
assertSame(staticType, toNode.getStaticType());
}
public void test_visitListLiteral() {
ListLiteral fromNode = listLiteral();
Type propagatedType = classElement("C").getType();
fromNode.setPropagatedType(propagatedType);
Type staticType = classElement("C").getType();
fromNode.setStaticType(staticType);
ListLiteral toNode = listLiteral();
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(propagatedType, toNode.getPropagatedType());
assertSame(staticType, toNode.getStaticType());
}
public void test_visitMapLiteral() {
MapLiteral fromNode = mapLiteral();
Type propagatedType = classElement("C").getType();
fromNode.setPropagatedType(propagatedType);
Type staticType = classElement("C").getType();
fromNode.setStaticType(staticType);
MapLiteral toNode = mapLiteral();
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(propagatedType, toNode.getPropagatedType());
assertSame(staticType, toNode.getStaticType());
}
public void test_visitMethodInvocation() {
MethodInvocation fromNode = methodInvocation("m");
Type propagatedType = classElement("C").getType();
fromNode.setPropagatedType(propagatedType);
Type staticType = classElement("C").getType();
fromNode.setStaticType(staticType);
MethodInvocation toNode = methodInvocation("m");
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(propagatedType, toNode.getPropagatedType());
assertSame(staticType, toNode.getStaticType());
}
public void test_visitNamedExpression() {
NamedExpression fromNode = namedExpression("n", integer(0L));
Type propagatedType = classElement("C").getType();
fromNode.setPropagatedType(propagatedType);
Type staticType = classElement("C").getType();
fromNode.setStaticType(staticType);
NamedExpression toNode = namedExpression("n", integer(0L));
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(propagatedType, toNode.getPropagatedType());
assertSame(staticType, toNode.getStaticType());
}
public void test_visitNullLiteral() {
NullLiteral fromNode = nullLiteral();
Type propagatedType = classElement("C").getType();
fromNode.setPropagatedType(propagatedType);
Type staticType = classElement("C").getType();
fromNode.setStaticType(staticType);
NullLiteral toNode = nullLiteral();
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(propagatedType, toNode.getPropagatedType());
assertSame(staticType, toNode.getStaticType());
}
public void test_visitParenthesizedExpression() {
ParenthesizedExpression fromNode = parenthesizedExpression(integer(0L));
Type propagatedType = classElement("C").getType();
fromNode.setPropagatedType(propagatedType);
Type staticType = classElement("C").getType();
fromNode.setStaticType(staticType);
ParenthesizedExpression toNode = parenthesizedExpression(integer(0L));
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(propagatedType, toNode.getPropagatedType());
assertSame(staticType, toNode.getStaticType());
}
public void test_visitPartDirective() {
PartDirective fromNode = partDirective("part.dart");
LibraryElement element = new LibraryElementImpl(null, libraryIdentifier("lib"));
fromNode.setElement(element);
PartDirective toNode = partDirective("part.dart");
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(element, toNode.getElement());
}
public void test_visitPartOfDirective() {
PartOfDirective fromNode = partOfDirective(libraryIdentifier("lib"));
LibraryElement element = new LibraryElementImpl(null, libraryIdentifier("lib"));
fromNode.setElement(element);
PartOfDirective toNode = partOfDirective(libraryIdentifier("lib"));
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(element, toNode.getElement());
}
public void test_visitPostfixExpression() {
String variableName = "x";
PostfixExpression fromNode = postfixExpression(identifier(variableName), TokenType.PLUS_PLUS);
MethodElement propagatedElement = methodElement("+", classElement("C").getType());
fromNode.setPropagatedElement(propagatedElement);
Type propagatedType = classElement("C").getType();
fromNode.setPropagatedType(propagatedType);
MethodElement staticElement = methodElement("+", classElement("C").getType());
fromNode.setStaticElement(staticElement);
Type staticType = classElement("C").getType();
fromNode.setStaticType(staticType);
PostfixExpression toNode = postfixExpression(identifier(variableName), TokenType.PLUS_PLUS);
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(propagatedElement, toNode.getPropagatedElement());
assertSame(propagatedType, toNode.getPropagatedType());
assertSame(staticElement, toNode.getStaticElement());
assertSame(staticType, toNode.getStaticType());
}
public void test_visitPrefixedIdentifier() {
PrefixedIdentifier fromNode = identifier("p", "f");
Type propagatedType = classElement("C").getType();
fromNode.setPropagatedType(propagatedType);
Type staticType = classElement("C").getType();
fromNode.setStaticType(staticType);
PrefixedIdentifier toNode = identifier("p", "f");
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(propagatedType, toNode.getPropagatedType());
assertSame(staticType, toNode.getStaticType());
}
public void test_visitPrefixExpression() {
PrefixExpression fromNode = prefixExpression(TokenType.PLUS_PLUS, identifier("x"));
MethodElement propagatedElement = methodElement("+", classElement("C").getType());
Type propagatedType = classElement("C").getType();
fromNode.setPropagatedElement(propagatedElement);
fromNode.setPropagatedType(propagatedType);
Type staticType = classElement("C").getType();
MethodElement staticElement = methodElement("+", classElement("C").getType());
fromNode.setStaticElement(staticElement);
fromNode.setStaticType(staticType);
PrefixExpression toNode = prefixExpression(TokenType.PLUS_PLUS, identifier("x"));
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(propagatedElement, toNode.getPropagatedElement());
assertSame(propagatedType, toNode.getPropagatedType());
assertSame(staticElement, toNode.getStaticElement());
assertSame(staticType, toNode.getStaticType());
}
public void test_visitPropertyAccess() {
PropertyAccess fromNode = propertyAccess(identifier("x"), "y");
Type propagatedType = classElement("C").getType();
fromNode.setPropagatedType(propagatedType);
Type staticType = classElement("C").getType();
fromNode.setStaticType(staticType);
PropertyAccess toNode = propertyAccess(identifier("x"), "y");
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(propagatedType, toNode.getPropagatedType());
assertSame(staticType, toNode.getStaticType());
}
public void test_visitRedirectingConstructorInvocation() {
RedirectingConstructorInvocation fromNode = redirectingConstructorInvocation();
ConstructorElement staticElement = constructorElement(classElement("C"), null);
fromNode.setStaticElement(staticElement);
RedirectingConstructorInvocation toNode = redirectingConstructorInvocation();
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(staticElement, toNode.getStaticElement());
}
public void test_visitRethrowExpression() {
RethrowExpression fromNode = rethrowExpression();
Type propagatedType = classElement("C").getType();
fromNode.setPropagatedType(propagatedType);
Type staticType = classElement("C").getType();
fromNode.setStaticType(staticType);
RethrowExpression toNode = rethrowExpression();
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(propagatedType, toNode.getPropagatedType());
assertSame(staticType, toNode.getStaticType());
}
public void test_visitSimpleIdentifier() {
SimpleIdentifier fromNode = identifier("x");
MethodElement propagatedElement = methodElement("m", classElement("C").getType());
MethodElement staticElement = methodElement("m", classElement("C").getType());
AuxiliaryElements auxiliaryElements = new AuxiliaryElements(staticElement, propagatedElement);
fromNode.setAuxiliaryElements(auxiliaryElements);
fromNode.setPropagatedElement(propagatedElement);
Type propagatedType = classElement("C").getType();
fromNode.setPropagatedType(propagatedType);
fromNode.setStaticElement(staticElement);
Type staticType = classElement("C").getType();
fromNode.setStaticType(staticType);
SimpleIdentifier toNode = identifier("x");
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(auxiliaryElements, toNode.getAuxiliaryElements());
assertSame(propagatedElement, toNode.getPropagatedElement());
assertSame(propagatedType, toNode.getPropagatedType());
assertSame(staticElement, toNode.getStaticElement());
assertSame(staticType, toNode.getStaticType());
}
public void test_visitSimpleStringLiteral() {
SimpleStringLiteral fromNode = string("abc");
Type propagatedType = classElement("C").getType();
fromNode.setPropagatedType(propagatedType);
Type staticType = classElement("C").getType();
fromNode.setStaticType(staticType);
SimpleStringLiteral toNode = string("abc");
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(propagatedType, toNode.getPropagatedType());
assertSame(staticType, toNode.getStaticType());
}
public void test_visitStringInterpolation() {
StringInterpolation fromNode = string(interpolationString("a", "'a'"));
Type propagatedType = classElement("C").getType();
fromNode.setPropagatedType(propagatedType);
Type staticType = classElement("C").getType();
fromNode.setStaticType(staticType);
StringInterpolation toNode = string(interpolationString("a", "'a'"));
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(propagatedType, toNode.getPropagatedType());
assertSame(staticType, toNode.getStaticType());
}
public void test_visitSuperConstructorInvocation() {
SuperConstructorInvocation fromNode = superConstructorInvocation();
ConstructorElement staticElement = constructorElement(classElement("C"), null);
fromNode.setStaticElement(staticElement);
SuperConstructorInvocation toNode = superConstructorInvocation();
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(staticElement, toNode.getStaticElement());
}
public void test_visitSuperExpression() {
SuperExpression fromNode = superExpression();
Type propagatedType = classElement("C").getType();
fromNode.setPropagatedType(propagatedType);
Type staticType = classElement("C").getType();
fromNode.setStaticType(staticType);
SuperExpression toNode = superExpression();
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(propagatedType, toNode.getPropagatedType());
assertSame(staticType, toNode.getStaticType());
}
public void test_visitSymbolLiteral() {
SymbolLiteral fromNode = symbolLiteral("s");
Type propagatedType = classElement("C").getType();
fromNode.setPropagatedType(propagatedType);
Type staticType = classElement("C").getType();
fromNode.setStaticType(staticType);
SymbolLiteral toNode = symbolLiteral("s");
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(propagatedType, toNode.getPropagatedType());
assertSame(staticType, toNode.getStaticType());
}
public void test_visitThisExpression() {
ThisExpression fromNode = thisExpression();
Type propagatedType = classElement("C").getType();
fromNode.setPropagatedType(propagatedType);
Type staticType = classElement("C").getType();
fromNode.setStaticType(staticType);
ThisExpression toNode = thisExpression();
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(propagatedType, toNode.getPropagatedType());
assertSame(staticType, toNode.getStaticType());
}
public void test_visitThrowExpression() {
ThrowExpression fromNode = throwExpression();
Type propagatedType = classElement("C").getType();
fromNode.setPropagatedType(propagatedType);
Type staticType = classElement("C").getType();
fromNode.setStaticType(staticType);
ThrowExpression toNode = throwExpression();
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(propagatedType, toNode.getPropagatedType());
assertSame(staticType, toNode.getStaticType());
}
public void test_visitTypeName() {
TypeName fromNode = typeName("C");
Type type = classElement("C").getType();
fromNode.setType(type);
TypeName toNode = typeName("C");
ResolutionCopier.copyResolutionData(fromNode, toNode);
assertSame(type, toNode.getType());
}
}