mirror of
https://github.com/dart-lang/sdk
synced 2024-09-05 16:41:07 +00:00
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:
parent
b0ffc26dab
commit
f13881ac08
|
@ -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.
|
||||
///
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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);
|
||||
}
|
|
@ -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) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in a new issue