Skip to content

Commit 5d28b0f

Browse files
OrganizeImports: moved comparer code to MemberModel to avoid duplicate code.
1 parent 92d6aa3 commit 5d28b0f

File tree

3 files changed

+38
-52
lines changed

3 files changed

+38
-52
lines changed

External/Plugins/ASCompletion/Completion/ASGenerator.cs

Lines changed: 1 addition & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4326,7 +4326,7 @@ public static int InsertImport(MemberModel member, bool fixScrolling)
43264326
// insert in alphabetical order
43274327
mImport = ASFileParserRegexes.Import.Match(txt);
43284328
if (mImport.Success &&
4329-
CompareImports(mImport.Groups["package"].Value, fullPath) > 0)
4329+
ByImportTypeMemberComparer.CompareImports(mImport.Groups["package"].Value, fullPath) > 0)
43304330
{
43314331
line--;
43324332
break;
@@ -4427,28 +4427,6 @@ private static void AddLookupPosition()
44274427
ASContext.Panel.SetLastLookupPosition(ASContext.Context.CurrentFile, lookupLine, lookupCol);
44284428
}
44294429
}
4430-
4431-
private static Int32 CompareImports(String import1, String import2)
4432-
{
4433-
IComparer cmp = StringComparer.Ordinal;
4434-
String[] parts1 = import1.Split('.');
4435-
String[] parts2 = import2.Split('.');
4436-
int len1 = parts1.Length;
4437-
int len2 = parts2.Length;
4438-
// If the imports are at the same depth, compare them alphabetically.
4439-
if (len1 == len2)
4440-
return cmp.Compare(import1, import2);
4441-
int minPackageLen = ((len1 <= len2) ? len1 : len2) - 1;
4442-
// Alphabetically compare import packages part by part.
4443-
for (int i = 0; i < minPackageLen; ++i)
4444-
{
4445-
int cmpResult = cmp.Compare(parts1[i], parts2[i]);
4446-
if (cmpResult != 0)
4447-
return cmpResult;
4448-
}
4449-
// One of the packages is a sub-package of the other one. Consider the parent package to compare as less than the sub-package.
4450-
return len1 - len2;
4451-
}
44524430
#endregion
44534431
}
44544432

External/Plugins/ASCompletion/Model/MemberModel.cs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -538,4 +538,40 @@ public int Compare(MemberModel a, MemberModel b)
538538
}
539539

540540
}
541+
542+
/// <summary>
543+
/// Compare members based on import name
544+
/// </summary>
545+
public class ByImportTypeMemberComparer : IComparer<MemberModel>
546+
{
547+
public static Int32 CompareImports(String import1, String import2)
548+
{
549+
// Use case-insensitive comparison.
550+
//IComparer cmp = StringComparer.OrdinalIgnoreCase;
551+
// Use case-sensitive comparison.
552+
IComparer cmp = StringComparer.Ordinal;
553+
String[] parts1 = import1.Split('.');
554+
String[] parts2 = import2.Split('.');
555+
int len1 = parts1.Length;
556+
int len2 = parts2.Length;
557+
// If the imports are at the same depth, compare them alphabetically.
558+
if (len1 == len2)
559+
return cmp.Compare(import1, import2);
560+
int minPackageLen = ((len1 <= len2) ? len1 : len2) - 1;
561+
// Alphabetically compare import packages part by part.
562+
for (int i = 0; i < minPackageLen; ++i)
563+
{
564+
int cmpResult = cmp.Compare(parts1[i], parts2[i]);
565+
if (cmpResult != 0)
566+
return cmpResult;
567+
}
568+
// One of the packages is a sub-package of the other one. Consider the parent package to compare as less than the sub-package.
569+
return len1 - len2;
570+
}
571+
572+
public Int32 Compare(MemberModel item1, MemberModel item2)
573+
{
574+
return CompareImports(item1.Type, item2.Type);
575+
}
576+
}
541577
}

External/Plugins/CodeRefactor/Commands/OrganizeImports.cs

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ private void InsertImports(List<MemberModel> imports, String searchInText, Scint
149149
{
150150
String eol = LineEndDetector.GetNewLineMarker(sci.EOLMode);
151151
Int32 line = imports[0].LineFrom - DeletedImportsCompensation;
152-
imports.Sort(new ImportsComparerType());
152+
imports.Sort(new ByImportTypeMemberComparer());
153153
sci.GotoLine(line);
154154
Int32 curLine = 0;
155155
List<String> uniques = this.GetUniqueImports(imports, searchInText, sci.FileName);
@@ -218,34 +218,6 @@ public override Boolean IsValid()
218218

219219
}
220220

221-
/// <summary>
222-
/// Compare import statements based on import name
223-
/// </summary>
224-
class ImportsComparerType : IComparer<MemberModel>
225-
{
226-
public Int32 Compare(MemberModel item1, MemberModel item2)
227-
{
228-
IComparer cmp = StringComparer.Ordinal;
229-
String[] parts1 = item1.Type.Split('.');
230-
String[] parts2 = item2.Type.Split('.');
231-
int len1 = parts1.Length;
232-
int len2 = parts2.Length;
233-
// If the imports are at the same depth, compare them alphabetically.
234-
if (len1 == len2)
235-
return cmp.Compare(item1.Type, item2.Type);
236-
int minPackageLen = ((len1 <= len2) ? len1 : len2) - 1;
237-
// Alphabetically compare import packages part by part.
238-
for (int i = 0; i < minPackageLen; ++i)
239-
{
240-
int cmpResult = cmp.Compare(parts1[i], parts2[i]);
241-
if (cmpResult != 0)
242-
return cmpResult;
243-
}
244-
// One of the packages is a sub-package of the other one. Consider the parent package to compare as less than the sub-package.
245-
return len1 - len2;
246-
}
247-
}
248-
249221
/// <summary>
250222
/// Compare import statements based on declaration line
251223
/// </summary>

0 commit comments

Comments
 (0)