Skip to content

Commit ed06583

Browse files
committed
Avoid unneeded instantiation of a MemberList if no type parameters available.
If we have delegates do not add them directly to the known list! This can cause cached list corruption!
1 parent 6b044e0 commit ed06583

File tree

1 file changed

+21
-6
lines changed

1 file changed

+21
-6
lines changed

External/Plugins/ASCompletion/Completion/ASComplete.cs

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2334,16 +2334,25 @@ static public void HandleAllClassesCompletion(ScintillaControl Sci, string tail,
23342334

23352335
if (ASContext.Context.Features.hasDelegates && !ASContext.Context.CurrentClass.IsVoid())
23362336
{
2337+
MemberList delegates = new MemberList();
2338+
23372339
foreach (MemberModel field in ASContext.Context.CurrentClass.Members)
23382340
if ((field.Flags & FlagType.Delegate) > 0)
2339-
known.Add(field);
2341+
delegates.Add(field);
2342+
2343+
if (delegates.Count > 0)
2344+
{
2345+
delegates.Sort();
2346+
delegates.Merge(known);
2347+
known = delegates;
2348+
}
23402349
}
23412350

23422351
if (ASContext.Context.Features.hasGenerics && !ASContext.Context.CurrentClass.IsVoid())
23432352
{
23442353
var typeParams = GetVisibleTypeParameters();
23452354

2346-
if (typeParams.Items.Count > 0)
2355+
if (typeParams != null && typeParams.Items.Count > 0)
23472356
{
23482357
typeParams.Add(known);
23492358
typeParams.Sort();
@@ -3819,8 +3828,8 @@ static public ASResult GetExpressionType(ScintillaControl sci, int position, boo
38193828

38203829
static private MemberList GetTypeParameters(MemberModel model)
38213830
{
3822-
var retVal = new MemberList();
3823-
var template = model.Template;
3831+
MemberList retVal = null;
3832+
string template = model.Template;
38243833
if (template != null && template.StartsWith("<"))
38253834
{
38263835
var sb = new StringBuilder();
@@ -3839,6 +3848,7 @@ static private MemberList GetTypeParameters(MemberModel model)
38393848
genType.Type = sb.ToString();
38403849
genType.Flags = FlagType.TypeDef;
38413850
inConstraint = c == ':';
3851+
if (retVal == null) retVal = new MemberList();
38423852
retVal.Add(genType);
38433853
sb.Length = 0;
38443854

@@ -3869,6 +3879,7 @@ static private MemberList GetTypeParameters(MemberModel model)
38693879
}
38703880
if (sb.Length > 0)
38713881
{
3882+
if (retVal == null) retVal = new MemberList();
38723883
if (!inConstraint)
38733884
retVal.Add(new MemberModel { Name = sb.ToString(), Type = sb.ToString(), Flags = FlagType.TypeDef });
38743885
else
@@ -3882,7 +3893,7 @@ static private MemberList GetTypeParameters(MemberModel model)
38823893
static private MemberList GetVisibleElements()
38833894
{
38843895
MemberList known = new MemberList();
3885-
known.Merge(ASContext.Context.GetVisibleExternalElements());
3896+
known.Add(ASContext.Context.GetVisibleExternalElements());
38863897

38873898
if (ASContext.Context.Features.hasGenerics && !ASContext.Context.CurrentClass.IsVoid())
38883899
{
@@ -3899,7 +3910,11 @@ static private MemberList GetVisibleTypeParameters()
38993910
var curMember = ASContext.Context.CurrentMember;
39003911
if (curMember != null && (curMember.Flags & FlagType.Function) > 0)
39013912
{
3902-
typeParams.Add(GetTypeParameters(curMember));
3913+
var memberTypeParams = GetTypeParameters(curMember);
3914+
if (typeParams != null && memberTypeParams != null)
3915+
typeParams.Add(memberTypeParams);
3916+
else if (typeParams == null)
3917+
typeParams = memberTypeParams;
39033918
}
39043919

39053920
return typeParams;

0 commit comments

Comments
 (0)