From e24d35053006a1f24814dee7790a2cbbb3972e50 Mon Sep 17 00:00:00 2001 From: Christoph Bergmeister Date: Sat, 18 Apr 2020 23:47:23 +0100 Subject: [PATCH 1/2] Lazy initialisation of LinkedList in TokenOperations constructor -> 7% performance gain Also remove unused method --- Engine/TokenOperations.cs | 31 +++---------------------------- 1 file changed, 3 insertions(+), 28 deletions(-) diff --git a/Engine/TokenOperations.cs b/Engine/TokenOperations.cs index d7df01fc2..75dead8cb 100644 --- a/Engine/TokenOperations.cs +++ b/Engine/TokenOperations.cs @@ -15,7 +15,7 @@ namespace Microsoft.Windows.PowerShell.ScriptAnalyzer public class TokenOperations { private readonly Token[] tokens; - private LinkedList tokensLL; + private readonly Lazy> tokensLL; private readonly Ast ast; public Ast Ast { get { return ast; } } @@ -39,7 +39,7 @@ public TokenOperations(Token[] tokens, Ast ast) this.tokens = tokens; this.ast = ast; - this.tokensLL = new LinkedList(this.tokens); + this.tokensLL = new Lazy>(() => new LinkedList(this.tokens)); } /// @@ -150,16 +150,6 @@ private IEnumerable GetBraceInCommandElement(TokenKind tokenKind) } } - public IEnumerable GetCloseBraceInOneLineIfStatement() - { - return GetBraceInOneLineIfStatment(TokenKind.RCurly); - } - - public IEnumerable GetOpenBraceInOneLineIfStatement() - { - return GetBraceInOneLineIfStatment(TokenKind.LCurly); - } - // TODO Fix code duplication in the following method and GetBraceInCommandElement private IEnumerable GetBraceInOneLineIfStatment(TokenKind tokenKind) { @@ -262,7 +252,7 @@ public IEnumerable> GetTokenNodes(TokenKind kind) public IEnumerable> GetTokenNodes(Func predicate) { - var token = tokensLL.First; + var token = tokensLL.Value.First; while (token != null) { if (predicate(token.Value)) @@ -290,21 +280,6 @@ private IEnumerable> GetTokenAndPrecedingWhitespace(TokenKind } } - public IEnumerable> GetOpenBracesWithWhiteSpacesBefore() - { - return GetTokenAndPrecedingWhitespace(TokenKind.LCurly); - } - - public IEnumerable> GetOpenParensWithWhiteSpacesBefore() - { - return GetTokenAndPrecedingWhitespace(TokenKind.LParen); - } - - public static int GetExtentWidth(IScriptExtent extent) - { - return extent.EndOffset - extent.StartOffset; - } - private bool OnSameLine(Token token1, Token token2) { return token1.Extent.StartLineNumber == token2.Extent.EndLineNumber; From 2c3eb02f29cc8425a12e5b9bafb0cc6b91cc1ea8 Mon Sep 17 00:00:00 2001 From: Christoph Bergmeister Date: Sat, 18 Apr 2020 23:55:58 +0100 Subject: [PATCH 2/2] remove another unused function --- Engine/TokenOperations.cs | 52 --------------------------------------- 1 file changed, 52 deletions(-) diff --git a/Engine/TokenOperations.cs b/Engine/TokenOperations.cs index 75dead8cb..0a47ab3cc 100644 --- a/Engine/TokenOperations.cs +++ b/Engine/TokenOperations.cs @@ -150,58 +150,6 @@ private IEnumerable GetBraceInCommandElement(TokenKind tokenKind) } } - // TODO Fix code duplication in the following method and GetBraceInCommandElement - private IEnumerable GetBraceInOneLineIfStatment(TokenKind tokenKind) - { - var ifStatementAsts = ast.FindAll(ast => - { - var ifAst = ast as IfStatementAst; - if (ifAst == null) - { - return false; - } - - return ifAst.Extent.StartLineNumber == ifAst.Extent.EndLineNumber; - }, - true); - - if (ifStatementAsts == null) - { - yield break; - } - - var braceTokens = new List(); - foreach (var ast in ifStatementAsts) - { - var ifStatementAst = ast as IfStatementAst; - foreach (var clause in ifStatementAst.Clauses) - { - var tokenIf - = tokenKind == TokenKind.LCurly - ? GetTokens(clause.Item2).FirstOrDefault() - : GetTokens(clause.Item2).LastOrDefault(); - if (tokenIf != null) - { - yield return tokenIf; - } - } - - if (ifStatementAst.ElseClause == null) - { - continue; - } - - var tokenElse - = tokenKind == TokenKind.LCurly - ? GetTokens(ifStatementAst.ElseClause).FirstOrDefault() - : GetTokens(ifStatementAst.ElseClause).LastOrDefault(); - if (tokenElse != null) - { - yield return tokenElse; - } - } - } - public static IEnumerable GetTokens(Ast outerAst, Ast innerAst, Token[] outerTokens) { ThrowIfNull(outerAst, nameof(outerAst));