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

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

Issue 189433006: Support for DartBlockBody, DartExpressionBody, DartOmit in java2dart. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fixes for review comments. 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 5f4648cb4f4effc490123d351dc54503864b6e55..ece0243d40892991c9eff6e59124f4d16fce2f2b 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
@@ -70,6 +70,7 @@ import com.google.dart.engine.ast.TypeParameterList;
import com.google.dart.engine.ast.VariableDeclaration;
import com.google.dart.engine.ast.VariableDeclarationList;
import com.google.dart.engine.ast.WhileStatement;
+import com.google.dart.engine.ast.visitor.ConstantEvaluator;
import com.google.dart.engine.ast.visitor.RecursiveAstVisitor;
import com.google.dart.engine.scanner.Keyword;
import com.google.dart.engine.scanner.StringToken;
@@ -147,7 +148,11 @@ import org.eclipse.jdt.core.dom.IBinding;
import org.eclipse.jdt.core.dom.IMethodBinding;
import org.eclipse.jdt.core.dom.ITypeBinding;
import org.eclipse.jdt.core.dom.IVariableBinding;
+import org.eclipse.jdt.core.dom.MarkerAnnotation;
+import org.eclipse.jdt.core.dom.MemberValuePair;
+import org.eclipse.jdt.core.dom.NormalAnnotation;
import org.eclipse.jdt.core.dom.SimpleName;
+import org.eclipse.jdt.core.dom.SingleMemberAnnotation;
import org.eclipse.jdt.core.dom.SynchronizedStatement;
import org.eclipse.jdt.core.dom.Type;
import org.eclipse.jdt.core.dom.TypeDeclaration;
@@ -603,6 +608,11 @@ public class SyntaxTranslator extends org.eclipse.jdt.core.dom.ASTVisitor {
List<CompilationUnitMember> declarations = Lists.newArrayList();
for (Iterator<?> I = node.types().iterator(); I.hasNext();) {
Object javaType = I.next();
+ // skip annotation declarations
+ if (javaType instanceof org.eclipse.jdt.core.dom.AnnotationTypeDeclaration) {
+ continue;
+ }
+ // translate classes and interfaces
ClassDeclaration dartClass = translate((org.eclipse.jdt.core.dom.ASTNode) javaType);
declarations.add(dartClass);
declarations.addAll(artificialUnitDeclarations);
@@ -814,6 +824,7 @@ public class SyntaxTranslator extends org.eclipse.jdt.core.dom.ASTVisitor {
if (isPrivate) {
context.putPrivateClassMember(fieldDeclaration);
}
+ translateAnnotations(fieldDeclaration, node.modifiers());
return done(fieldDeclaration);
}
@@ -1019,6 +1030,7 @@ public class SyntaxTranslator extends org.eclipse.jdt.core.dom.ASTVisitor {
if (isPrivate) {
context.putPrivateClassMember(methodDeclaration);
}
+ translateAnnotations(methodDeclaration, node.modifiers());
return done(methodDeclaration);
}
}
@@ -1530,6 +1542,7 @@ public class SyntaxTranslator extends org.eclipse.jdt.core.dom.ASTVisitor {
}
}
// done
+ translateAnnotations(classDeclaration, node.modifiers());
return done(classDeclaration);
}
@@ -1976,6 +1989,36 @@ public class SyntaxTranslator extends org.eclipse.jdt.core.dom.ASTVisitor {
return castedResult;
}
+ private void translateAnnotations(AstNode dartNode, List<?> modifiers) {
+ for (Object modifier : modifiers) {
+ if (modifier instanceof org.eclipse.jdt.core.dom.Annotation) {
+ org.eclipse.jdt.core.dom.Annotation annotation = (org.eclipse.jdt.core.dom.Annotation) modifier;
+ String name = ((org.eclipse.jdt.core.dom.SimpleName) annotation.getTypeName()).getIdentifier();
+ ParsedAnnotation parsedAnnotation = new ParsedAnnotation(name);
+ if (modifier instanceof MarkerAnnotation) {
+ // no values
+ } else if (modifier instanceof SingleMemberAnnotation) {
+ SingleMemberAnnotation singleMemberAnnotation = (SingleMemberAnnotation) modifier;
+ org.eclipse.jdt.core.dom.Expression javaExpression = singleMemberAnnotation.getValue();
+ Expression dartExpression = translate(javaExpression);
+ Object value = dartExpression.accept(new ConstantEvaluator());
+ parsedAnnotation.put("value", value);
+ } else if (modifier instanceof NormalAnnotation) {
+ NormalAnnotation normalAnnotation = (NormalAnnotation) modifier;
+ for (Object javaPairObject : normalAnnotation.values()) {
+ MemberValuePair javaPair = (MemberValuePair) javaPairObject;
+ String pairName = javaPair.getName().getIdentifier();
+ org.eclipse.jdt.core.dom.Expression javaPairExpr = javaPair.getValue();
+ Expression dartExpression = translate(javaPairExpr);
+ Object value = dartExpression.accept(new ConstantEvaluator());
+ parsedAnnotation.put(pairName, value);
+ }
+ }
+ context.putNodeAnnotation(dartNode, parsedAnnotation);
+ }
+ }
+ }
+
/**
* Translates given {@link List} of {@link org.eclipse.jdt.core.dom.Expression} to the Dart
* {@link Expression} list.

Powered by Google App Engine
This is Rietveld 408576698