refactor(ivy): move and rename `Analyzer` to `DecorationAnalyzer` (#26082)

This is in preparation for adding in other kinds of Analyzer.

PR Close #26082
This commit is contained in:
Pete Bacon Darwin 2018-09-26 20:53:45 +01:00 committed by Miško Hevery
parent 64c96186da
commit 880c0add56
8 changed files with 40 additions and 37 deletions

View File

@ -9,13 +9,13 @@ import {ConstantPool} from '@angular/compiler';
import * as fs from 'fs';
import * as ts from 'typescript';
import {BaseDefDecoratorHandler, ComponentDecoratorHandler, DirectiveDecoratorHandler, InjectableDecoratorHandler, NgModuleDecoratorHandler, PipeDecoratorHandler, ResourceLoader, SelectorScopeRegistry} from '../../ngtsc/annotations';
import {CompileResult, DecoratorHandler} from '../../ngtsc/transform';
import {BaseDefDecoratorHandler, ComponentDecoratorHandler, DirectiveDecoratorHandler, InjectableDecoratorHandler, NgModuleDecoratorHandler, PipeDecoratorHandler, ResourceLoader, SelectorScopeRegistry} from '../../../ngtsc/annotations';
import {CompileResult, DecoratorHandler} from '../../../ngtsc/transform';
import {DecoratedClass} from './host/decorated_class';
import {DecoratedFile} from './host/decorated_file';
import {NgccReflectionHost} from './host/ngcc_host';
import {isDefined} from './utils';
import {DecoratedClass} from '../host/decorated_class';
import {DecoratedFile} from '../host/decorated_file';
import {NgccReflectionHost} from '../host/ngcc_host';
import {isDefined} from '../utils';
export interface AnalyzedClass<A = any, M = any> extends DecoratedClass {
handler: DecoratorHandler<A, M>;
@ -24,7 +24,7 @@ export interface AnalyzedClass<A = any, M = any> extends DecoratedClass {
compilation: CompileResult[];
}
export interface AnalyzedFile {
export interface DecorationAnalysis {
analyzedClasses: AnalyzedClass[];
sourceFile: ts.SourceFile;
constantPool: ConstantPool;
@ -42,7 +42,10 @@ export class FileResourceLoader implements ResourceLoader {
load(url: string): string { return fs.readFileSync(url, 'utf8'); }
}
export class Analyzer {
/**
* This Analyzer will analyze the files that have decorated classes that need to be transformed.
*/
export class DecorationAnalyzer {
resourceLoader = new FileResourceLoader();
scopeRegistry = new SelectorScopeRegistry(this.typeChecker, this.host);
handlers: DecoratorHandler<any, any>[] = [
@ -65,7 +68,7 @@ export class Analyzer {
* should be converted to use ivy definitions.
* @param file The file to be analysed for decorated classes.
*/
analyzeFile(file: DecoratedFile): AnalyzedFile {
analyzeFile(file: DecoratedFile): DecorationAnalysis {
const constantPool = new ConstantPool();
const analyzedClasses =
file.decoratedClasses.map(clazz => this.analyzeClass(constantPool, clazz))

View File

@ -11,7 +11,7 @@ import {mkdir, mv} from 'shelljs';
import * as ts from 'typescript';
import {DtsFileTransformer} from '../../../ngtsc/transform';
import {AnalyzedFile, Analyzer} from '../analyzer';
import {DecorationAnalysis, DecorationAnalyzer} from '../analysis/decoration_analyzer';
import {IMPORT_PREFIX} from '../constants';
import {DtsMapper} from '../host/dts_mapper';
import {Esm2015ReflectionHost} from '../host/esm2015_host';
@ -77,7 +77,7 @@ export class Transformer {
const reflectionHost = this.getHost(isCore, format, packageProgram, dtsMapper);
const r3SymbolsFile = r3SymbolsPath && packageProgram.getSourceFile(r3SymbolsPath) || null;
const analyzer = new Analyzer(typeChecker, reflectionHost, rootDirs, isCore);
const analyzer = new DecorationAnalyzer(typeChecker, reflectionHost, rootDirs, isCore);
const renderer =
this.getRenderer(format, packageProgram, reflectionHost, isCore, r3SymbolsFile);
@ -147,7 +147,7 @@ export class Transformer {
}
transformDtsFiles(
analyzedFiles: AnalyzedFile[], sourceNodeModules: string, targetNodeModules: string,
analyzedFiles: DecorationAnalysis[], sourceNodeModules: string, targetNodeModules: string,
dtsMapper: DtsMapper): FileInfo[] {
const outputFiles: FileInfo[] = [];
@ -177,7 +177,7 @@ export class Transformer {
}
transformSourceFiles(
analyzedFiles: AnalyzedFile[], sourceNodeModules: string, targetNodeModules: string,
analyzedFiles: DecorationAnalysis[], sourceNodeModules: string, targetNodeModules: string,
renderer: Renderer): FileInfo[] {
const outputFiles: FileInfo[] = [];

View File

@ -8,7 +8,7 @@
import * as ts from 'typescript';
import MagicString from 'magic-string';
import {POST_NGCC_MARKER, PRE_NGCC_MARKER} from '../host/ngcc_host';
import {AnalyzedClass} from '../analyzer';
import {AnalyzedClass} from '../analysis/decoration_analyzer';
import {Renderer} from './renderer';
export class Esm2015Renderer extends Renderer {

View File

@ -15,10 +15,10 @@ import * as ts from 'typescript';
import {Decorator} from '../../../ngtsc/host';
import {translateStatement} from '../../../ngtsc/translator';
import {NgccImportManager} from './ngcc_import_manager';
import {AnalyzedClass, AnalyzedFile} from '../analyzer';
import {AnalyzedClass, DecorationAnalysis} from '../analysis/decoration_analyzer';
import {IMPORT_PREFIX} from '../constants';
import {NgccReflectionHost} from '../host/ngcc_host';
import {NgccImportManager} from './ngcc_import_manager';
interface SourceMapInfo {
source: string;
@ -33,7 +33,7 @@ export interface RenderResult {
/**
* The file that has been rendered.
*/
file: AnalyzedFile;
file: DecorationAnalysis;
/**
* The rendered source file.
*/
@ -74,7 +74,7 @@ export abstract class Renderer {
* @param file The analyzed file to render.
* @param targetPath The absolute path where the rendered file will be written.
*/
renderFile(file: AnalyzedFile, targetPath: string): RenderResult {
renderFile(file: DecorationAnalysis, targetPath: string): RenderResult {
const importManager =
new NgccImportManager(!this.rewriteCoreImportsTo, this.isCore, IMPORT_PREFIX);
const input = this.extractSourceMap(file.sourceFile);
@ -180,7 +180,7 @@ export abstract class Renderer {
* with an appropriate source-map comment pointing to the merged source-map.
*/
protected renderSourceAndMap(
file: AnalyzedFile, input: SourceMapInfo, output: MagicString,
file: DecorationAnalysis, input: SourceMapInfo, output: MagicString,
outputPath: string): RenderResult {
const outputMapPath = `${outputPath}.map`;
const outputMap = output.generateMap({

View File

@ -7,14 +7,14 @@
*/
import * as ts from 'typescript';
import {Decorator} from '../../ngtsc/host';
import {DecoratorHandler} from '../../ngtsc/transform';
import {AnalyzedFile, Analyzer} from '../src/analyzer';
import {DecoratedClass} from '../src/host/decorated_class';
import {DecoratedFile} from '../src/host/decorated_file';
import {Fesm2015ReflectionHost} from '../src/host/fesm2015_host';
import {Decorator} from '../../../ngtsc/host';
import {DecoratorHandler} from '../../../ngtsc/transform';
import {DecorationAnalysis, DecorationAnalyzer} from '../../src/analysis/decoration_analyzer';
import {DecoratedClass} from '../../src/host/decorated_class';
import {DecoratedFile} from '../../src/host/decorated_file';
import {Fesm2015ReflectionHost} from '../../src/host/fesm2015_host';
import {getDeclaration, makeProgram} from './helpers/utils';
import {getDeclaration, makeProgram} from '../helpers/utils';
const TEST_PROGRAM = {
name: 'test.js',
@ -74,16 +74,16 @@ function createParsedFile(program: ts.Program) {
return file;
}
describe('Analyzer', () => {
describe('DecorationAnalyzer', () => {
describe('analyzeFile()', () => {
let program: ts.Program;
let testHandler: jasmine.SpyObj<DecoratorHandler<any, any>>;
let result: AnalyzedFile;
let result: DecorationAnalysis;
beforeEach(() => {
program = makeProgram(TEST_PROGRAM);
const file = createParsedFile(program);
const analyzer = new Analyzer(
const analyzer = new DecorationAnalyzer(
program.getTypeChecker(), new Fesm2015ReflectionHost(false, program.getTypeChecker()),
[''], false);
testHandler = createTestHandler();

View File

@ -8,19 +8,19 @@
import * as ts from 'typescript';
import MagicString from 'magic-string';
import {makeProgram} from '../helpers/utils';
import {Analyzer} from '../../src/analyzer';
import {DecorationAnalyzer} from '../../src/analysis/decoration_analyzer';
import {Fesm2015ReflectionHost} from '../../src/host/fesm2015_host';
import {Esm2015Renderer} from '../../src/rendering/esm2015_renderer';
function setup(file: {name: string, contents: string}) {
const program = makeProgram(file);
const host = new Fesm2015ReflectionHost(false, program.getTypeChecker());
const analyzer = new Analyzer(program.getTypeChecker(), host, [''], false);
const analyzer = new DecorationAnalyzer(program.getTypeChecker(), host, [''], false);
const renderer = new Esm2015Renderer(host, false, null);
return {analyzer, host, program, renderer};
}
function analyze(host: Fesm2015ReflectionHost, analyzer: Analyzer, file: ts.SourceFile) {
function analyze(host: Fesm2015ReflectionHost, analyzer: DecorationAnalyzer, file: ts.SourceFile) {
const decoratedFiles = host.findDecoratedFiles(file);
return Array.from(decoratedFiles.values()).map(file => analyzer.analyzeFile(file))[0];
}

View File

@ -8,19 +8,19 @@
import * as ts from 'typescript';
import MagicString from 'magic-string';
import {makeProgram} from '../helpers/utils';
import {Analyzer} from '../../src/analyzer';
import {DecorationAnalyzer} from '../../src/analysis/decoration_analyzer';
import {Esm5ReflectionHost} from '../../src/host/esm5_host';
import {Esm5Renderer} from '../../src/rendering/esm5_renderer';
function setup(file: {name: string, contents: string}) {
const program = makeProgram(file);
const host = new Esm5ReflectionHost(false, program.getTypeChecker());
const analyzer = new Analyzer(program.getTypeChecker(), host, [''], false);
const analyzer = new DecorationAnalyzer(program.getTypeChecker(), host, [''], false);
const renderer = new Esm5Renderer(host, false, null);
return {analyzer, host, program, renderer};
}
function analyze(host: Esm5ReflectionHost, analyzer: Analyzer, file: ts.SourceFile) {
function analyze(host: Esm5ReflectionHost, analyzer: DecorationAnalyzer, file: ts.SourceFile) {
const decoratedFiles = host.findDecoratedFiles(file);
return Array.from(decoratedFiles.values()).map(file => analyzer.analyzeFile(file))[0];
}

View File

@ -11,7 +11,7 @@ import * as ts from 'typescript';
import MagicString from 'magic-string';
import {fromObject, generateMapFileComment} from 'convert-source-map';
import {makeProgram} from '../helpers/utils';
import {AnalyzedClass, Analyzer} from '../../src/analyzer';
import {AnalyzedClass, DecorationAnalyzer} from '../../src/analysis/decoration_analyzer';
import {Fesm2015ReflectionHost} from '../../src/host/fesm2015_host';
import {Renderer} from '../../src/rendering/renderer';
@ -44,7 +44,7 @@ function createTestRenderer() {
function analyze(file: {name: string, contents: string}) {
const program = makeProgram(file);
const host = new Fesm2015ReflectionHost(false, program.getTypeChecker());
const analyzer = new Analyzer(program.getTypeChecker(), host, [''], false);
const analyzer = new DecorationAnalyzer(program.getTypeChecker(), host, [''], false);
const decoratedFiles = host.findDecoratedFiles(program.getSourceFile(file.name) !);
const analyzedFiles = Array.from(decoratedFiles.values()).map(file => analyzer.analyzeFile(file));