Skip to content

Commit

Permalink
Version 2.12.0-161.0.dev
Browse files Browse the repository at this point in the history
Merge commit 'b606a183cbc7ec3b28c75df69a1e052347f01d8f' into 'dev'
  • Loading branch information
Dart CI committed Dec 17, 2020
2 parents f69dc19 + b606a18 commit d803f40
Show file tree
Hide file tree
Showing 7 changed files with 209 additions and 98 deletions.
23 changes: 18 additions & 5 deletions pkg/analyzer/lib/src/workspace/bazel.dart
Original file line number Diff line number Diff line change
Expand Up @@ -359,6 +359,10 @@ class BazelWorkspace extends Workspace
/// The absolute path to the `bazel-genfiles` folder.
final String genfiles;

/// The cache of packages. The key is the directory path, the value is
/// the corresponding package.
final Map<String, BazelWorkspacePackage> _directoryToPackage = {};

final _bazelCandidateFiles =
StreamController<BazelFileNotification>.broadcast();

Expand Down Expand Up @@ -441,7 +445,14 @@ class BazelWorkspace extends Workspace
@override
WorkspacePackage findPackageFor(String filePath) {
path.Context context = provider.pathContext;
Folder folder = provider.getFolder(context.dirname(filePath));
var directoryPath = context.dirname(filePath);

var cachedPackage = _directoryToPackage[directoryPath];
if (cachedPackage != null) {
return cachedPackage;
}

Folder folder = provider.getFolder(directoryPath);
if (!context.isWithin(root, folder.path)) {
return null;
}
Expand Down Expand Up @@ -471,11 +482,13 @@ class BazelWorkspace extends Workspace
BazelWorkspacePackage packageRootedHere() {
List<String> uriParts = (packageUriResolver as BazelPackageUriResolver)
._restoreUriParts(root, '${folder.path}/lib/__fake__.dart');
if (uriParts == null || uriParts.isEmpty) {
return BazelWorkspacePackage(null, folder.path, this);
} else {
return BazelWorkspacePackage(uriParts[0], folder.path, this);
String packageName;
if (uriParts != null && uriParts.isNotEmpty) {
packageName = uriParts[0];
}
var package = BazelWorkspacePackage(packageName, folder.path, this);
_directoryToPackage[directoryPath] = package;
return package;
}

// In some distributed build environments, BUILD files are not preserved.
Expand Down
61 changes: 51 additions & 10 deletions pkg/compiler/lib/src/elements/entities.dart
Original file line number Diff line number Diff line change
Expand Up @@ -282,21 +282,62 @@ class ParameterStructure {
/// The number of type parameters.
final int typeParameters;

const ParameterStructure(
static const ParameterStructure getter =
ParameterStructure._(0, 0, [], {}, 0);

static const ParameterStructure setter =
ParameterStructure._(1, 1, [], {}, 0);

static const ParameterStructure zeroArguments =
ParameterStructure._(0, 0, [], {}, 0);

static const List<ParameterStructure> _simple = [
ParameterStructure._(0, 0, [], {}, 0),
ParameterStructure._(1, 1, [], {}, 0),
ParameterStructure._(2, 2, [], {}, 0),
ParameterStructure._(3, 3, [], {}, 0),
ParameterStructure._(4, 4, [], {}, 0),
ParameterStructure._(5, 5, [], {}, 0),
];

const ParameterStructure._(
this.requiredPositionalParameters,
this.positionalParameters,
this.namedParameters,
this.requiredNamedParameters,
this.typeParameters);

const ParameterStructure.getter()
: this(0, 0, const <String>[], const <String>{}, 0);
factory ParameterStructure(
int requiredPositionalParameters,
int positionalParameters,
List<String> namedParameters,
Set<String> requiredNamedParameters,
int typeParameters) {
// This simple canonicalization reduces the number of ParameterStructure
// objects by over 90%.
if (requiredPositionalParameters == positionalParameters &&
namedParameters.isEmpty &&
requiredNamedParameters.isEmpty &&
typeParameters == 0 &&
positionalParameters < _simple.length) {
return _simple[positionalParameters];
}

// Force sharing of empty collections.
if (namedParameters.isEmpty) namedParameters = const [];
if (requiredNamedParameters.isEmpty) requiredNamedParameters = const {};

const ParameterStructure.setter()
: this(1, 1, const <String>[], const <String>{}, 0);
return ParameterStructure._(
requiredPositionalParameters,
positionalParameters,
namedParameters,
requiredNamedParameters,
typeParameters,
);
}

factory ParameterStructure.fromType(FunctionType type) {
return new ParameterStructure(
return ParameterStructure(
type.parameterTypes.length,
type.parameterTypes.length + type.optionalParameterTypes.length,
type.namedParameters,
Expand All @@ -314,7 +355,7 @@ class ParameterStructure {
source.readStrings(emptyAsNull: true)?.toSet() ?? const <String>{};
int typeParameters = source.readInt();
source.end(tag);
return new ParameterStructure(
return ParameterStructure(
requiredPositionalParameters,
positionalParameters,
namedParameters,
Expand Down Expand Up @@ -344,7 +385,7 @@ class ParameterStructure {
/// Returns the [CallStructure] corresponding to a call site passing all
/// parameters both required and optional.
CallStructure get callStructure {
return new CallStructure(totalParameters, namedParameters, typeParameters);
return CallStructure(totalParameters, namedParameters, typeParameters);
}

@override
Expand Down Expand Up @@ -382,7 +423,7 @@ class ParameterStructure {

/// Short textual representation use for testing.
String get shortText {
StringBuffer sb = new StringBuffer();
StringBuffer sb = StringBuffer();
if (typeParameters != 0) {
sb.write('<');
sb.write(typeParameters);
Expand All @@ -401,7 +442,7 @@ class ParameterStructure {

@override
String toString() {
StringBuffer sb = new StringBuffer();
StringBuffer sb = StringBuffer();
sb.write('ParameterStructure(');
sb.write('requiredPositionalParameters=$requiredPositionalParameters,');
sb.write('positionalParameters=$positionalParameters,');
Expand Down
16 changes: 5 additions & 11 deletions pkg/compiler/lib/src/js_model/elements.dart
Original file line number Diff line number Diff line change
Expand Up @@ -506,7 +506,7 @@ class JGetter extends JFunction {
JGetter(JLibrary library, JClass enclosingClass, Name name,
AsyncMarker asyncMarker,
{bool isStatic, bool isExternal, this.isAbstract})
: super(library, enclosingClass, name, const ParameterStructure.getter(),
: super(library, enclosingClass, name, ParameterStructure.getter,
asyncMarker,
isStatic: isStatic, isExternal: isExternal);

Expand Down Expand Up @@ -571,7 +571,7 @@ class JSetter extends JFunction {

JSetter(JLibrary library, JClass enclosingClass, Name name,
{bool isStatic, bool isExternal, this.isAbstract})
: super(library, enclosingClass, name, const ParameterStructure.setter(),
: super(library, enclosingClass, name, ParameterStructure.setter,
AsyncMarker.SYNC,
isStatic: isStatic, isExternal: isExternal);

Expand Down Expand Up @@ -733,15 +733,9 @@ class JSignatureMethod extends JMethod {
static const String tag = 'signature-method';

JSignatureMethod(ClassEntity enclosingClass)
: super(
enclosingClass.library,
enclosingClass,
Names.signature,
const ParameterStructure(0, 0, const [], const {}, 0),
AsyncMarker.SYNC,
isStatic: false,
isExternal: false,
isAbstract: false);
: super(enclosingClass.library, enclosingClass, Names.signature,
ParameterStructure.zeroArguments, AsyncMarker.SYNC,
isStatic: false, isExternal: false, isAbstract: false);

factory JSignatureMethod.readFromDataSource(DataSource source) {
source.begin(tag);
Expand Down
2 changes: 1 addition & 1 deletion pkg/compiler/lib/src/kernel/element_map_impl.dart
Original file line number Diff line number Diff line change
Expand Up @@ -853,7 +853,7 @@ class KernelToElementMapImpl implements KernelToElementMap, IrToElementMap {
requiredNamedParameters.add(variable.name);
}
}
return new ParameterStructure(
return ParameterStructure(
requiredPositionalParameters,
positionalParameters,
namedParameters,
Expand Down
4 changes: 2 additions & 2 deletions pkg/compiler/lib/src/kernel/kelements.dart
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ class KGetter extends KFunction {
KGetter(KLibrary library, KClass enclosingClass, Name name,
AsyncMarker asyncMarker,
{bool isStatic, bool isExternal, this.isAbstract})
: super(library, enclosingClass, name, const ParameterStructure.getter(),
: super(library, enclosingClass, name, ParameterStructure.getter,
asyncMarker,
isStatic: isStatic, isExternal: isExternal);

Expand All @@ -219,7 +219,7 @@ class KSetter extends KFunction {

KSetter(KLibrary library, KClass enclosingClass, Name name,
{bool isStatic, bool isExternal, this.isAbstract})
: super(library, enclosingClass, name, const ParameterStructure.setter(),
: super(library, enclosingClass, name, ParameterStructure.setter,
AsyncMarker.SYNC,
isStatic: isStatic, isExternal: isExternal);

Expand Down
Loading

0 comments on commit d803f40

Please sign in to comment.