Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(385)

Unified Diff: editor/util/plugins/com.google.dart.java2dart/src/com/google/dart/java2dart/SyntaxTranslator.java

Issue 221483002: Fix for translation of \!= to \!identical(), but use == and \!= for Enum. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: editor/util/plugins/com.google.dart.java2dart/src/com/google/dart/java2dart/SyntaxTranslator.java
diff --git a/editor/util/plugins/com.google.dart.java2dart/src/com/google/dart/java2dart/SyntaxTranslator.java b/editor/util/plugins/com.google.dart.java2dart/src/com/google/dart/java2dart/SyntaxTranslator.java
index c144b7ac424b5b55b62d728db1ae614aace2a935..ce3258610d2bbbea32524582573e9d2958932ac4 100644
--- a/editor/util/plugins/com.google.dart.java2dart/src/com/google/dart/java2dart/SyntaxTranslator.java
+++ b/editor/util/plugins/com.google.dart.java2dart/src/com/google/dart/java2dart/SyntaxTranslator.java
@@ -24,6 +24,7 @@ import com.google.dart.engine.ast.AstNode;
import com.google.dart.engine.ast.BinaryExpression;
import com.google.dart.engine.ast.Block;
import com.google.dart.engine.ast.BlockFunctionBody;
+import com.google.dart.engine.ast.BooleanLiteral;
import com.google.dart.engine.ast.BreakStatement;
import com.google.dart.engine.ast.CatchClause;
import com.google.dart.engine.ast.ClassDeclaration;
@@ -463,8 +464,21 @@ public class SyntaxTranslator extends org.eclipse.jdt.core.dom.ASTVisitor {
@Override
public boolean visit(org.eclipse.jdt.core.dom.CastExpression node) {
+ org.eclipse.jdt.core.dom.Type javaType = node.getType();
Expression expression = translate(node.getExpression());
- TypeName typeName = translate(node.getType());
+ TypeName typeName = translate(javaType);
+ // (byte) E;
+ {
+ String javaTypeName = javaType.toString();
+ if (javaTypeName.equals("byte")) {
+ if (expression instanceof IntegerLiteral) {
+ IntegerLiteral literal = (IntegerLiteral) expression;
+ return done(integer(literal.getValue().intValue() & 0xFF));
+ }
+ return done(methodInvocation("toByte", expression));
+ }
+ }
+ // general case
AsExpression asExpression = asExpression(expression, typeName);
return done(parenthesizedExpression(asExpression));
}
@@ -921,14 +935,18 @@ public class SyntaxTranslator extends org.eclipse.jdt.core.dom.ASTVisitor {
tokenType = TokenType.GT_EQ;
}
if (javaOperator == org.eclipse.jdt.core.dom.InfixExpression.Operator.EQUALS) {
- if (isNumberOrNull(left) || isNumberOrNull(right)) {
+ if (isNumberOrNull(left) || isNumberOrNull(right) || isEnum(left) && isEnum(right)) {
tokenType = TokenType.EQ_EQ;
} else {
return done(methodInvocation("identical", left, right));
}
}
if (javaOperator == org.eclipse.jdt.core.dom.InfixExpression.Operator.NOT_EQUALS) {
- tokenType = TokenType.BANG_EQ;
+ if (isNumberOrNull(left) || isNumberOrNull(right) || isEnum(left) && isEnum(right)) {
+ tokenType = TokenType.BANG_EQ;
+ } else {
+ return done(prefixExpression(TokenType.BANG, methodInvocation("identical", left, right)));
+ }
}
Assert.isNotNull(tokenType, "No token for: " + javaOperator);
// create BinaryExpression
@@ -1074,7 +1092,13 @@ public class SyntaxTranslator extends org.eclipse.jdt.core.dom.ASTVisitor {
return done(new DoubleLiteral(token(TokenType.DOUBLE, token), 0));
} else {
token = StringUtils.removeEndIgnoreCase(token, "L");
- return done(new IntegerLiteral(token(TokenType.INT, token), BigInteger.valueOf(0)));
+ long value;
+ if (token.startsWith("0x")) {
+ value = Long.parseLong(token.substring(2), 16);
+ } else {
+ value = Long.parseLong(token);
+ }
+ return done(new IntegerLiteral(token(TokenType.INT, token), BigInteger.valueOf(value)));
}
}
@@ -1839,21 +1863,29 @@ public class SyntaxTranslator extends org.eclipse.jdt.core.dom.ASTVisitor {
return javaSource.substring(offset, offset + node.getLength());
}
+ private boolean isEnum(Expression expression) {
+ ITypeBinding typeBinding = context.getNodeTypeBinding(expression);
+ if (typeBinding != null) {
+ return JavaUtils.isSubtype(typeBinding, "java.lang.Enum");
+ }
+ return false;
+ }
+
private boolean isEol(char character) {
return character == '\r' || character == '\n';
}
private boolean isNumberOrNull(Expression expression) {
- if (expression instanceof IntegerLiteral || expression instanceof DoubleLiteral
- || expression instanceof NullLiteral) {
+ if (expression instanceof IntegerLiteral || expression instanceof BooleanLiteral
+ || expression instanceof DoubleLiteral || expression instanceof NullLiteral) {
return true;
}
ITypeBinding typeBinding = context.getNodeTypeBinding(expression);
if (typeBinding != null) {
String name = JavaUtils.getFullyQualifiedName(typeBinding, false);
- return name.equals("char") || name.equals("short") || name.equals("int")
- || name.equals("long") || name.equals("float") || name.equals("double")
- || name.equals("java.lang.Class");
+ return name.equals("boolean") || name.equals("byte") || name.equals("char")
+ || name.equals("short") || name.equals("int") || name.equals("long")
+ || name.equals("float") || name.equals("double") || name.equals("java.lang.Class");
}
return false;
}

Powered by Google App Engine
This is Rietveld 408576698