Skip to content

Commit b165ae4

Browse files
committed
Merge pull request #996 from wise0704/GenerateProtected
Don't generate protected members for sealed classes
2 parents edcd106 + 5ce0c1b commit b165ae4

File tree

1 file changed

+37
-38
lines changed

1 file changed

+37
-38
lines changed

External/Plugins/ASCompletion/Completion/ASGenerator.cs

Lines changed: 37 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -659,7 +659,7 @@ private static void ShowNewVarList(FoundDeclaration found)
659659
known.Add(new GeneratorItem(label, GeneratorJobType.Constant, found.member, found.inClass));
660660
}
661661

662-
bool genProtectedDecl = ASContext.Context.Features.protectedKey != null && ASContext.CommonSettings.GenerateProtectedDeclarations;
662+
bool genProtectedDecl = GetDefaultVisibility(found.inClass) == Visibility.Protected;
663663
if (exprAtCursor == null && exprLeft == null)
664664
{
665665
if (genProtectedDecl) label = TextHelper.GetString("ASCompletion.Label.GenerateProtectedVar");
@@ -711,7 +711,7 @@ private static void ShowNewMethodList(FoundDeclaration found)
711711
bool isInterface = (inClass.Flags & FlagType.Interface) > 0;
712712
if (!isInterface && result == null)
713713
{
714-
if (ASContext.Context.Features.protectedKey != null && ASContext.CommonSettings.GenerateProtectedDeclarations)
714+
if (GetDefaultVisibility(found.inClass) == Visibility.Protected)
715715
label = TextHelper.GetString("ASCompletion.Label.GenerateProtectedFunction");
716716
else label = TextHelper.GetString("ASCompletion.Label.GeneratePrivateFunction");
717717
known.Add(new GeneratorItem(label, GeneratorJobType.Function, found.member, found.inClass));
@@ -770,9 +770,9 @@ private static void ShowFieldFromParameter(FoundDeclaration found)
770770
if (GetLangIsValid())
771771
{
772772
Hashtable parameters = new Hashtable();
773-
parameters["scope"] = GetDefaultVisibility();
773+
parameters["scope"] = GetDefaultVisibility(found.inClass);
774774
string label;
775-
if (ASContext.Context.Features.protectedKey != null && ASContext.CommonSettings.GenerateProtectedDeclarations)
775+
if (GetDefaultVisibility(found.inClass) == Visibility.Protected)
776776
label = TextHelper.GetString("ASCompletion.Label.GenerateProtectedFieldFromParameter");
777777
else label = TextHelper.GetString("ASCompletion.Label.GeneratePrivateFieldFromParameter");
778778
known.Add(new GeneratorItem(label, GeneratorJobType.FieldFromPatameter, found.member, found.inClass, parameters));
@@ -892,7 +892,7 @@ static public void GenerateJob(GeneratorJobType job, MemberModel member, ClassMo
892892
if (latest == null)
893893
{
894894
if (ASContext.CommonSettings.MethodsGenerationLocations == MethodsGenerationLocations.AfterSimilarAccessorMethod)
895-
latest = GetLatestMemberForFunction(inClass, GetDefaultVisibility(), member);
895+
latest = GetLatestMemberForFunction(inClass, GetDefaultVisibility(inClass), member);
896896
if (latest == null)
897897
latest = member;
898898
}
@@ -902,13 +902,13 @@ static public void GenerateJob(GeneratorJobType job, MemberModel member, ClassMo
902902
string type = contextParam;
903903
if (job == GeneratorJobType.BasicEvent)
904904
if (itemLabel.IndexOf("DataEvent") >= 0) type = "DataEvent"; else type = "Event";
905-
GenerateEventHandler(contextToken, type, member, position);
905+
GenerateEventHandler(contextToken, type, member, position, inClass);
906906
break;
907907

908908
case GeneratorJobType.Delegate:
909909
position = Sci.PositionFromLine(member.LineTo + 1) - ((Sci.EOLMode == 0) ? 2 : 1);
910910
Sci.SetSel(position, position);
911-
GenerateDelegateMethod(contextToken, member, position);
911+
GenerateDelegateMethod(contextToken, member, position, inClass);
912912
break;
913913

914914
case GeneratorJobType.Constant:
@@ -988,7 +988,7 @@ static public void GenerateJob(GeneratorJobType job, MemberModel member, ClassMo
988988
{
989989
if (!RemoveLocalDeclaration(Sci, contextMember)) return;
990990

991-
latest = GetLatestMemberForVariable(GeneratorJobType.Variable, inClass, GetDefaultVisibility(), member);
991+
latest = GetLatestMemberForVariable(GeneratorJobType.Variable, inClass, GetDefaultVisibility(inClass), member);
992992
if (latest == null) return;
993993

994994
position = FindNewVarPosition(Sci, inClass, latest);
@@ -998,7 +998,7 @@ static public void GenerateJob(GeneratorJobType job, MemberModel member, ClassMo
998998
contextMember.Flags -= FlagType.LocalVar;
999999
if ((member.Flags & FlagType.Static) > 0)
10001000
contextMember.Flags |= FlagType.Static;
1001-
contextMember.Access = GetDefaultVisibility();
1001+
contextMember.Access = GetDefaultVisibility(inClass);
10021002
GenerateVariable(contextMember, position, detach);
10031003

10041004
Sci.SetSel(lookupPosition, lookupPosition);
@@ -1190,7 +1190,7 @@ private static void GenerateProperty(GeneratorJobType job, MemberModel member, C
11901190
{
11911191
if ((member.Access & Visibility.Public) > 0) // hide member
11921192
{
1193-
MakePrivate(Sci, member);
1193+
MakePrivate(Sci, member, inClass);
11941194
}
11951195
if (name == null) // rename var with starting underscore
11961196
{
@@ -1412,7 +1412,7 @@ private static void ConvertToConst(ClassModel inClass, ScintillaControl Sci, Mem
14121412
Sci.SetSel(position, position);
14131413
}
14141414

1415-
MemberModel m = NewMember(suggestion, member, FlagType.Variable | FlagType.Constant | FlagType.Static);
1415+
MemberModel m = NewMember(suggestion, member, FlagType.Variable | FlagType.Constant | FlagType.Static, GetDefaultVisibility(inClass));
14161416

14171417
var features = ASContext.Context.Features;
14181418

@@ -1812,7 +1812,7 @@ private static void GenerateFieldFromParameter(ScintillaControl Sci, MemberModel
18121812
if (classMember.Name.Equals(varName))
18131813
return;
18141814

1815-
MemberModel latest = GetLatestMemberForVariable(GeneratorJobType.Variable, inClass, GetDefaultVisibility(), new MemberModel());
1815+
MemberModel latest = GetLatestMemberForVariable(GeneratorJobType.Variable, inClass, GetDefaultVisibility(inClass), new MemberModel());
18161816
if (latest == null) return;
18171817

18181818
int position = FindNewVarPosition(Sci, inClass, latest);
@@ -1956,7 +1956,7 @@ private static void GenerateVariableJob(GeneratorJobType job, ScintillaControl S
19561956
MemberModel latest = null;
19571957
bool isOtherClass = false;
19581958

1959-
Visibility varVisi = job.Equals(GeneratorJobType.Variable) ? GetDefaultVisibility() : Visibility.Public;
1959+
Visibility varVisi = job.Equals(GeneratorJobType.Variable) ? GetDefaultVisibility(inClass) : Visibility.Public;
19601960
FlagType ft = job.Equals(GeneratorJobType.Constant) ? FlagType.Constant : FlagType.Variable;
19611961

19621962
// evaluate, if the variable (or constant) should be generated in other class
@@ -2443,7 +2443,7 @@ private static void GenerateFunctionJob(GeneratorJobType job, ScintillaControl S
24432443
MemberModel latest = null;
24442444
bool isOtherClass = false;
24452445

2446-
Visibility funcVisi = job.Equals(GeneratorJobType.FunctionPublic) ? Visibility.Public : GetDefaultVisibility();
2446+
Visibility funcVisi = job.Equals(GeneratorJobType.FunctionPublic) ? Visibility.Public : GetDefaultVisibility(inClass);
24472447
int wordPos = Sci.WordEndPosition(Sci.CurrentPos, true);
24482448
List<FunctionParameter> functionParameters = ParseFunctionParameters(Sci, wordPos);
24492449

@@ -2767,7 +2767,7 @@ public static void GenerateExtractMethod(ScintillaControl Sci, string NewName)
27672767
MemberModel latest = TemplateUtils.GetTemplateBlockMember(Sci, TemplateUtils.GetBoundary("PrivateMethods"));
27682768

27692769
if (latest == null)
2770-
latest = GetLatestMemberForFunction(found.inClass, GetDefaultVisibility(), found.member);
2770+
latest = GetLatestMemberForFunction(found.inClass, GetDefaultVisibility(found.inClass), found.member);
27712771

27722772
if (latest == null)
27732773
latest = found.member;
@@ -2781,7 +2781,7 @@ public static void GenerateExtractMethod(ScintillaControl Sci, string NewName)
27812781
flags |= FlagType.Static;
27822782
}
27832783

2784-
MemberModel m = new MemberModel(NewName, context.Features.voidKey, flags, GetDefaultVisibility());
2784+
MemberModel m = new MemberModel(NewName, context.Features.voidKey, flags, GetDefaultVisibility(found.inClass));
27852785

27862786
template = NewLine + TemplateUtils.GetTemplate("Function");
27872787
template = TemplateUtils.ToDeclarationWithModifiersString(m, template);
@@ -3181,19 +3181,16 @@ private static MemberModel NewMember(string contextToken, MemberModel calledFrom
31813181
return new MemberModel(contextToken, type, kind, visi);
31823182
}
31833183

3184-
private static MemberModel NewMember(string contextToken, MemberModel calledFrom, FlagType kind)
3185-
{
3186-
return NewMember(contextToken, calledFrom, kind, GetDefaultVisibility());
3187-
}
3188-
31893184
/// <summary>
31903185
/// Get Visibility.Private or Visibility.Protected, depending on user setting forcing the use of protected.
31913186
/// </summary>
3192-
public static Visibility GetDefaultVisibility()
3193-
{
3194-
if (ASContext.Context.Features.protectedKey != null && ASContext.CommonSettings.GenerateProtectedDeclarations)
3195-
return Visibility.Protected;
3196-
else return Visibility.Private;
3187+
private static Visibility GetDefaultVisibility(ClassModel model)
3188+
{
3189+
if (ASContext.Context.Features.protectedKey != null
3190+
&& ASContext.CommonSettings.GenerateProtectedDeclarations
3191+
&& (model.Flags & FlagType.Final) == 0)
3192+
return Visibility.Protected;
3193+
return Visibility.Private;
31973194
}
31983195

31993196
private static void GenerateFunction(MemberModel member, int position, bool detach, ClassModel inClass)
@@ -3248,10 +3245,10 @@ private static void GenerateVariable(MemberModel member, int position, bool deta
32483245
InsertCode(position, result);
32493246
}
32503247

3251-
public static bool MakePrivate(ScintillaControl Sci, MemberModel member)
3248+
public static bool MakePrivate(ScintillaControl Sci, MemberModel member, ClassModel inClass)
32523249
{
32533250
ContextFeatures features = ASContext.Context.Features;
3254-
string visibility = GetPrivateKeyword();
3251+
string visibility = GetPrivateKeyword(inClass);
32553252
if (features.publicKey == null || visibility == null) return false;
32563253
Regex rePublic = new Regex(String.Format(@"\s*({0})\s+", features.publicKey));
32573254

@@ -3374,11 +3371,11 @@ private static string GetNewPropertyNameFor(MemberModel member)
33743371
return "_" + member.Name;
33753372
}
33763373

3377-
private static void GenerateDelegateMethod(string name, MemberModel afterMethod, int position)
3374+
private static void GenerateDelegateMethod(string name, MemberModel afterMethod, int position, ClassModel inClass)
33783375
{
33793376
ContextFeatures features = ASContext.Context.Features;
33803377

3381-
string acc = GetPrivateAccessor(afterMethod);
3378+
string acc = GetPrivateAccessor(afterMethod, inClass);
33823379
string template = TemplateUtils.GetTemplate("Delegate");
33833380
string args = null;
33843381
string type = features.voidKey;
@@ -3396,15 +3393,16 @@ private static void GenerateDelegateMethod(string name, MemberModel afterMethod,
33963393
InsertCode(position, decl);
33973394
}
33983395

3399-
private static void GenerateEventHandler(string name, string type, MemberModel afterMethod, int position)
3396+
private static void GenerateEventHandler(string name, string type, MemberModel afterMethod, int position, ClassModel inClass)
34003397
{
34013398
ScintillaControl Sci = ASContext.CurSciControl;
34023399
Sci.BeginUndoAction();
34033400
try
34043401
{
34053402
int delta = 0;
34063403
ClassModel eventClass = ASContext.Context.ResolveType(type, ASContext.Context.CurrentModel);
3407-
if (eventClass.IsVoid())
3404+
if (eventClass.IsVoid())
3405+
{
34083406
if (type == "Event")
34093407
{
34103408
List<string> typesUsed = new List<string>();
@@ -3420,9 +3418,10 @@ private static void GenerateEventHandler(string name, string type, MemberModel a
34203418
delta = AddImportsByName(typesUsed, Sci.LineFromPosition(position));
34213419
position += delta;
34223420
Sci.SetSel(position, position);
3423-
}
3421+
}
3422+
}
34243423
lookupPosition += delta;
3425-
string acc = GetPrivateAccessor(afterMethod);
3424+
string acc = GetPrivateAccessor(afterMethod, inClass);
34263425
string template = TemplateUtils.GetTemplate("EventHandler");
34273426
string decl = NewLine + TemplateUtils.ReplaceTemplateVariable(template, "Modifiers", acc);
34283427
decl = TemplateUtils.ReplaceTemplateVariable(decl, "Name", name);
@@ -3530,16 +3529,16 @@ private static string GetStaticKeyword(MemberModel member)
35303529
return string.Empty;
35313530
}
35323531

3533-
private static string GetPrivateAccessor(MemberModel member)
3532+
private static string GetPrivateAccessor(MemberModel member, ClassModel inClass)
35343533
{
35353534
string acc = GetStaticKeyword(member);
35363535
if (!string.IsNullOrEmpty(acc)) acc += " ";
3537-
return acc + GetPrivateKeyword();
3536+
return acc + GetPrivateKeyword(inClass);
35383537
}
35393538

3540-
private static string GetPrivateKeyword()
3539+
private static string GetPrivateKeyword(ClassModel inClass)
35413540
{
3542-
if (GetDefaultVisibility() == Visibility.Protected) return ASContext.Context.Features.protectedKey ?? "protected";
3541+
if (GetDefaultVisibility(inClass) == Visibility.Protected) return ASContext.Context.Features.protectedKey ?? "protected";
35433542
return ASContext.Context.Features.privateKey ?? "private";
35443543
}
35453544

0 commit comments

Comments
 (0)