Refresh master with initial release/0.24 snapshot (#332)

* Initial port of release/0.24 source code

* Fix additional headers

* Fix a typo in launch.json
This commit is contained in:
Karl Burtram
2017-12-15 15:38:57 -08:00
committed by GitHub
parent 271b3a0b82
commit 6ad0df0e3e
7118 changed files with 107999 additions and 56466 deletions

View File

@@ -18,8 +18,10 @@ import { MainContext, MainThreadExtensionServiceShape, IWorkspaceData, IEnvironm
import { IExtensionMemento, ExtensionsActivator, ActivatedExtension, IExtensionAPI, IExtensionContext, EmptyExtension, IExtensionModule, ExtensionActivationTimesBuilder, ExtensionActivationTimes } from 'vs/workbench/api/node/extHostExtensionActivator';
import { Barrier } from 'vs/workbench/services/extensions/node/barrier';
import { ExtHostThreadService } from 'vs/workbench/services/thread/node/extHostThreadService';
import { ExtHostConfiguration } from 'vs/workbench/api/node/extHostConfiguration';
import { ExtHostWorkspace } from 'vs/workbench/api/node/extHostWorkspace';
import { realpath } from 'fs';
import { TrieMap } from 'vs/base/common/map';
import { TernarySearchTree } from 'vs/base/common/map';
class ExtensionMemento implements IExtensionMemento {
@@ -117,11 +119,15 @@ export class ExtHostExtensionService implements ExtHostExtensionServiceShape {
private readonly _storagePath: ExtensionStoragePath;
private readonly _proxy: MainThreadExtensionServiceShape;
private _activator: ExtensionsActivator;
private _extensionPathIndex: TPromise<TrieMap<IExtensionDescription>>;
private _extensionPathIndex: TPromise<TernarySearchTree<IExtensionDescription>>;
/**
* This class is constructed manually because it is a service, so it doesn't use any ctor injection
*/
constructor(initData: IInitData, threadService: ExtHostThreadService) {
constructor(initData: IInitData,
threadService: ExtHostThreadService,
extHostWorkspace: ExtHostWorkspace,
extHostConfiguration: ExtHostConfiguration
) {
this._barrier = new Barrier();
this._registry = new ExtensionDescriptionRegistry(initData.extensions);
this._threadService = threadService;
@@ -132,7 +138,7 @@ export class ExtHostExtensionService implements ExtHostExtensionServiceShape {
this._activator = null;
// initialize API first (i.e. do not release barrier until the API is initialized)
const apiFactory = createApiFactory(initData, threadService, this);
const apiFactory = createApiFactory(initData, threadService, extHostWorkspace, extHostConfiguration, this);
initializeExtensionApi(this, apiFactory).then(() => {
@@ -205,9 +211,9 @@ export class ExtHostExtensionService implements ExtHostExtensionServiceShape {
}
// create trie to enable fast 'filename -> extension id' look up
public getExtensionPathIndex(): TPromise<TrieMap<IExtensionDescription>> {
public getExtensionPathIndex(): TPromise<TernarySearchTree<IExtensionDescription>> {
if (!this._extensionPathIndex) {
const trie = new TrieMap<IExtensionDescription>();
const tree = TernarySearchTree.forPaths<IExtensionDescription>();
const extensions = this.getAllExtensionDescriptions().map(ext => {
if (!ext.main) {
return undefined;
@@ -217,13 +223,13 @@ export class ExtHostExtensionService implements ExtHostExtensionServiceShape {
if (err) {
reject(err);
} else {
trie.insert(path, ext);
tree.set(path, ext);
resolve(void 0);
}
});
});
});
this._extensionPathIndex = TPromise.join(extensions).then(() => trie);
this._extensionPathIndex = TPromise.join(extensions).then(() => tree);
}
return this._extensionPathIndex;
}
@@ -282,6 +288,13 @@ export class ExtHostExtensionService implements ExtHostExtensionServiceShape {
private _doActivateExtension(extensionDescription: IExtensionDescription, startup: boolean): TPromise<ActivatedExtension> {
let event = getTelemetryActivationEvent(extensionDescription);
/* __GDPR__
"activatePlugin" : {
"${include}": [
"${TelemetryActivationEvent}"
]
}
*/
this._mainThreadTelemetry.$publicLog('activatePlugin', event);
if (!extensionDescription.main) {
// Treat the extension as being empty => NOT AN ERROR CASE
@@ -343,7 +356,7 @@ export class ExtHostExtensionService implements ExtHostExtensionServiceShape {
if (typeof extensionModule.activate === 'function') {
try {
activationTimesBuilder.activateCallStart();
const activateResult = extensionModule.activate.apply(global, [context]);
const activateResult: TPromise<IExtensionAPI> = extensionModule.activate.apply(global, [context]);
activationTimesBuilder.activateCallStop();
activationTimesBuilder.activateResolveStart();
@@ -381,6 +394,21 @@ function loadCommonJSModule<T>(modulePath: string, activationTimesBuilder: Exten
}
function getTelemetryActivationEvent(extensionDescription: IExtensionDescription): any {
/* __GDPR__FRAGMENT__
"TelemetryActivationEvent" : {
"id": { "classification": "PublicNonPersonalData", "purpose": "FeatureInsight" },
"name": { "classification": "PublicNonPersonalData", "purpose": "FeatureInsight" },
"publisherDisplayName": { "classification": "PublicNonPersonalData", "purpose": "FeatureInsight" },
"activationEvents": { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"isBuiltin": { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"${wildcard}": [
{
"${prefix}": "contribution.",
"${classification}": { "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
]
}
*/
let event = {
id: extensionDescription.id,
name: extensionDescription.name,