本文整理汇总了C#中AnalysisUnit.Enqueue方法的典型用法代码示例。如果您正苦于以下问题:C# AnalysisUnit.Enqueue方法的具体用法?C# AnalysisUnit.Enqueue怎么用?C# AnalysisUnit.Enqueue使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类AnalysisUnit
的用法示例。
在下文中一共展示了AnalysisUnit.Enqueue方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Parse
private void Parse(bool enqueueOnly, CancellationToken cancel)
{
PythonAst tree;
IAnalysisCookie cookie;
GetTreeAndCookie(out tree, out cookie);
if (tree == null) {
return;
}
var oldParent = _myScope.ParentPackage;
if (_filePath != null) {
ProjectState.ModulesByFilename[_filePath] = _myScope;
}
if (oldParent != null) {
// update us in our parent package
oldParent.AddChildPackage(_myScope, _unit);
} else if (_filePath != null) {
// we need to check and see if our parent is a package for the case where we're adding a new
// file but not re-analyzing our parent package.
string parentFilename;
if (ModulePath.IsInitPyFile(_filePath)) {
// subpackage
parentFilename = Path.Combine(Path.GetDirectoryName(Path.GetDirectoryName(_filePath)), "__init__.py");
} else {
// just a module
parentFilename = Path.Combine(Path.GetDirectoryName(_filePath), "__init__.py");
}
ModuleInfo parentPackage;
if (ProjectState.ModulesByFilename.TryGetValue(parentFilename, out parentPackage)) {
parentPackage.AddChildPackage(_myScope, _unit);
}
}
_unit = new AnalysisUnit(tree, _myScope.Scope);
AnalysisLog.NewUnit(_unit);
foreach (var value in MyScope.Scope.AllVariables) {
value.Value.EnqueueDependents();
}
MyScope.Scope.Children.Clear();
MyScope.Scope.ClearNodeScopes();
MyScope.Scope.ClearNodeValues();
MyScope.ClearUnresolvedModules();
// collect top-level definitions first
var walker = new OverviewWalker(this, _unit, tree);
tree.Walk(walker);
_myScope.Specialize();
// It may be that we have analyzed some child packages of this package already, but because it wasn't analyzed,
// the children were not registered. To handle this possibility, scan analyzed packages for children of this
// package (checked by module name first, then sanity-checked by path), and register any that match.
if (ModulePath.IsInitPyFile(_filePath)) {
string pathPrefix = Path.GetDirectoryName(_filePath) + "\\";
var children =
from pair in _projectState.ModulesByFilename
// Is the candidate child package in a subdirectory of our package?
let fileName = pair.Key
where fileName.StartsWith(pathPrefix)
let moduleName = pair.Value.Name
// Is the full name of the candidate child package qualified with the name of our package?
let lastDot = moduleName.LastIndexOf('.')
where lastDot > 0
let parentModuleName = moduleName.Substring(0, lastDot)
where parentModuleName == _myScope.Name
select pair.Value;
foreach (var child in children) {
_myScope.AddChildPackage(child, _unit);
}
}
_unit.Enqueue();
if (!enqueueOnly) {
_projectState.AnalyzeQueuedEntries(cancel);
}
// publish the analysis now that it's complete/running
_currentAnalysis = new ModuleAnalysis(
_unit,
((ModuleScope)_unit.Scope).CloneForPublish()
);
}