Skip to content

Commit

Permalink
Version 3.7.0-255.0.dev
Browse files Browse the repository at this point in the history
Merge 397a397 into dev
  • Loading branch information
Dart CI committed Dec 16, 2024
2 parents 4822320 + 397a397 commit 4bfbad7
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 47 deletions.
11 changes: 6 additions & 5 deletions pkg/front_end/lib/src/base/import_chains.dart
Original file line number Diff line number Diff line change
Expand Up @@ -100,12 +100,11 @@ abstract class LoadedLibraries {

class LoadedLibrariesImpl implements LoadedLibraries {
/// The library of the compilation entry point.
final CompilationUnit rootCompilationUnit;
final List<CompilationUnit> rootCompilationUnits;
final Map<Uri, CompilationUnit> compilationUnits = {};

// TODO(johnniwinther): Support multiple entry-points.
LoadedLibrariesImpl(
this.rootCompilationUnit, Iterable<CompilationUnit> compilationUnits) {
this.rootCompilationUnits, Iterable<CompilationUnit> compilationUnits) {
compilationUnits.forEach((CompilationUnit compilationUnit) {
this.compilationUnits[compilationUnit.importUri] = compilationUnit;
});
Expand Down Expand Up @@ -183,12 +182,14 @@ class LoadedLibrariesImpl implements LoadedLibraries {
return;
}

computeSuffixes(rootCompilationUnit, const Link<Uri>());
for (CompilationUnit rootCompilationUnit in rootCompilationUnits) {
computeSuffixes(rootCompilationUnit, const Link<Uri>());
}
}

@override
String toString() =>
'root=$rootCompilationUnit,compilationUnits=${compilationUnits.keys}';
'roots=$rootCompilationUnits,compilationUnits=${compilationUnits.keys}';
}

/// [CodeLocation] divides uris into different classes.
Expand Down
2 changes: 1 addition & 1 deletion pkg/front_end/lib/src/source/source_loader.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1191,7 +1191,7 @@ severity: $severity
templateUnavailableDartLibrary.withArguments(importUri);
if (rootLibrary != null) {
loadedLibraries ??=
new LoadedLibrariesImpl(rootLibrary, compilationUnits);
new LoadedLibrariesImpl([rootLibrary], compilationUnits);
Set<String> importChain = computeImportChainsFor(
rootLibrary.importUri, loadedLibraries, importUri,
verbose: false);
Expand Down
106 changes: 66 additions & 40 deletions pkg/front_end/test/deps_git_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,52 +10,61 @@ import 'package:front_end/src/api_prototype/compiler_options.dart';
import 'package:front_end/src/api_prototype/standard_file_system.dart';
import 'package:front_end/src/base/compiler_context.dart';
import 'package:front_end/src/base/file_system_dependency_tracker.dart';
import 'package:front_end/src/base/import_chains.dart';
import 'package:front_end/src/base/processed_options.dart';
import 'package:front_end/src/base/ticker.dart';
import 'package:front_end/src/base/uri_translator.dart';
import 'package:front_end/src/builder/library_builder.dart';
import 'package:front_end/src/compute_platform_binaries_location.dart'
show computePlatformBinariesLocation;
import 'package:front_end/src/dill/dill_target.dart';
import 'package:front_end/src/kernel/kernel_target.dart';
import 'package:kernel/kernel.dart';
import 'package:kernel/target/targets.dart';
import 'package:package_config/src/package_config.dart';
import 'package:vm/modular/target/vm.dart' show VmTarget;

import 'utils/io_utils.dart' show computeRepoDirUri;

final Uri repoDir = computeRepoDirUri();

Set<String> allowlistedExternalDartFiles = {
"third_party/pkg/package_config/lib/package_config.dart",
"third_party/pkg/package_config/lib/package_config_types.dart",
"third_party/pkg/package_config/lib/src/discovery.dart",
"third_party/pkg/package_config/lib/src/errors.dart",
"third_party/pkg/package_config/lib/src/package_config_impl.dart",
"third_party/pkg/package_config/lib/src/package_config_io.dart",
"third_party/pkg/package_config/lib/src/package_config_json.dart",
"third_party/pkg/package_config/lib/src/package_config.dart",
"third_party/pkg/package_config/lib/src/packages_file.dart",
"third_party/pkg/package_config/lib/src/util.dart",

// TODO(johnniwinther): Fix to allow dependency of package:package_config.
"third_party/pkg/package_config/lib/src/util_io.dart",

// TODO(CFE-team): These files should not be included.
// The package isn't even in pubspec.yaml.
// They're included via at least
// _fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart
"pkg/meta/lib/meta.dart",
"pkg/meta/lib/meta_meta.dart",
};

Set<String> allowlistedThirdPartyPackages = {
Set<String> allowedPackages = {
"front_end",
"kernel",
"_fe_analyzer_shared",
"package_config",
"macros",
"_macros",
// package:front_end imports package:yaml for the 'dynamic modules'
// experiment.
"yaml",
// package:yaml dependencies
"core/pkgs/collection",
"core/pkgs/path",
// package:yaml uses package:source_span, package:string_scanner and
// package:collection.
"source_span",
"string_scanner",
"collection",
// package:source_span imports package:path.
"path",
// package:source_span imports package:term_glyph.
"term_glyph",
};

List<String> allowedRelativePaths = [
// For VmTarget for macros.
"pkg/vm/lib/modular/",
// Platform.
"sdk/lib/",
];

/// Returns true on no errors and false if errors was found.
Future<bool> main() async {
Ticker ticker = new Ticker(isVerbose: false);
Expand All @@ -80,9 +89,21 @@ Future<bool> main() async {
}
}

LoadedLibraries? loadedLibraries;
Map<Uri, Uri> fileUriToImportUri = {};
List<String> allowedUriPrefixes = [
for (String relativePath in allowedRelativePaths)
repoDir.resolve(relativePath).toString()
];

List<Uri> result = await CompilerContext.runWithOptions<List<Uri>>(options,
(CompilerContext c) async {
UriTranslator uriTranslator = await c.options.getUriTranslator();
for (Package package in uriTranslator.packages.packages) {
if (allowedPackages.contains(package.name)) {
allowedUriPrefixes.add(package.packageUriRoot.toString());
}
}
DillTarget dillTarget =
new DillTarget(c, ticker, uriTranslator, c.options.target);
KernelTarget kernelTarget =
Expand All @@ -98,32 +119,27 @@ Future<bool> main() async {
kernelTarget.setEntryPoints(c.options.inputs);
dillTarget.buildOutlines();
await kernelTarget.loader.buildOutlines();

{
List<CompilationUnit> compilationUnits =
kernelTarget.loader.compilationUnits.toList(growable: false);
List<CompilationUnit> rootCompilationUnits = [];
Set<Uri> inputs = new Set.of(options.inputs);
for (CompilationUnit unit in compilationUnits) {
fileUriToImportUri[unit.fileUri] = unit.importUri;
if (inputs.contains(unit.fileUri) || inputs.contains(unit.importUri)) {
rootCompilationUnits.add(unit);
}
}
loadedLibraries =
new LoadedLibrariesImpl(rootCompilationUnits, compilationUnits);
}

return new List<Uri>.from(tracker.dependencies);
});

Set<Uri> otherDartUris = new Set<Uri>();
Set<Uri> otherNonDartUris = new Set<Uri>();
List<String> allowedRelativePaths = [
// Front-end.
"pkg/kernel/",
"pkg/_fe_analyzer_shared/",
// For VmTarget for macros.
"pkg/vm/lib/modular/",
// Platform.
"sdk/lib/",
"runtime/lib/",
"runtime/bin/",
// Macros.
"pkg/macros",
"pkg/_macros",
for (String package in allowlistedThirdPartyPackages)
"third_party/pkg/$package/",
];
List<String> allowedUriPrefixes = [
frontendLibUri.toString(),
for (String relativePath in allowedRelativePaths)
repoDir.resolve(relativePath).toString()
];
for (Uri uri in result) {
final String uriAsString = uri.toString();
bool allowed = false;
Expand All @@ -145,7 +161,6 @@ Future<bool> main() async {
// Remove allow-listed non-dart files.
otherNonDartUris.remove(packageConfigUri);
otherNonDartUris.remove(repoDir.resolve("sdk/lib/libraries.json"));
otherNonDartUris.remove(repoDir.resolve(".dart_tool/package_config.json"));

// Remove allow-listed dart files.
for (String s in allowlistedExternalDartFiles) {
Expand All @@ -160,6 +175,17 @@ Future<bool> main() async {
}
for (Uri uri in otherDartUris) {
print(" - $uri");
if (loadedLibraries != null) {
Uri? importUri = fileUriToImportUri[uri];
if (importUri != null) {
Set<String> importChains = (computeImportChainsFor(
Uri.parse("<entry>"), loadedLibraries!, importUri,
verbose: false));
for (String s in importChains) {
print(" => $s");
}
}
}
}
exitCode = 1;
return false;
Expand Down
2 changes: 1 addition & 1 deletion tools/VERSION
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,5 @@ CHANNEL dev
MAJOR 3
MINOR 7
PATCH 0
PRERELEASE 254
PRERELEASE 255
PRERELEASE_PATCH 0

0 comments on commit 4bfbad7

Please sign in to comment.