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

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

Issue 134533007: New analyzer snapshot. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 11 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
« no previous file with comments | « no previous file | pkg/analyzer/example/resolver_driver.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: editor/util/plugins/com.google.dart.java2dart/src/com/google/dart/java2dart/engine/MainEngine.java
diff --git a/editor/util/plugins/com.google.dart.java2dart/src/com/google/dart/java2dart/engine/MainEngine.java b/editor/util/plugins/com.google.dart.java2dart/src/com/google/dart/java2dart/engine/MainEngine.java
index aa298419ef9b5186905cc5fbfed8c2da223698f8..337dd16e7a53938f9dc613f6dbc1829bb574000c 100644
--- a/editor/util/plugins/com.google.dart.java2dart/src/com/google/dart/java2dart/engine/MainEngine.java
+++ b/editor/util/plugins/com.google.dart.java2dart/src/com/google/dart/java2dart/engine/MainEngine.java
@@ -18,13 +18,33 @@ import com.google.common.base.Charsets;
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
import com.google.common.io.Files;
+import com.google.dart.engine.AnalysisEngine;
import com.google.dart.engine.ast.ASTNode;
+import com.google.dart.engine.ast.AsExpression;
import com.google.dart.engine.ast.ClassDeclaration;
import com.google.dart.engine.ast.CompilationUnit;
import com.google.dart.engine.ast.CompilationUnitMember;
+import com.google.dart.engine.ast.Expression;
import com.google.dart.engine.ast.NodeList;
+import com.google.dart.engine.ast.ParenthesizedExpression;
import com.google.dart.engine.ast.Statement;
+import com.google.dart.engine.ast.visitor.NodeLocator;
+import com.google.dart.engine.context.AnalysisContext;
+import com.google.dart.engine.context.AnalysisErrorInfo;
+import com.google.dart.engine.context.AnalysisResult;
+import com.google.dart.engine.context.ChangeSet;
+import com.google.dart.engine.error.AnalysisError;
+import com.google.dart.engine.error.HintCode;
+import com.google.dart.engine.sdk.DirectoryBasedDartSdk;
+import com.google.dart.engine.source.ContentCache;
+import com.google.dart.engine.source.DartUriResolver;
+import com.google.dart.engine.source.FileBasedSource;
+import com.google.dart.engine.source.FileUriResolver;
+import com.google.dart.engine.source.PackageUriResolver;
+import com.google.dart.engine.source.Source;
+import com.google.dart.engine.source.SourceFactory;
import com.google.dart.engine.utilities.io.PrintStringWriter;
import com.google.dart.java2dart.Context;
import com.google.dart.java2dart.processor.BeautifySemanticProcessor;
@@ -43,13 +63,18 @@ import static com.google.dart.java2dart.util.ASTFactory.importDirective;
import static com.google.dart.java2dart.util.ASTFactory.importShowCombinator;
import static com.google.dart.java2dart.util.ASTFactory.libraryDirective;
+import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import java.io.File;
+import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import java.util.Map.Entry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -58,15 +83,34 @@ import java.util.regex.Pattern;
* Translates some parts of "com.google.dart.engine" project.
*/
public class MainEngine {
+ static class Edit {
+ public final int offset;
+ public final int length;
+ public final String replacement;
+
+ public Edit(int offset, int length, String replacement) {
+ this.offset = offset;
+ this.length = length;
+ this.replacement = replacement;
+ }
+
+ @Override
+ public String toString() {
+ return (offset < 0 ? "(" : "X(") + "offset: " + offset + ", length " + length
+ + ", replacement :>" + replacement + "<:)";
+ }
+
+ }
+
/**
* Default package src location (can be overridden)
*/
private static String src_package = "package:analysis_engine/src/";
-
private static final Context context = new Context();
private static File engineFolder;
private static File engineTestFolder;
private static File engineFolder2;
+
private static CompilationUnit dartUnit;
private static final String HEADER = "// This code was auto-generated, is not intended to be edited, and is subject to\n"
@@ -331,7 +375,9 @@ public class MainEngine {
{
CompilationUnit library = buildAstLibrary();
File astFile = new File(targetFolder + "/ast.dart");
- Files.write(getFormattedSource(library), astFile, Charsets.UTF_8);
+ String source = getFormattedSource(library);
+ source = source.replace("AngularCompilationUnitBuilder.getElement(node, offset);", "null;");
+ Files.write(source, astFile, Charsets.UTF_8);
Files.append(
Files.toString(new File("resources/ast_include.dart"), Charsets.UTF_8),
astFile,
@@ -455,6 +501,10 @@ public class MainEngine {
new File(targetTestFolder + "/resolver_test.dart"),
Charsets.UTF_8);
}
+ {
+ String projectFolder = new File(targetFolder).getParentFile().getParentFile().getParent();
+ fixUnnecessaryCastHints(projectFolder);
+ }
System.out.println("Translation complete");
}
@@ -471,6 +521,23 @@ public class MainEngine {
}
}
+ private static void applyEdits(File file, List<Edit> edits) throws IOException {
+ // sort in descending order
+ Collections.sort(edits, new Comparator<Edit>() {
+ @Override
+ public int compare(Edit o1, Edit o2) {
+ return o2.offset - o1.offset;
+ }
+ });
+ // apply to file
+ String content = Files.toString(file, Charsets.UTF_8);
+ for (Edit edit : edits) {
+ content = content.substring(0, edit.offset) + edit.replacement
+ + content.substring(edit.offset + edit.length);
+ }
+ Files.write(content, file, Charsets.UTF_8);
+ }
+
private static CompilationUnit buildAstLibrary() throws Exception {
CompilationUnit unit = new CompilationUnit(null, null, null, null, null);
unit.getDirectives().add(libraryDirective("engine", "ast"));
@@ -1148,6 +1215,92 @@ public class MainEngine {
return unit;
}
+ private static void fixUnnecessaryCastHints(String projectPath) throws Exception {
+ System.out.println();
+ System.out.println("Removing unnecessary casts.");
+ AnalysisContext context = AnalysisEngine.getInstance().createAnalysisContext();
+ DirectoryBasedDartSdk sdk = DirectoryBasedDartSdk.getDefaultSdk();
+ SourceFactory sourceFactory = new SourceFactory(
+ new DartUriResolver(sdk),
+ new FileUriResolver(),
+ new PackageUriResolver(new File(projectPath + "/packages")));
+ context.setSourceFactory(sourceFactory);
+ ContentCache contentCache = sourceFactory.getContentCache();
+ // prepare sources
+ List<Source> sources = Lists.newArrayList();
+ Map<Source, File> sourceToFile = Maps.newHashMap();
+ for (File file : FileUtils.listFiles(
+ new File(projectPath + "/lib/src/generated"),
+ new String[] {"dart"},
+ true)) {
+ if (file.getAbsolutePath().contains("/packages/")) {
+ continue;
+ }
+ FileBasedSource source = new FileBasedSource(contentCache, file);
+ sources.add(source);
+ sourceToFile.put(source, file);
+ }
+ for (File file : FileUtils.listFiles(
+ new File(projectPath + "/test/generated"),
+ new String[] {"dart"},
+ true)) {
+ if (file.getAbsolutePath().contains("/packages/")) {
+ continue;
+ }
+ FileBasedSource source = new FileBasedSource(contentCache, file);
+ sources.add(source);
+ sourceToFile.put(source, file);
+ }
+ // add sources to AnalysisContext
+ {
+ ChangeSet changeSet = new ChangeSet();
+ for (Source source : sources) {
+ changeSet.added(source);
+ }
+ context.applyChanges(changeSet);
+ }
+ System.out.println(sources.size() + " sources to analyze.");
+ // perform analysis
+ while (true) {
+ AnalysisResult analysisResult = context.performAnalysisTask();
+ if (analysisResult.getChangeNotices() == null) {
+ break;
+ }
+ }
+ System.out.println("Analysis done.");
+ // process errors
+ for (Source source : sources) {
+ CompilationUnit unit = context.parseCompilationUnit(source);
+ List<Edit> edits = Lists.newArrayList();
+ AnalysisErrorInfo errorInfo = context.getErrors(source);
+ AnalysisError[] errors = errorInfo.getErrors();
+ for (AnalysisError error : errors) {
+ if (error.getErrorCode() == HintCode.UNNECESSARY_CAST) {
+ ASTNode node = new NodeLocator(error.getOffset()).searchWithin(unit);
+ AsExpression asExpression = node.getAncestor(AsExpression.class);
+ if (asExpression != null) {
+ // remove "as" and its enclosing ()
+ ASTNode enclosing = asExpression;
+ if (enclosing.getParent() instanceof ParenthesizedExpression) {
+ enclosing = enclosing.getParent();
+ }
+ // add Edit
+ Expression expr = asExpression.getExpression();
+ int enOffset = enclosing.getOffset();
+ int exEnd = expr.getEnd();
+ edits.add(new Edit(enOffset, expr.getOffset() - enOffset, ""));
+ edits.add(new Edit(exEnd, enclosing.getEnd() - exEnd, ""));
+ }
+ }
+ }
+ // apply edits to file
+ File file = sourceToFile.get(source);
+ applyEdits(file, edits);
+ }
+ System.out.println("Edits applied.");
+ System.out.println();
+ }
+
/**
* @return the formatted Dart source dump of the given {@link ASTNode}.
*/
« no previous file with comments | « no previous file | pkg/analyzer/example/resolver_driver.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698