Skip to content

Commit 5101eed

Browse files
committed
Split specialized string reference classes into separate files
1 parent 79f8348 commit 5101eed

File tree

5 files changed

+150
-129
lines changed

5 files changed

+150
-129
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
using System;
2+
using System.Windows;
3+
using dnlib.DotNet;
4+
using dnSpy.Contracts.Text;
5+
using dnSpy.Contracts.Text.Classification;
6+
7+
namespace dnSpy.StringSearcher {
8+
public sealed class ConstantStringReference(StringReferenceContext context, string literal, IHasConstant referrer)
9+
: StringReference(context, literal, referrer) {
10+
11+
public new IHasConstant Referrer => (IHasConstant)base.Referrer;
12+
13+
public IMemberDef Container => Referrer switch {
14+
FieldDef or PropertyDef => (IMemberDef)Referrer,
15+
ParamDef param => param.DeclaringMethod,
16+
_ => throw new ArgumentOutOfRangeException(nameof(Referrer)),
17+
};
18+
19+
public override StringReferenceKind Kind => StringReferenceKind.Constant;
20+
21+
public override ModuleDef Module => Container.Module;
22+
23+
public override MDToken Token => Referrer.MDToken;
24+
25+
public override IMemberRef Member => Container;
26+
27+
protected override FrameworkElement CreateReferrerUI() {
28+
var writer = WriterCache.GetWriter();
29+
30+
try {
31+
Context.Decompiler.Write(writer, Container, DefaultFormatterOptions);
32+
33+
if (Referrer is ParamDef param) {
34+
WriteParameterReference(writer, param);
35+
}
36+
37+
return Context.TextElementProvider.CreateTextElement(
38+
Context.ClassificationFormatMap,
39+
new TextClassifierContext(writer.Text, string.Empty, true, writer.Colors),
40+
ContentTypes.Search,
41+
TextElementFlags.FilterOutNewLines
42+
);
43+
}
44+
finally {
45+
WriterCache.FreeWriter(writer);
46+
}
47+
}
48+
}
49+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
using System;
2+
using System.Windows;
3+
using dnlib.DotNet;
4+
using dnSpy.Contracts.Text;
5+
using dnSpy.Contracts.Text.Classification;
6+
7+
namespace dnSpy.StringSearcher {
8+
public sealed class CustomAttributeStringReference(StringReferenceContext context, string literal, IMDTokenProvider owner, CustomAttribute attribute)
9+
: StringReference(context, literal, owner) {
10+
11+
public CustomAttribute CustomAttribute { get; } = attribute;
12+
13+
public override StringReferenceKind Kind => StringReferenceKind.Attribute;
14+
15+
public override ModuleDef Module => Member.Module;
16+
17+
public override MDToken Token => Owner.MDToken;
18+
19+
public IMDTokenProvider Owner { get; } = owner;
20+
21+
public override IMemberRef Member => Owner switch {
22+
ParamDef param => param.DeclaringMethod,
23+
IMemberRef reference => reference,
24+
_ => throw new ArgumentOutOfRangeException(nameof(Owner))
25+
};
26+
27+
protected override FrameworkElement CreateReferrerUI() {
28+
var writer = WriterCache.GetWriter();
29+
30+
try {
31+
Context.Decompiler.Write(writer, Member, DefaultFormatterOptions);
32+
33+
if (Owner is ParamDef param) {
34+
WriteParameterReference(writer, param);
35+
}
36+
37+
writer.Write(TextColor.Text, " in ");
38+
Context.Decompiler.Write(writer, CustomAttribute.AttributeType, DefaultFormatterOptions);
39+
40+
return Context.TextElementProvider.CreateTextElement(
41+
Context.ClassificationFormatMap,
42+
new TextClassifierContext(writer.Text, string.Empty, true, writer.Colors),
43+
ContentTypes.Search,
44+
TextElementFlags.FilterOutNewLines
45+
);
46+
}
47+
finally {
48+
WriterCache.FreeWriter(writer);
49+
}
50+
}
51+
}
52+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
using System.Windows;
2+
using dnlib.DotNet;
3+
using dnSpy.Contracts.Text;
4+
using dnSpy.Contracts.Text.Classification;
5+
6+
namespace dnSpy.StringSearcher {
7+
public sealed class ILStringReference(StringReferenceContext context, string literal, MethodDef referrer, uint offset)
8+
: StringReference(context, literal, referrer) {
9+
10+
public new MethodDef Referrer => (MethodDef)base.Referrer;
11+
12+
public override StringReferenceKind Kind => StringReferenceKind.IL;
13+
14+
public override ModuleDef Module => Referrer.Module;
15+
16+
public override MDToken Token => Referrer.MDToken;
17+
18+
public uint Offset { get; } = offset;
19+
20+
public override IMemberRef Member => Referrer;
21+
22+
protected override FrameworkElement CreateReferrerUI() {
23+
var writer = WriterCache.GetWriter();
24+
25+
try {
26+
Context.Decompiler.Write(writer, Referrer, DefaultFormatterOptions);
27+
writer.Write(TextColor.Punctuation, "+");
28+
writer.Write(TextColor.Label, $"IL_{Offset:X4}");
29+
30+
return Context.TextElementProvider.CreateTextElement(
31+
Context.ClassificationFormatMap,
32+
new TextClassifierContext(writer.Text, string.Empty, true, writer.Colors),
33+
ContentTypes.Search,
34+
TextElementFlags.FilterOutNewLines
35+
);
36+
}
37+
finally {
38+
WriterCache.FreeWriter(writer);
39+
}
40+
}
41+
}
42+
}

Extensions/dnSpy.StringSearcher/StringReference.cs

Lines changed: 0 additions & 129 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,6 @@ public record StringReferenceContext(
1616
IDotNetImageService DotNetImageService
1717
);
1818

19-
public enum StringReferenceKind {
20-
IL,
21-
Constant,
22-
Attribute
23-
}
24-
2519
public abstract class StringReference(StringReferenceContext context, string literal, object referrer) : ViewModelBase {
2620
protected const FormatterOptions DefaultFormatterOptions = FormatterOptions.Default & ~(
2721
FormatterOptions.ShowParameterNames
@@ -121,127 +115,4 @@ protected static class WriterCache {
121115
public static void FreeWriter(TextClassifierTextColorWriter writer) => writer.Clear();
122116
}
123117
}
124-
125-
public sealed class ILStringReference(StringReferenceContext context, string literal, MethodDef referrer, uint offset)
126-
: StringReference(context, literal, referrer) {
127-
128-
public new MethodDef Referrer => (MethodDef)base.Referrer;
129-
130-
public override StringReferenceKind Kind => StringReferenceKind.IL;
131-
132-
public override ModuleDef Module => Referrer.Module;
133-
134-
public override MDToken Token => Referrer.MDToken;
135-
136-
public uint Offset { get; } = offset;
137-
138-
public override IMemberRef Member => Referrer;
139-
140-
protected override FrameworkElement CreateReferrerUI() {
141-
var writer = WriterCache.GetWriter();
142-
143-
try {
144-
Context.Decompiler.Write(writer, Referrer, DefaultFormatterOptions);
145-
writer.Write(TextColor.Punctuation, "+");
146-
writer.Write(TextColor.Label, $"IL_{Offset:X4}");
147-
148-
return Context.TextElementProvider.CreateTextElement(
149-
Context.ClassificationFormatMap,
150-
new TextClassifierContext(writer.Text, string.Empty, true, writer.Colors),
151-
ContentTypes.Search,
152-
TextElementFlags.FilterOutNewLines
153-
);
154-
}
155-
finally {
156-
WriterCache.FreeWriter(writer);
157-
}
158-
}
159-
}
160-
161-
public sealed class ConstantStringReference(StringReferenceContext context, string literal, IHasConstant referrer)
162-
: StringReference(context, literal, referrer) {
163-
164-
public new IHasConstant Referrer => (IHasConstant)base.Referrer;
165-
166-
public IMemberDef Container => Referrer switch {
167-
FieldDef or PropertyDef => (IMemberDef)Referrer,
168-
ParamDef param => param.DeclaringMethod,
169-
_ => throw new ArgumentOutOfRangeException(nameof(Referrer)),
170-
};
171-
172-
public override StringReferenceKind Kind => StringReferenceKind.Constant;
173-
174-
public override ModuleDef Module => Container.Module;
175-
176-
public override MDToken Token => Referrer.MDToken;
177-
178-
public override IMemberRef Member => Container;
179-
180-
protected override FrameworkElement CreateReferrerUI() {
181-
var writer = WriterCache.GetWriter();
182-
183-
try {
184-
Context.Decompiler.Write(writer, Container, DefaultFormatterOptions);
185-
186-
if (Referrer is ParamDef param) {
187-
WriteParameterReference(writer, param);
188-
}
189-
190-
return Context.TextElementProvider.CreateTextElement(
191-
Context.ClassificationFormatMap,
192-
new TextClassifierContext(writer.Text, string.Empty, true, writer.Colors),
193-
ContentTypes.Search,
194-
TextElementFlags.FilterOutNewLines
195-
);
196-
}
197-
finally {
198-
WriterCache.FreeWriter(writer);
199-
}
200-
}
201-
}
202-
203-
public sealed class CustomAttributeStringReference(StringReferenceContext context, string literal, IMDTokenProvider owner, CustomAttribute attribute)
204-
: StringReference(context, literal, owner) {
205-
206-
public CustomAttribute CustomAttribute { get; } = attribute;
207-
208-
public override StringReferenceKind Kind => StringReferenceKind.Attribute;
209-
210-
public override ModuleDef Module => Member.Module;
211-
212-
public override MDToken Token => Owner.MDToken;
213-
214-
public IMDTokenProvider Owner { get; } = owner;
215-
216-
public override IMemberRef Member => Owner switch {
217-
ParamDef param => param.DeclaringMethod,
218-
IMemberRef reference => reference,
219-
_ => throw new ArgumentOutOfRangeException(nameof(Owner))
220-
};
221-
222-
protected override FrameworkElement CreateReferrerUI() {
223-
var writer = WriterCache.GetWriter();
224-
225-
try {
226-
Context.Decompiler.Write(writer, Member, DefaultFormatterOptions);
227-
228-
if (Owner is ParamDef param) {
229-
WriteParameterReference(writer, param);
230-
}
231-
232-
writer.Write(TextColor.Text, " in ");
233-
Context.Decompiler.Write(writer, CustomAttribute.AttributeType, DefaultFormatterOptions);
234-
235-
return Context.TextElementProvider.CreateTextElement(
236-
Context.ClassificationFormatMap,
237-
new TextClassifierContext(writer.Text, string.Empty, true, writer.Colors),
238-
ContentTypes.Search,
239-
TextElementFlags.FilterOutNewLines
240-
);
241-
}
242-
finally {
243-
WriterCache.FreeWriter(writer);
244-
}
245-
}
246-
}
247118
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace dnSpy.StringSearcher {
2+
public enum StringReferenceKind {
3+
IL,
4+
Constant,
5+
Attribute
6+
}
7+
}

0 commit comments

Comments
 (0)