3b2144fa93
Change-Id: Ia61d582fb6dd647b8fcab051b57ff08682076d9d Cq-Include-Trybots: luci.dart.try:vm-kernel-optcounter-threshold-linux-release-x64-try, vm-kernel-precomp-linux-debug-x64-try, vm-kernel-precomp-linux-release-simarm-try, vm-kernel-precomp-linux-release-simarm64-try, vm-kernel-precomp-linux-release-x64-try, vm-kernel-precomp-mac-release-simarm64-try, vm-kernel-precomp-win-release-x64-try, vm-kernel-precomp-obfuscate-linux-release-x64-try Reviewed-on: https://dart-review.googlesource.com/c/93225 Commit-Queue: Samir Jindel <sjindel@google.com> Reviewed-by: Alexander Markov <alexmarkov@google.com>
67 lines
2.0 KiB
Dart
67 lines
2.0 KiB
Dart
// Copyright (c) 2018, 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 vm.transformations.obfuscation_prohibitions_annotator;
|
|
|
|
import 'package:kernel/ast.dart';
|
|
import 'package:kernel/core_types.dart' show CoreTypes;
|
|
|
|
import '../metadata/obfuscation_prohibitions.dart';
|
|
import 'pragma.dart';
|
|
|
|
void transformComponent(Component component, CoreTypes coreTypes) {
|
|
final repo = new ObfuscationProhibitionsMetadataRepository();
|
|
component.addMetadataRepository(repo);
|
|
final visitor =
|
|
ObfuscationProhibitionsVisitor(ConstantPragmaAnnotationParser(coreTypes));
|
|
visitor.visitComponent(component);
|
|
repo.mapping[component] = visitor.metadata;
|
|
}
|
|
|
|
class ObfuscationProhibitionsVisitor extends RecursiveVisitor {
|
|
final PragmaAnnotationParser parser;
|
|
final metadata = ObfuscationProhibitionsMetadata();
|
|
|
|
ObfuscationProhibitionsVisitor(this.parser);
|
|
|
|
void _addIfEntryPoint(
|
|
List<Expression> annotations, String name, TreeNode node) {
|
|
for (var ann in annotations) {
|
|
ParsedPragma pragma = parser.parsePragma(ann);
|
|
if (pragma is ParsedEntryPointPragma) {
|
|
metadata.protectedNames.add(name);
|
|
if (node is Field) {
|
|
metadata.protectedNames.add(name + "=");
|
|
}
|
|
final parent = node.parent;
|
|
if (parent is Class) {
|
|
metadata.protectedNames.add(parent.name);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
@override
|
|
visitClass(Class klass) {
|
|
_addIfEntryPoint(klass.annotations, klass.name, klass);
|
|
klass.visitChildren(this);
|
|
}
|
|
|
|
@override
|
|
visitConstructor(Constructor ctor) {
|
|
_addIfEntryPoint(ctor.annotations, ctor.name.name, ctor);
|
|
}
|
|
|
|
@override
|
|
visitProcedure(Procedure proc) {
|
|
_addIfEntryPoint(proc.annotations, proc.name.name, proc);
|
|
}
|
|
|
|
@override
|
|
visitField(Field field) {
|
|
_addIfEntryPoint(field.annotations, field.name.name, field);
|
|
}
|
|
}
|