| Index: pkg/analyzer/lib/src/codegen/tools.dart
|
| diff --git a/pkg/analyzer/lib/src/codegen/tools.dart b/pkg/analyzer/lib/src/codegen/tools.dart
|
| index da7181287fb0fd7f616199672d78a3e01680cd82..ff53db630540eb544030497dcdba56ec61e99d11 100644
|
| --- a/pkg/analyzer/lib/src/codegen/tools.dart
|
| +++ b/pkg/analyzer/lib/src/codegen/tools.dart
|
| @@ -7,12 +7,9 @@
|
| */
|
| library analyzer.src.codegen.tools;
|
|
|
| -import 'dart:io';
|
| -
|
| import 'package:analyzer/src/codegen/html.dart';
|
| import 'package:analyzer/src/codegen/text_formatter.dart';
|
| import 'package:html/dom.dart' as dom;
|
| -import 'package:path/path.dart';
|
|
|
| final RegExp trailingSpacesInLineRegExp = new RegExp(r' +$', multiLine: true);
|
| final RegExp trailingWhitespaceRegExp = new RegExp(r'[\n ]+$');
|
| @@ -41,19 +38,6 @@ String capitalize(String string) {
|
| }
|
|
|
| /**
|
| - * Type of functions used to compute the contents of a set of generated files.
|
| - * [pkgPath] is the path to the current package.
|
| - */
|
| -typedef Map<String, FileContentsComputer> DirectoryContentsComputer(
|
| - String pkgPath);
|
| -
|
| -/**
|
| - * Type of functions used to compute the contents of a generated file.
|
| - * [pkgPath] is the path to the current package.
|
| - */
|
| -typedef String FileContentsComputer(String pkgPath);
|
| -
|
| -/**
|
| * Mixin class for generating code.
|
| */
|
| class CodeGenerator {
|
| @@ -266,207 +250,6 @@ class CodeGeneratorSettings {
|
| }
|
|
|
| /**
|
| - * Abstract base class representing behaviors common to generated files and
|
| - * generated directories.
|
| - */
|
| -abstract class GeneratedContent {
|
| - /**
|
| - * Check whether the [output] has the correct contents, and return true if it
|
| - * does. [pkgPath] is the path to the current package.
|
| - */
|
| - bool check(String pkgPath);
|
| -
|
| - /**
|
| - * Replace the [output] with the correct contents. [pkgPath] is the path to
|
| - * the current package.
|
| - */
|
| - void generate(String pkgPath);
|
| -
|
| - /**
|
| - * Get a [FileSystemEntity] representing the output file or directory.
|
| - * [pkgPath] is the path to the current package.
|
| - */
|
| - FileSystemEntity output(String pkgPath);
|
| -
|
| - /**
|
| - * Check that all of the [targets] are up to date. If they are not, print
|
| - * out a message instructing the user to regenerate them, and exit with a
|
| - * nonzero error code.
|
| - *
|
| - * [pkgPath] is the path to the current package. [generatorRelPath] is the
|
| - * path to a .dart script the user may use to regenerate the targets.
|
| - *
|
| - * To avoid mistakes when run on Windows, [generatorRelPath] always uses
|
| - * POSIX directory separators.
|
| - */
|
| - static void checkAll(String pkgPath, String generatorRelPath,
|
| - Iterable<GeneratedContent> targets) {
|
| - bool generateNeeded = false;
|
| - for (GeneratedContent target in targets) {
|
| - if (!target.check(pkgPath)) {
|
| - print(
|
| - '${target.output(pkgPath).absolute} does not have expected contents.');
|
| - generateNeeded = true;
|
| - }
|
| - }
|
| - if (generateNeeded) {
|
| - print('Please regenerate using:');
|
| - String executable = Platform.executable;
|
| - String packageRoot = '';
|
| - if (Platform.packageRoot != null) {
|
| - packageRoot = ' --package-root=${Platform.packageRoot}';
|
| - }
|
| - String generateScript =
|
| - join(pkgPath, joinAll(posix.split(generatorRelPath)));
|
| - print(' $executable$packageRoot $generateScript');
|
| - exit(1);
|
| - } else {
|
| - print('All generated files up to date.');
|
| - }
|
| - }
|
| -
|
| - /**
|
| - * Regenerate all of the [targets]. [pkgPath] is the path to the current
|
| - * package.
|
| - */
|
| - static void generateAll(String pkgPath, Iterable<GeneratedContent> targets) {
|
| - for (GeneratedContent target in targets) {
|
| - target.generate(pkgPath);
|
| - }
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * Class representing a single output directory (either generated code or
|
| - * generated HTML). No other content should exist in the directory.
|
| - */
|
| -class GeneratedDirectory extends GeneratedContent {
|
| - /**
|
| - * The path to the directory that will have the generated content.
|
| - */
|
| - final String outputDirPath;
|
| -
|
| - /**
|
| - * Callback function that computes the directory contents.
|
| - */
|
| - final DirectoryContentsComputer directoryContentsComputer;
|
| -
|
| - GeneratedDirectory(this.outputDirPath, this.directoryContentsComputer);
|
| -
|
| - @override
|
| - bool check(String pkgPath) {
|
| - Directory outputDirectory = output(pkgPath);
|
| - Map<String, FileContentsComputer> map = directoryContentsComputer(pkgPath);
|
| - try {
|
| - for (String file in map.keys) {
|
| - FileContentsComputer fileContentsComputer = map[file];
|
| - String expectedContents = fileContentsComputer(pkgPath);
|
| - File outputFile = new File(posix.join(outputDirectory.path, file));
|
| - String actualContents = outputFile.readAsStringSync();
|
| - // Normalize Windows line endings to Unix line endings so that the
|
| - // comparison doesn't fail on Windows.
|
| - actualContents = actualContents.replaceAll('\r\n', '\n');
|
| - if (expectedContents != actualContents) {
|
| - return false;
|
| - }
|
| - }
|
| - int nonHiddenFileCount = 0;
|
| - outputDirectory
|
| - .listSync(recursive: false, followLinks: false)
|
| - .forEach((FileSystemEntity fileSystemEntity) {
|
| - if (fileSystemEntity is File &&
|
| - !basename(fileSystemEntity.path).startsWith('.')) {
|
| - nonHiddenFileCount++;
|
| - }
|
| - });
|
| - if (nonHiddenFileCount != map.length) {
|
| - // The number of files generated doesn't match the number we expected to
|
| - // generate.
|
| - return false;
|
| - }
|
| - } catch (e) {
|
| - // There was a problem reading the file (most likely because it didn't
|
| - // exist). Treat that the same as if the file doesn't have the expected
|
| - // contents.
|
| - return false;
|
| - }
|
| - return true;
|
| - }
|
| -
|
| - @override
|
| - void generate(String pkgPath) {
|
| - Directory outputDirectory = output(pkgPath);
|
| - try {
|
| - // delete the contents of the directory (and the directory itself)
|
| - outputDirectory.deleteSync(recursive: true);
|
| - } catch (e) {
|
| - // Error caught while trying to delete the directory, this can happen if
|
| - // it didn't yet exist.
|
| - }
|
| - // re-create the empty directory
|
| - outputDirectory.createSync(recursive: true);
|
| -
|
| - // generate all of the files in the directory
|
| - Map<String, FileContentsComputer> map = directoryContentsComputer(pkgPath);
|
| - map.forEach((String file, FileContentsComputer fileContentsComputer) {
|
| - File outputFile = new File(posix.join(outputDirectory.path, file));
|
| - outputFile.writeAsStringSync(fileContentsComputer(pkgPath));
|
| - });
|
| - }
|
| -
|
| - @override
|
| - Directory output(String pkgPath) =>
|
| - new Directory(join(pkgPath, joinAll(posix.split(outputDirPath))));
|
| -}
|
| -
|
| -/**
|
| - * Class representing a single output file (either generated code or generated
|
| - * HTML).
|
| - */
|
| -class GeneratedFile extends GeneratedContent {
|
| - /**
|
| - * The output file to which generated output should be written, relative to
|
| - * the "tool/spec" directory. This filename uses the posix path separator
|
| - * ('/') regardless of the OS.
|
| - */
|
| - final String outputPath;
|
| -
|
| - /**
|
| - * Callback function which computes the file.
|
| - */
|
| - final FileContentsComputer computeContents;
|
| -
|
| - GeneratedFile(this.outputPath, this.computeContents);
|
| -
|
| - @override
|
| - bool check(String pkgPath) {
|
| - File outputFile = output(pkgPath);
|
| - String expectedContents = computeContents(pkgPath);
|
| - try {
|
| - String actualContents = outputFile.readAsStringSync();
|
| - // Normalize Windows line endings to Unix line endings so that the
|
| - // comparison doesn't fail on Windows.
|
| - actualContents = actualContents.replaceAll('\r\n', '\n');
|
| - return expectedContents == actualContents;
|
| - } catch (e) {
|
| - // There was a problem reading the file (most likely because it didn't
|
| - // exist). Treat that the same as if the file doesn't have the expected
|
| - // contents.
|
| - return false;
|
| - }
|
| - }
|
| -
|
| - @override
|
| - void generate(String pkgPath) {
|
| - output(pkgPath).writeAsStringSync(computeContents(pkgPath));
|
| - }
|
| -
|
| - @override
|
| - File output(String pkgPath) =>
|
| - new File(join(pkgPath, joinAll(posix.split(outputPath))));
|
| -}
|
| -
|
| -/**
|
| * Mixin class for generating HTML representations of code that are suitable
|
| * for enclosing inside a <pre> element.
|
| */
|
|
|