diff --git a/src/GDShrapt.Reader/Basics/GDLiteralToken.cs b/src/GDShrapt.Reader/Basics/GDLiteralToken.cs index 3763ec8..8b30ae7 100644 --- a/src/GDShrapt.Reader/Basics/GDLiteralToken.cs +++ b/src/GDShrapt.Reader/Basics/GDLiteralToken.cs @@ -12,6 +12,8 @@ public override int GetHashCode() return Sequence?.GetHashCode() ?? base.GetHashCode(); } + public abstract GDLiteralToken CloneWith(string stringValue); + public override bool Equals(object obj) { if (obj is GDLiteralToken other) diff --git a/src/GDShrapt.Reader/Basics/IGDClassDeclaration.cs b/src/GDShrapt.Reader/Basics/IGDClassDeclaration.cs index 1fefcdc..2213972 100644 --- a/src/GDShrapt.Reader/Basics/IGDClassDeclaration.cs +++ b/src/GDShrapt.Reader/Basics/IGDClassDeclaration.cs @@ -12,5 +12,6 @@ public interface IGDClassDeclaration : IGDSyntaxToken IEnumerable Methods { get; } IEnumerable Enums { get; } IEnumerable InnerClasses { get; } + IEnumerable IdentifiableMembers { get; } } } diff --git a/src/GDShrapt.Reader/Declarations/Class/GDClassMember.cs b/src/GDShrapt.Reader/Declarations/Class/GDClassMember.cs index a2bf5d2..3f3dcf9 100644 --- a/src/GDShrapt.Reader/Declarations/Class/GDClassMember.cs +++ b/src/GDShrapt.Reader/Declarations/Class/GDClassMember.cs @@ -2,7 +2,6 @@ { public abstract class GDClassMember : GDIntendedNode { - internal GDClassMember(int intendation) : base(intendation) { diff --git a/src/GDShrapt.Reader/Declarations/GDClassDeclaration.cs b/src/GDShrapt.Reader/Declarations/GDClassDeclaration.cs index 6578b5e..6350f6a 100644 --- a/src/GDShrapt.Reader/Declarations/GDClassDeclaration.cs +++ b/src/GDShrapt.Reader/Declarations/GDClassDeclaration.cs @@ -45,7 +45,7 @@ public GDClassDeclaration() public IEnumerable Methods => Members.OfType(); public IEnumerable Enums => Members.OfType(); public IEnumerable InnerClasses => Members.OfType(); - + public IEnumerable IdentifiableMembers => Members.OfType(); public override GDNode CreateEmptyInstance() { return new GDClassDeclaration(); diff --git a/src/GDShrapt.Reader/Declarations/GDInnerClassDeclaration.cs b/src/GDShrapt.Reader/Declarations/GDInnerClassDeclaration.cs index 2baf505..b3b61f2 100644 --- a/src/GDShrapt.Reader/Declarations/GDInnerClassDeclaration.cs +++ b/src/GDShrapt.Reader/Declarations/GDInnerClassDeclaration.cs @@ -15,6 +15,7 @@ public sealed class GDInnerClassDeclaration : GDIdentifiableClassMember, IGDClas public IEnumerable Methods => Members.OfType(); public IEnumerable Enums => Members.OfType(); public IEnumerable InnerClasses => Members.OfType(); + public IEnumerable IdentifiableMembers => Members.OfType(); public GDClassKeyword ClassKeyword { diff --git a/src/GDShrapt.Reader/SimpleTokens/GDIdentifier.cs b/src/GDShrapt.Reader/SimpleTokens/GDIdentifier.cs index f03c67b..1422555 100644 --- a/src/GDShrapt.Reader/SimpleTokens/GDIdentifier.cs +++ b/src/GDShrapt.Reader/SimpleTokens/GDIdentifier.cs @@ -127,7 +127,7 @@ public bool TryExtractLocalScopeVisibleDeclarationFromParents(out GDIdentifier d { if (isStaticContext.Value) { - foreach (var member in innerClass.Members.OfType()) + foreach (var member in innerClass.IdentifiableMembers) { if (member.IsStatic && member.Identifier == this) { @@ -138,7 +138,7 @@ public bool TryExtractLocalScopeVisibleDeclarationFromParents(out GDIdentifier d } else { - foreach (var member in innerClass.Members.OfType()) + foreach (var member in innerClass.IdentifiableMembers) { if (member.Identifier == this) { @@ -154,44 +154,33 @@ public bool TryExtractLocalScopeVisibleDeclarationFromParents(out GDIdentifier d if (node is GDClassDeclaration @class) { - if (isStaticContext.HasValue) + if (isStaticContext.HasValue && isStaticContext.Value) { - if (isStaticContext.Value) + foreach (var member in @class.IdentifiableMembers) { - foreach (var member in @class.Members.OfType()) + if (member.IsStatic && member.Identifier == this) { - if (member.IsStatic && member.Identifier == this) - { - declaration = member.Identifier; - return true; - } + declaration = member.Identifier; + return true; } } - else + } + else + { + foreach (var member in @class.IdentifiableMembers) { - foreach (var member in @class.Members.OfType()) + if (member.Identifier == this) { - if (member.Identifier == this) - { - declaration = member.Identifier; - return true; - } + declaration = member.Identifier; + return true; } } + } break; } - foreach (var item in node.GetMethodScopeDeclarations(startLine)) - { - if (item == this) - { - declaration = item; - return true; - } - } - if (node is GDMethodDeclaration method) { if (method.Identifier == this) @@ -206,6 +195,15 @@ public bool TryExtractLocalScopeVisibleDeclarationFromParents(out GDIdentifier d continue; } + foreach (var item in node.GetMethodScopeDeclarations(startLine)) + { + if (item == this) + { + declaration = item; + return true; + } + } + node = node.Parent; } diff --git a/src/GDShrapt.Reader/SimpleTokens/GDNumber.cs b/src/GDShrapt.Reader/SimpleTokens/GDNumber.cs index 76a55f6..8157328 100644 --- a/src/GDShrapt.Reader/SimpleTokens/GDNumber.cs +++ b/src/GDShrapt.Reader/SimpleTokens/GDNumber.cs @@ -279,6 +279,14 @@ public override GDSyntaxToken Clone() }; } + public override GDLiteralToken CloneWith(string stringValue) + { + return new GDNumber() + { + Sequence = stringValue + }; + } + public override string ToString() { return $"{_literalValue}"; diff --git a/src/GDShrapt.Reader/SimpleTokens/GDStringPart.cs b/src/GDShrapt.Reader/SimpleTokens/GDStringPart.cs index 6c3c0b2..34e55a4 100644 --- a/src/GDShrapt.Reader/SimpleTokens/GDStringPart.cs +++ b/src/GDShrapt.Reader/SimpleTokens/GDStringPart.cs @@ -73,5 +73,13 @@ public override string ToString() { return $"{Sequence}"; } + + public override GDLiteralToken CloneWith(string stringValue) + { + return new GDStringPart() + { + Sequence = stringValue + }; + } } } \ No newline at end of file