| Index: editor/util/plugins/com.google.dart.java2dart/src/com/google/dart/java2dart/processor/GuavaSemanticProcessor.java
|
| diff --git a/editor/util/plugins/com.google.dart.java2dart/src/com/google/dart/java2dart/processor/GuavaSemanticProcessor.java b/editor/util/plugins/com.google.dart.java2dart/src/com/google/dart/java2dart/processor/GuavaSemanticProcessor.java
|
| index e4d3026238b3a53410f87ef42b4ca7137c25d884..3e6936b9851efed6bb85df59f8249b9f007b45e6 100644
|
| --- a/editor/util/plugins/com.google.dart.java2dart/src/com/google/dart/java2dart/processor/GuavaSemanticProcessor.java
|
| +++ b/editor/util/plugins/com.google.dart.java2dart/src/com/google/dart/java2dart/processor/GuavaSemanticProcessor.java
|
| @@ -14,19 +14,23 @@
|
|
|
| package com.google.dart.java2dart.processor;
|
|
|
| +import com.google.dart.engine.ast.ASTNode;
|
| import com.google.dart.engine.ast.CompilationUnit;
|
| import com.google.dart.engine.ast.Expression;
|
| import com.google.dart.engine.ast.MethodInvocation;
|
| +import com.google.dart.engine.ast.PrefixExpression;
|
| import com.google.dart.engine.ast.visitor.GeneralizingASTVisitor;
|
| import com.google.dart.engine.scanner.Keyword;
|
| import com.google.dart.engine.scanner.TokenType;
|
| import com.google.dart.java2dart.Context;
|
|
|
| import static com.google.dart.java2dart.util.ASTFactory.binaryExpression;
|
| +import static com.google.dart.java2dart.util.ASTFactory.identifier;
|
| import static com.google.dart.java2dart.util.ASTFactory.instanceCreationExpression;
|
| import static com.google.dart.java2dart.util.ASTFactory.listLiteral;
|
| import static com.google.dart.java2dart.util.ASTFactory.mapLiteral;
|
| import static com.google.dart.java2dart.util.ASTFactory.typeName;
|
| +import static com.google.dart.java2dart.util.TokenFactory.token;
|
|
|
| import java.util.List;
|
|
|
| @@ -34,6 +38,14 @@ import java.util.List;
|
| * {@link SemanticProcessor} for Google Guava.
|
| */
|
| public class GuavaSemanticProcessor extends SemanticProcessor {
|
| + private static boolean isNegationParent(ASTNode node) {
|
| + if (node.getParent() instanceof PrefixExpression) {
|
| + PrefixExpression prefixExpression = (PrefixExpression) node.getParent();
|
| + return prefixExpression.getOperator().getType() == TokenType.BANG;
|
| + }
|
| + return false;
|
| + }
|
| +
|
| public GuavaSemanticProcessor(Context context) {
|
| super(context);
|
| }
|
| @@ -46,7 +58,18 @@ public class GuavaSemanticProcessor extends SemanticProcessor {
|
| super.visitMethodInvocation(node);
|
| List<Expression> args = node.getArgumentList().getArguments();
|
| if (isMethodInClass(node, "equal", "com.google.common.base.Objects")) {
|
| - replaceNode(node, binaryExpression(args.get(0), TokenType.EQ_EQ, args.get(1)));
|
| + ASTNode toReplace = node;
|
| + TokenType operator = TokenType.EQ_EQ;
|
| + if (isNegationParent(node)) {
|
| + operator = TokenType.BANG_EQ;
|
| + toReplace = node.getParent();
|
| + }
|
| + replaceNode(toReplace, binaryExpression(args.get(0), operator, args.get(1)));
|
| + return null;
|
| + }
|
| + if (isMethodInClass(node, "hashCode", "com.google.common.base.Objects")) {
|
| + replaceNode(node.getTarget(), identifier("JavaArrays"));
|
| + node.getMethodName().setToken(token("makeHashCode"));
|
| return null;
|
| }
|
| if (isMethodInClass(node, "of", "com.google.common.collect.ImmutableMap")) {
|
| @@ -57,10 +80,19 @@ public class GuavaSemanticProcessor extends SemanticProcessor {
|
| replaceNode(node, listLiteral());
|
| return null;
|
| }
|
| + if (isMethodInClass(node, "newLinkedList", "com.google.common.collect.Lists")) {
|
| + replaceNode(node, instanceCreationExpression(Keyword.NEW, typeName("Queue")));
|
| + return null;
|
| + }
|
| if (isMethodInClass(node, "newHashMap", "com.google.common.collect.Maps")) {
|
| replaceNode(node, mapLiteral());
|
| return null;
|
| }
|
| + if (isMethodInClass(node, "difference", "com.google.common.collect.Sets")) {
|
| + node.setTarget(args.get(0));
|
| + args.remove(0);
|
| + return null;
|
| + }
|
| if (isMethodInClass(node, "newHashSet", "com.google.common.collect.Sets")) {
|
| replaceNode(node, instanceCreationExpression(Keyword.NEW, typeName("Set")));
|
| return null;
|
|
|