Fix the pubspec and warnings in pkg/kernel.

BUG=
R=kmillikin@google.com

Review URL: https://codereview.chromium.org/2530543002 .
This commit is contained in:
Asger Feldthaus 2016-11-23 14:36:22 +01:00
parent b0ffc26dab
commit f13881ac08
6 changed files with 10 additions and 127 deletions

View file

@ -14,6 +14,7 @@ import 'loader.dart';
import 'package:analyzer/analyzer.dart';
import 'package:analyzer/src/generated/parser.dart';
import 'package:analyzer/src/dart/element/member.dart';
import 'package:analyzer/src/error/codes.dart';
/// Provides reference-level access to libraries, classes, and members.
///

View file

@ -30,6 +30,7 @@ import 'ast_from_analyzer.dart';
class DartOptions {
/// True if user code should be loaded in strong mode.
bool strongMode;
/// True if the Dart SDK should be loaded in strong mode.
bool strongModeSdk;
String sdk;
@ -132,16 +133,19 @@ class DartLoader implements ReferenceLevelLoader {
promoteToBodyLevel(node);
classes.add(node);
}
void loadProcedure(Element memberElement) {
var node = getMemberReference(memberElement);
_buildTopLevelMember(node, memberElement);
procedures.add(node);
}
void loadField(Element memberElement) {
var node = getMemberReference(memberElement);
_buildTopLevelMember(node, memberElement);
fields.add(node);
}
for (var unit in element.units) {
unit.types.forEach(loadClass);
unit.enums.forEach(loadClass);
@ -730,7 +734,6 @@ Future<Packages> createPackages(String packagePath,
AnalysisOptions createAnalysisOptions(bool strongMode) {
return new AnalysisOptionsImpl()
..strongMode = strongMode
..enableGenericMethods = strongMode
..generateImplicitErrors = false
..generateSdkErrors = false
..preserveComments = false

View file

@ -6,8 +6,7 @@ homepage: https://github.com/dart-lang/kernel
environment:
sdk: ">=1.8.0"
dependencies:
# We import some of the analyzer's internal files, so lock the patch version.
analyzer: 0.29.0
analyzer: ^0.29.0
path: ^1.3.9
args: ^0.13.4
logging: ^0.11.2
@ -16,3 +15,5 @@ dev_dependencies:
test: ^0.12.15+6
stack_trace: ^1.6.6
ansicolor: ^0.0.9
dependency_overrides:
analyzer: {path: ../analyzer}

View file

@ -1,122 +0,0 @@
// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
library kernel.treeshaker.stacktracer;
import 'package:kernel/kernel.dart';
import 'package:kernel/transformations/treeshaker.dart';
import 'dart:io';
import 'package:ansicolor/ansicolor.dart';
String usage = '''
USAGE: treeshaker_stacktracer FILE.dill STACKTRACE.txt
Given a program and a stack trace from it, highlight the stack trace entries
that the tree shaker marked as unreachable. These are indicative of bugs
in the tree shaker since their presence in the stack trace proves them reachable.
Example usage:
${comment("# Not shown: insert a 'throw' in testcase.dart")}
dart testcase.dart > error.txt ${comment("# Get the stack trace")}
dartk testcase.dart -l -otestcase.dill ${comment("# Compile binary")}
dart test/treeshaker_stacktracer.dart testcase.dill error.txt ${comment("# Analyze")}
''';
String legend = '''
Legend:
${reachable('reachable member')} or ${reachable('instantiated class')}
${unreachable('unreachable member')} or ${unreachable('uninstantiated class')}
${unknown('name unrecognized')}
''';
// TODO: Also support the stack trace format from stack_trace.
RegExp stackTraceEntry = new RegExp(r'(#[0-9]+\s+)([a-zA-Z0-9_$.&<> ]+) \((.*)\)');
AnsiPen reachable = new AnsiPen()..green();
AnsiPen unreachable = new AnsiPen()..red();
AnsiPen unknown = new AnsiPen()..gray(level: 0.5);
AnsiPen filecolor = new AnsiPen()..gray(level: 0.5);
AnsiPen comment = new AnsiPen()..gray(level: 0.5);
String stackTraceName(Member member) {
String name = member.name?.name;
String className = member.enclosingClass?.name;
if (member is Constructor && name != null) {
return '$className.$className';
} else if (className != null) {
return '$className.$name';
} else {
return name;
}
}
int findReachablePrefix(String name, Set<String> strings) {
for (int index = name.length;
index > 0;
index = name.lastIndexOf('.', index - 1)) {
if (strings.contains(name.substring(0, index))) {
return index;
}
}
return 0;
}
String shortenFilename(String filename) {
if (filename.startsWith('file:')) {
int libIndex = filename.lastIndexOf('lib/');
if (libIndex != -1) {
return filename.substring(libIndex + 'lib/'.length);
}
}
return filename;
}
main(List<String> args) {
if (args.length != 2) {
print(usage);
exit(1);
}
List<String> stackTrace = new File(args[1]).readAsLinesSync();
Program program = loadProgramFromBinary(args[0]);
TreeShaker shaker = new TreeShaker(program);
Set<String> reachablePatterns = new Set<String>();
Set<String> allMembers = new Set<String>();
Set<String> instantiatedClasses = new Set<String>();
void visitMember(Member member) {
allMembers.add(stackTraceName(member));
if (shaker.isMemberUsed(member)) {
reachablePatterns.add(stackTraceName(member));
}
}
for (var library in program.libraries) {
for (var classNode in library.classes) {
if (shaker.isInstantiated(classNode)) {
instantiatedClasses.add(classNode.name);
}
classNode.members.forEach(visitMember);
}
library.members.forEach(visitMember);
}
for (String line in stackTrace) {
var match = stackTraceEntry.matchAsPrefix(line);
if (match == null) continue;
String entry = match.group(2);
int reachableIndex = findReachablePrefix(entry, reachablePatterns);
int knownIndex = findReachablePrefix(entry, allMembers);
int classIndex = findReachablePrefix(entry, instantiatedClasses);
if (reachableIndex == 0) {
reachableIndex = classIndex;
if (reachableIndex > knownIndex) {
knownIndex = reachableIndex;
}
}
String numberPart = match.group(1);
String reachablePart = reachable(entry.substring(0, reachableIndex));
String knownPart = unreachable(entry.substring(reachableIndex, knownIndex));
String unknownPart = unknown(entry.substring(knownIndex));
String filePart = filecolor(shortenFilename(match.group(3)));
String string = '$numberPart$reachablePart$knownPart$unknownPart';
print(string.padRight(110) + filePart);
}
print(legend);
}

View file

@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
import 'package:kernel/kernel.dart';
import 'type_parser.dart';
import 'type_unification_test.dart' show testCases;
import 'type_unification_test_disabled.dart' show testCases;
import 'package:test/test.dart';
void checkHashCodeEquality(DartType type1, DartType type2) {

View file

@ -4,7 +4,7 @@
import 'package:kernel/kernel.dart';
import 'package:kernel/type_algebra.dart';
import 'type_parser.dart';
import 'type_unification_test.dart' show testCases;
import 'type_unification_test_disabled.dart' show testCases;
import 'package:test/test.dart';
checkType(DartType type) {