diff --git a/configs/base.tsconfig.json b/configs/base.tsconfig.json
index 7175a17cf0299..25840e002be94 100644
--- a/configs/base.tsconfig.json
+++ b/configs/base.tsconfig.json
@@ -14,7 +14,7 @@
         "resolveJsonModule": true,
         "module": "commonjs",
         "moduleResolution": "node",
-        "target": "es5",
+        "target": "es6",
         "jsx": "react",
         "lib": [
             "es6",
diff --git a/dev-packages/application-manager/src/generator/webpack-generator.ts b/dev-packages/application-manager/src/generator/webpack-generator.ts
index f10462cf47517..b6f062a32461c 100644
--- a/dev-packages/application-manager/src/generator/webpack-generator.ts
+++ b/dev-packages/application-manager/src/generator/webpack-generator.ts
@@ -195,26 +195,6 @@ module.exports = {
             {
                 test: /\\.plist$/,
                 type: 'asset/resource'
-            },
-            {
-                test: /\\.js$/,
-                // include only es6 dependencies to transpile them to es5 classes
-                include: /vscode-ws-jsonrpc|vscode-jsonrpc|vscode-languageserver-protocol|vscode-languageserver-types/,
-                use: {
-                    loader: 'babel-loader',
-                    options: {
-                        presets: ['@babel/preset-env'],
-                        plugins: [
-                            // reuse runtime babel lib instead of generating it in each js file
-                            '@babel/plugin-transform-runtime',
-                            // ensure that classes are transpiled
-                            '@babel/plugin-transform-classes'
-                        ],
-                        // see https://github.com/babel/babel/issues/8900#issuecomment-431240426
-                        sourceType: 'unambiguous',
-                        cacheDirectory: true
-                    }
-                }
             }
         ]
     },
diff --git a/packages/core/src/browser/navigatable.ts b/packages/core/src/browser/navigatable.ts
index 49efbbadc5c42..9429dc76ee007 100644
--- a/packages/core/src/browser/navigatable.ts
+++ b/packages/core/src/browser/navigatable.ts
@@ -45,14 +45,14 @@ export namespace NavigatableWidget {
         return arg instanceof BaseWidget && Navigatable.is(arg);
     }
     export function* getAffected<T extends Widget>(
-        widgets: IterableIterator<T> | ArrayLike<T>,
+        widgets: Iterable<T>,
         context: MaybeArray<URI>
     ): IterableIterator<[URI, T & NavigatableWidget]> {
         const uris = Array.isArray(context) ? context : [context];
         return get(widgets, resourceUri => uris.some(uri => uri.isEqualOrParent(resourceUri)));
     }
     export function* get<T extends Widget>(
-        widgets: IterableIterator<T> | ArrayLike<T>,
+        widgets: Iterable<T>,
         filter: (resourceUri: URI) => boolean = () => true
     ): IterableIterator<[URI, T & NavigatableWidget]> {
         for (const widget of widgets) {
diff --git a/packages/core/src/browser/saveable.ts b/packages/core/src/browser/saveable.ts
index ad4ca17f276f9..cea603bfaa8f2 100644
--- a/packages/core/src/browser/saveable.ts
+++ b/packages/core/src/browser/saveable.ts
@@ -161,11 +161,11 @@ export namespace SaveableWidget {
     export function is(widget: Widget | undefined): widget is SaveableWidget {
         return !!widget && 'closeWithoutSaving' in widget;
     }
-    export function getDirty<T extends Widget>(widgets: IterableIterator<T> | ArrayLike<T>): IterableIterator<SaveableWidget & T> {
+    export function getDirty<T extends Widget>(widgets: Iterable<T>): IterableIterator<SaveableWidget & T> {
         return get(widgets, Saveable.isDirty);
     }
     export function* get<T extends Widget>(
-        widgets: IterableIterator<T> | ArrayLike<T>,
+        widgets: Iterable<T>,
         filter: (widget: T) => boolean = () => true
     ): IterableIterator<SaveableWidget & T> {
         for (const widget of widgets) {
diff --git a/packages/core/src/browser/tree/tree-widget.tsx b/packages/core/src/browser/tree/tree-widget.tsx
index 085f2a9f6df73..f510b9d73d4bb 100644
--- a/packages/core/src/browser/tree/tree-widget.tsx
+++ b/packages/core/src/browser/tree/tree-widget.tsx
@@ -976,7 +976,7 @@ export class TreeWidget extends ReactWidget implements StatefulWidget {
             decorations.push(node.decorationData);
         }
         if (this.decorations.has(node.id)) {
-            decorations.push(...this.decorations.get(node.id));
+            decorations.push(...this.decorations.get(node.id) || []);
         }
         return decorations.sort(TreeDecoration.Data.comparePriority);
     }
diff --git a/packages/monaco/src/typings/monaco/index.d.ts b/packages/monaco/src/typings/monaco/index.d.ts
index a0f65fe3e9987..938a6798827af 100644
--- a/packages/monaco/src/typings/monaco/index.d.ts
+++ b/packages/monaco/src/typings/monaco/index.d.ts
@@ -525,7 +525,7 @@ declare module monaco.actions {
          * Retrieves all the registered menu items for the given menu.
          * @param menuId - see https://github.com/theia-ide/vscode/blob/standalone/0.20.x/src/vs/platform/actions/common/actions.ts#L67
          */
-        getMenuItems(menuId: 7 /* EditorContext */ | 8 /* EditorContextPeek */ | 25 /* MenubarSelectionMenu */): IMenuItem | ISubmenuItem[];
+        getMenuItems(menuId: 7 /* EditorContext */ | 8 /* EditorContextPeek */ | 25 /* MenubarSelectionMenu */): Iterable<IMenuItem> | Iterable<ISubmenuItem>;
     }
 
     // https://github.com/theia-ide/vscode/blob/standalone/0.20.x/src/vs/platform/actions/common/actions.ts#L51
diff --git a/packages/plugin-ext/src/main/browser/plugin-contribution-handler.ts b/packages/plugin-ext/src/main/browser/plugin-contribution-handler.ts
index d2abed4ee425a..3792190f5593a 100644
--- a/packages/plugin-ext/src/main/browser/plugin-contribution-handler.ts
+++ b/packages/plugin-ext/src/main/browser/plugin-contribution-handler.ts
@@ -299,8 +299,9 @@ export class PluginContributionHandler {
             }
         }
 
-        if (contributions.colors) {
-            pushContribution('colors', () => this.colors.register(...contributions.colors));
+        const colors = contributions.colors;
+        if (colors) {
+            pushContribution('colors', () => this.colors.register(...colors));
         }
 
         if (contributions.taskDefinitions) {
diff --git a/packages/plugin-ext/src/main/browser/view/tree-view-widget.tsx b/packages/plugin-ext/src/main/browser/view/tree-view-widget.tsx
index cfb5468717370..35275ea828201 100644
--- a/packages/plugin-ext/src/main/browser/view/tree-view-widget.tsx
+++ b/packages/plugin-ext/src/main/browser/view/tree-view-widget.tsx
@@ -281,7 +281,7 @@ export class TreeViewWidget extends TreeViewWelcomeWidget {
         });
 
         const children = this.getCaption(node);
-        return React.createElement('div', attrs, ...children);
+        return React.createElement('div', attrs, children);
     }
 
     protected getCaption(node: TreeNode): React.ReactNode {
diff --git a/packages/plugin-ext/src/plugin/command-registry.ts b/packages/plugin-ext/src/plugin/command-registry.ts
index a5e877d93256f..93d283a1762e8 100644
--- a/packages/plugin-ext/src/plugin/command-registry.ts
+++ b/packages/plugin-ext/src/plugin/command-registry.ts
@@ -102,7 +102,7 @@ export class CommandRegistryImpl implements CommandRegistryExt {
             // Using the KnownCommand exclusions, convert the commands manually
             return KnownCommands.map(id, args, (mappedId: string, mappedArgs: any[] | undefined, mappedResult: KnownCommands.ConversionFunction) => {
                 const mr: KnownCommands.ConversionFunction = mappedResult;
-                return this.proxy.$executeCommand(mappedId, ...mappedArgs).then((result: any) => {
+                return this.proxy.$executeCommand(mappedId, ...mappedArgs || []).then((result: any) => {
                     if (!result) {
                         return undefined;
                     }
diff --git a/packages/plugin-ext/src/plugin/types-impl.ts b/packages/plugin-ext/src/plugin/types-impl.ts
index bf66f68c0a84c..92c65d506f466 100644
--- a/packages/plugin-ext/src/plugin/types-impl.ts
+++ b/packages/plugin-ext/src/plugin/types-impl.ts
@@ -33,6 +33,7 @@ import { SymbolKind } from '../common/plugin-api-rpc-model';
 import { FileSystemProviderErrorCode, markAsFileSystemProviderError } from '@theia/filesystem/lib/common/files';
 import * as paths from 'path';
 import { ObjectsTransferrer } from '../common/rpc-protocol';
+import { es5ClassCompat } from '../common/types';
 
 /**
  * A reviver that takes URI's transferred via JSON.stringify() and makes
@@ -114,6 +115,7 @@ export class URI extends CodeURI implements theia.Uri {
     }
 }
 
+@es5ClassCompat
 export class Disposable {
     private disposable: undefined | (() => void);
 
@@ -207,6 +209,7 @@ export enum SourceControlInputBoxValidationType {
     Information = 2
 }
 
+@es5ClassCompat
 export class ColorTheme implements theia.ColorTheme {
     constructor(public readonly kind: ColorThemeKind) { }
 }
@@ -233,6 +236,7 @@ export namespace TextEditorSelectionChangeKind {
     }
 }
 
+@es5ClassCompat
 export class Position {
     private _line: number;
     private _character: number;
@@ -390,6 +394,7 @@ export class Position {
     }
 }
 
+@es5ClassCompat
 export class Range {
     protected _start: Position;
     protected _end: Position;
@@ -521,6 +526,7 @@ export class Range {
 
 }
 
+@es5ClassCompat
 export class Selection extends Range {
     private _anchor: Position;
     private _active: Position;
@@ -572,6 +578,7 @@ export enum EnvironmentVariableMutatorType {
     Prepend = 3
 }
 
+@es5ClassCompat
 export class SnippetString {
 
     static isSnippetString(thing: {}): thing is SnippetString {
@@ -653,11 +660,13 @@ export class SnippetString {
     }
 }
 
+@es5ClassCompat
 export class ThemeColor {
     constructor(public id: string) {
     }
 }
 
+@es5ClassCompat
 export class ThemeIcon {
 
     static readonly File: ThemeIcon = new ThemeIcon('file');
@@ -716,6 +725,7 @@ export enum ConfigurationTarget {
     Memory
 }
 
+@es5ClassCompat
 export class RelativePattern {
 
     base: string;
@@ -746,6 +756,7 @@ export enum IndentAction {
     Outdent = 3
 }
 
+@es5ClassCompat
 export class TextEdit {
 
     protected _range: Range;
@@ -854,6 +865,7 @@ export enum CompletionItemKind {
     TypeParameter = 24
 }
 
+@es5ClassCompat
 export class CompletionItem implements theia.CompletionItem {
 
     label: string;
@@ -876,6 +888,7 @@ export class CompletionItem implements theia.CompletionItem {
     }
 }
 
+@es5ClassCompat
 export class CompletionList {
 
     isIncomplete?: boolean;
@@ -900,16 +913,7 @@ export enum DebugConsoleMode {
     MergeWithParent = 1
 }
 
-export class DiagnosticRelatedInformation {
-    location: Location;
-    message: string;
-
-    constructor(location: Location, message: string) {
-        this.location = location;
-        this.message = message;
-    }
-}
-
+@es5ClassCompat
 export class Location {
     uri: URI;
     range: Range;
@@ -935,6 +939,17 @@ export class Location {
     }
 }
 
+@es5ClassCompat
+export class DiagnosticRelatedInformation {
+    location: Location;
+    message: string;
+
+    constructor(location: Location, message: string) {
+        this.location = location;
+        this.message = message;
+    }
+}
+
 export enum DiagnosticTag {
     Unnecessary = 1,
 }
@@ -943,6 +958,7 @@ export enum CompletionItemTag {
     Deprecated = 1,
 }
 
+@es5ClassCompat
 export class Diagnostic {
     range: Range;
     message: string;
@@ -970,6 +986,7 @@ export enum MarkerTag {
     Unnecessary = 1,
 }
 
+@es5ClassCompat
 export class ParameterInformation {
     label: string | [number, number];
     documentation?: string | MarkdownString;
@@ -980,6 +997,7 @@ export class ParameterInformation {
     }
 }
 
+@es5ClassCompat
 export class SignatureInformation {
     label: string;
     documentation?: string | MarkdownString;
@@ -998,6 +1016,7 @@ export enum SignatureHelpTriggerKind {
     ContentChange = 3,
 }
 
+@es5ClassCompat
 export class SignatureHelp {
     signatures: SignatureInformation[];
     activeSignature: number;
@@ -1008,6 +1027,7 @@ export class SignatureHelp {
     }
 }
 
+@es5ClassCompat
 export class Hover {
 
     public contents: MarkdownString[] | theia.MarkedString[];
@@ -1037,6 +1057,7 @@ export enum DocumentHighlightKind {
     Write = 2
 }
 
+@es5ClassCompat
 export class DocumentHighlight {
 
     public range: Range;
@@ -1053,6 +1074,7 @@ export class DocumentHighlight {
 
 export type Definition = Location | Location[];
 
+@es5ClassCompat
 export class DocumentLink {
 
     range: Range;
@@ -1073,6 +1095,7 @@ export class DocumentLink {
     }
 }
 
+@es5ClassCompat
 export class CodeLens {
 
     range: Range;
@@ -1112,6 +1135,7 @@ export enum CodeActionTriggerKind {
     Automatic = 2,
 }
 
+@es5ClassCompat
 export class CodeActionKind {
     private static readonly sep = '.';
 
@@ -1148,6 +1172,7 @@ export enum TextDocumentSaveReason {
     FocusOut = 3
 }
 
+@es5ClassCompat
 export class CodeAction {
     title: string;
 
@@ -1200,6 +1225,7 @@ export interface FileTextEdit {
     metadata?: WorkspaceEditMetadata;
 }
 
+@es5ClassCompat
 export class WorkspaceEdit implements theia.WorkspaceEdit {
 
     private _edits = new Array<FileOperation | FileTextEdit | undefined>();
@@ -1312,6 +1338,7 @@ export class WorkspaceEdit implements theia.WorkspaceEdit {
     }
 }
 
+@es5ClassCompat
 export class TreeItem {
 
     label?: string | theia.TreeItemLabel;
@@ -1349,6 +1376,7 @@ export enum SymbolTag {
     Deprecated = 1
 }
 
+@es5ClassCompat
 export class SymbolInformation {
 
     static validate(candidate: SymbolInformation): void {
@@ -1393,6 +1421,7 @@ export class SymbolInformation {
     }
 }
 
+@es5ClassCompat
 export class DocumentSymbol {
 
     static validate(candidate: DocumentSymbol): void {
@@ -1437,6 +1466,7 @@ export interface QuickInputButton {
     readonly tooltip?: string | undefined;
 }
 
+@es5ClassCompat
 export class QuickInputButtons {
     static readonly Back: QuickInputButton = {
         iconPath: {
@@ -1483,6 +1513,7 @@ export enum FileChangeType {
     Deleted = 3,
 }
 
+@es5ClassCompat
 export class FileSystemError extends Error {
 
     static FileExists(messageOrUri?: string | URI): FileSystemError {
@@ -1565,6 +1596,7 @@ export class ProgressOptions {
         this.location = location;
     }
 }
+
 export class Progress<T> {
     /**
      * Report a progress update.
@@ -1590,6 +1622,7 @@ export enum ProgressLocation {
     Notification = 15
 }
 
+@es5ClassCompat
 export class ProcessExecution {
     private executionProcess: string;
     private arguments: string[];
@@ -1669,6 +1702,7 @@ export enum TaskRevealKind {
     Never = 3
 }
 
+@es5ClassCompat
 export class ShellExecution {
     private shellCommandLine: string;
     private shellCommand: string | theia.ShellQuotedString;
@@ -1762,6 +1796,7 @@ export class CustomExecution {
     }
 }
 
+@es5ClassCompat
 export class TaskGroup {
     private groupId: string;
 
@@ -1805,6 +1840,7 @@ export enum TaskScope {
     Workspace = 2
 }
 
+@es5ClassCompat
 export class Task {
     private taskDefinition: theia.TaskDefinition;
     private taskScope: theia.TaskScope.Global | theia.TaskScope.Workspace | theia.WorkspaceFolder | undefined;
@@ -1994,6 +2030,7 @@ export class Task2 extends Task {
     detail?: string;
 }
 
+@es5ClassCompat
 export class DebugAdapterExecutable {
     /**
      * The command or path of the debug adapter executable.
@@ -2030,6 +2067,7 @@ export class DebugAdapterExecutable {
 /**
  * Represents a debug adapter running as a socket based server.
  */
+@es5ClassCompat
 export class DebugAdapterServer {
 
     /**
@@ -2064,6 +2102,7 @@ export enum LogLevel {
 /**
  * The base class of all breakpoint types.
  */
+@es5ClassCompat
 export class Breakpoint {
     /**
      * Is breakpoint enabled.
@@ -2105,6 +2144,7 @@ export class Breakpoint {
 /**
  * A breakpoint specified by a source location.
  */
+@es5ClassCompat
 export class SourceBreakpoint extends Breakpoint {
     /**
      * The source and line position of this breakpoint.
@@ -2123,6 +2163,7 @@ export class SourceBreakpoint extends Breakpoint {
 /**
  * A breakpoint specified by a function name.
  */
+@es5ClassCompat
 export class FunctionBreakpoint extends Breakpoint {
     /**
      * The name of the function to which this breakpoint is attached.
@@ -2138,6 +2179,7 @@ export class FunctionBreakpoint extends Breakpoint {
     }
 }
 
+@es5ClassCompat
 export class Color {
     readonly red: number;
     readonly green: number;
@@ -2152,6 +2194,7 @@ export class Color {
     }
 }
 
+@es5ClassCompat
 export class ColorInformation {
     range: Range;
     color: Color;
@@ -2168,6 +2211,7 @@ export class ColorInformation {
     }
 }
 
+@es5ClassCompat
 export class ColorPresentation {
     label: string;
     textEdit?: TextEdit;
@@ -2187,6 +2231,7 @@ export enum ColorFormat {
     HSL = 2
 }
 
+@es5ClassCompat
 export class FoldingRange {
     start: number;
     end: number;
@@ -2205,6 +2250,7 @@ export enum FoldingRangeKind {
     Region = 3
 }
 
+@es5ClassCompat
 export class SelectionRange {
 
     range: Range;
@@ -2310,6 +2356,7 @@ export class CallHierarchyOutgoingCall {
     }
 }
 
+@es5ClassCompat
 export class TimelineItem {
     timestamp: number;
     label: string;
@@ -2340,7 +2387,6 @@ export class SemanticTokensLegend {
 function isStrArrayOrUndefined(arg: any): arg is string[] | undefined {
     return ((typeof arg === 'undefined') || (Array.isArray(arg) && arg.every(e => typeof e === 'string')));
 }
-
 export class SemanticTokensBuilder {
 
     private _prevLine: number;
diff --git a/packages/plugin/src/theia.d.ts b/packages/plugin/src/theia.d.ts
index 61e644b94653c..5d55b6507c058 100644
--- a/packages/plugin/src/theia.d.ts
+++ b/packages/plugin/src/theia.d.ts
@@ -21,6 +21,7 @@
  *  Licensed under the MIT License. See License.txt in the project root for license information.
  *--------------------------------------------------------------------------------------------*/
 import './theia-proposed';
+import { es5ClassCompat } from '../common/types';
 
 /* eslint-disable @typescript-eslint/no-explicit-any */
 /* eslint-disable max-len */
@@ -230,6 +231,7 @@ declare module '@theia/plugin' {
     /**
      * Represents a line and character position.
      */
+
     export class Position {
 
         /**
@@ -340,6 +342,7 @@ declare module '@theia/plugin' {
     /**
      * Pair of two positions.
      */
+
     export class Range {
         /**
          * Start position.
@@ -425,6 +428,7 @@ declare module '@theia/plugin' {
     /**
      * Represents a text selection in an editor.
      */
+
     export class Selection extends Range {
 
         /**
@@ -465,6 +469,7 @@ declare module '@theia/plugin' {
      * A snippet string is a template which allows to insert text
      * and to control the editor cursor when insertion happens.
      */
+
     export class SnippetString {
 
         /**
@@ -719,6 +724,7 @@ declare module '@theia/plugin' {
      * The MarkdownString represents human readable text that supports formatting via the
      * markdown syntax. Standard markdown is supported, also tables, but no embedded html.
      */
+
     export class MarkdownString {
 
         /**
@@ -2583,6 +2589,7 @@ declare module '@theia/plugin' {
      * A reference to one of the workbench colors.
      * Using a theme color is preferred over a custom color as it gives theme authors and users the possibility to change the color.
      */
+
     export class ThemeColor {
         /**
          * Creates a reference to a theme color.
@@ -2594,6 +2601,7 @@ declare module '@theia/plugin' {
      * A reference to a named icon. Currently only [File](#ThemeIcon.File) and [Folder](#ThemeIcon.Folder) are supported.
      * Using a theme icon is preferred over a custom icon as it gives theme authors the possibility to change the icons.
      */
+
     export class ThemeIcon {
         /**
          * Reference to a icon representing a file. The icon is taken from the current file icon theme or a placeholder icon.
@@ -4602,6 +4610,7 @@ declare module '@theia/plugin' {
     /**
      * Represents a color theme.
      */
+
     export interface ColorTheme {
         /**
          * The kind of this color theme: light, dark or high contrast.
@@ -4612,6 +4621,7 @@ declare module '@theia/plugin' {
     /**
      * Predefined buttons for [QuickPick](#QuickPick) and [InputBox](#InputBox).
      */
+
     export class QuickInputButtons {
 
         /**
@@ -5340,6 +5350,7 @@ declare module '@theia/plugin' {
      * This class has factory methods for common error-cases, like `FileNotFound` when
      * a file or folder doesn't exist, use them like so: `throw vscode.FileSystemError.FileNotFound(someUri);`
      */
+
     export class FileSystemError extends Error {
 
         /**
@@ -6181,6 +6192,7 @@ declare module '@theia/plugin' {
      * relatively to a base path. The base path can either be an absolute file path
      * or a [workspace folder](#WorkspaceFolder).
      */
+
     export class RelativePattern {
 
         /**
@@ -6403,6 +6415,7 @@ declare module '@theia/plugin' {
      * Represents a parameter of a callable-signature. A parameter can
      * have a label and a doc-comment.
      */
+
     export class ParameterInformation {
 
         /**
@@ -6432,6 +6445,7 @@ declare module '@theia/plugin' {
      * can have a label, like a function-name, a doc-comment, and
      * a set of parameters.
      */
+
     export class SignatureInformation {
 
         /**
@@ -6465,6 +6479,7 @@ declare module '@theia/plugin' {
      * callable. There can be multiple signatures but only one
      * active and only one active parameter.
      */
+
     export class SignatureHelp {
 
         /**
@@ -6663,6 +6678,7 @@ declare module '@theia/plugin' {
      * Represents information about programming constructs like variables, classes,
      * interfaces etc.
      */
+
     export class SymbolInformation {
 
         /**
@@ -6716,6 +6732,7 @@ declare module '@theia/plugin' {
      * symbols can be hierarchical and they have two ranges: one that encloses its definition and one that points to
      * its most interesting range, e.g. the range of an identifier.
      */
+
     export class DocumentSymbol {
 
         /**
@@ -6783,6 +6800,7 @@ declare module '@theia/plugin' {
     /**
      * Represents a color in RGBA space.
      */
+
     export class Color {
 
         /**
@@ -6819,6 +6837,7 @@ declare module '@theia/plugin' {
     /**
      * Represents a color range from a document.
      */
+
     export class ColorInformation {
 
         /**
@@ -6848,6 +6867,7 @@ declare module '@theia/plugin' {
      * the constant `Red`, the hex-value `#ff0000`, or in rgba and hsla forms. In csharp other representations
      * apply, e.g `System.Drawing.Color.Red`.
      */
+
     export class ColorPresentation {
 
         /**
@@ -6910,6 +6930,7 @@ declare module '@theia/plugin' {
      * A line based folding range. To be valid, start and end line must a zero or larger and smaller than the number of lines in the document.
      * Invalid ranges will be ignored.
      */
+
     export class FoldingRange {
 
         /**
@@ -7020,6 +7041,7 @@ declare module '@theia/plugin' {
      * A text edit represents edits that should be applied
      * to a document.
      */
+
     export class TextEdit {
 
         /**
@@ -7141,6 +7163,7 @@ declare module '@theia/plugin' {
      * @see [CompletionItemProvider.provideCompletionItems](#CompletionItemProvider.provideCompletionItems)
      * @see [CompletionItemProvider.resolveCompletionItem](#CompletionItemProvider.resolveCompletionItem)
      */
+
     export class CompletionItem {
 
         /**
@@ -7274,6 +7297,7 @@ declare module '@theia/plugin' {
      * Represents a collection of [completion items](#CompletionItem) to be presented
      * in the editor.
      */
+
     export class CompletionList<T extends CompletionItem = CompletionItem> {
 
         /**
@@ -7344,6 +7368,7 @@ declare module '@theia/plugin' {
      * Represents a location inside a resource, such as a line
      * inside a text file.
      */
+
     export class Location {
 
         /**
@@ -7450,6 +7475,7 @@ declare module '@theia/plugin' {
      * Represents a diagnostic, such as a compiler error or warning. Diagnostic objects
      * are only valid in the scope of a file.
      */
+
     export class Diagnostic {
 
         /**
@@ -7585,6 +7611,7 @@ declare module '@theia/plugin' {
      * A CodeAction must set either [`edit`](#edit) and/or a [`command`](#command).
      * If both are supplied, the `edit` is applied first, then the command is executed.
      */
+
     export class CodeAction {
 
         /**
@@ -7740,6 +7767,7 @@ declare module '@theia/plugin' {
      * Code action kinds are used by VS Code for UI elements such as the refactoring context menu. Users
      * can also trigger code actions with a specific kind with the `editor.action.codeAction` command.
      */
+
     export class CodeActionKind {
         /**
          * Empty kind.
@@ -7897,6 +7925,7 @@ declare module '@theia/plugin' {
      *
      * Use the [applyEdit](#workspace.applyEdit)-function to apply a workspace edit.
      */
+
     export class WorkspaceEdit {
 
         /**
@@ -8098,6 +8127,7 @@ declare module '@theia/plugin' {
      * A document link is a range in a text document that links to an internal or external resource, like another
      * text document or a web site.
      */
+
     export class DocumentLink {
 
         /**
@@ -8859,6 +8889,7 @@ declare module '@theia/plugin' {
      * A hover represents additional information for a symbol or word. Hovers are
      * rendered in a tooltip-like widget.
      */
+
     export class Hover {
 
         /**
@@ -8928,6 +8959,7 @@ declare module '@theia/plugin' {
      * special attention. Usually a document highlight is visualized by changing
      * the background color of its range.
      */
+
     export class DocumentHighlight {
 
         /**
@@ -9434,6 +9466,7 @@ declare module '@theia/plugin' {
     /**
      * Represents a debug adapter running as a socket based server.
      */
+
     export class DebugAdapterServer {
 
         /**
@@ -9518,6 +9551,7 @@ declare module '@theia/plugin' {
     /**
      * The base class of all breakpoint types.
      */
+
     export class Breakpoint {
         /**
          * The unique ID of the breakpoint.
@@ -9546,6 +9580,7 @@ declare module '@theia/plugin' {
     /**
      * A breakpoint specified by a source location.
      */
+
     export class SourceBreakpoint extends Breakpoint {
         /**
          * The source and line position of this breakpoint.
@@ -9561,6 +9596,7 @@ declare module '@theia/plugin' {
     /**
      * A breakpoint specified by a function name.
      */
+
     export class FunctionBreakpoint extends Breakpoint {
         /**
          * The name of the function to which this breakpoint is attached.
@@ -10621,6 +10657,7 @@ declare module '@theia/plugin' {
      * A selection range represents a part of a selection hierarchy. A selection range
      * may have a parent selection range that contains it.
      */
+
     export class SelectionRange {
 
         /**
diff --git a/packages/search-in-workspace/src/browser/search-in-workspace-result-tree-widget.tsx b/packages/search-in-workspace/src/browser/search-in-workspace-result-tree-widget.tsx
index 772067f8d2c49..a039597c26e13 100644
--- a/packages/search-in-workspace/src/browser/search-in-workspace-result-tree-widget.tsx
+++ b/packages/search-in-workspace/src/browser/search-in-workspace-result-tree-widget.tsx
@@ -1074,7 +1074,7 @@ export class SearchInWorkspaceResultTreeWidget extends TreeWidget {
     protected getExcludeGlobs(excludeOptions?: string[]): string[] {
         const excludePreferences = this.filesystemPreferences['files.exclude'];
         const excludePreferencesGlobs = Object.keys(excludePreferences).filter(key => !!excludePreferences[key]);
-        return [...new Set([...excludePreferencesGlobs, ...excludeOptions])];
+        return [...new Set([...excludePreferencesGlobs, ...excludeOptions || []])];
     }
 
     /**
diff --git a/packages/task/src/browser/task-problem-matcher-registry.ts b/packages/task/src/browser/task-problem-matcher-registry.ts
index 179639812d496..651ad7ba60a78 100644
--- a/packages/task/src/browser/task-problem-matcher-registry.ts
+++ b/packages/task/src/browser/task-problem-matcher-registry.ts
@@ -144,7 +144,11 @@ export class ProblemMatcherRegistry {
                 patterns.push(ProblemPattern.fromProblemPatternContribution(matcher.pattern));
             }
         } else if (baseMatcher) {
-            patterns.push(...baseMatcher.pattern);
+            if (Array.isArray(baseMatcher.pattern)) {
+                patterns.push(...baseMatcher.pattern);
+            } else {
+                patterns.push(baseMatcher.pattern);
+            }
         }
 
         let deprecated: boolean | undefined = matcher.deprecated;
diff --git a/packages/workspace/src/browser/workspace-uri-contribution.spec.ts b/packages/workspace/src/browser/workspace-uri-contribution.spec.ts
index 22b524d2e4cd4..46661f03372af 100644
--- a/packages/workspace/src/browser/workspace-uri-contribution.spec.ts
+++ b/packages/workspace/src/browser/workspace-uri-contribution.spec.ts
@@ -46,7 +46,7 @@ beforeEach(() => {
     container = new Container();
     container.bind(ApplicationShell).toConstantValue({
         currentChanged: new Signal({}),
-        widgets: () => []
+        widgets: []
         // eslint-disable-next-line @typescript-eslint/no-explicit-any
     } as any);
     container.bind(WidgetManager).toConstantValue({