diff --git a/src/Avalonia.NameGenerator.Tests/GlobPatternTests.cs b/src/Avalonia.NameGenerator.Tests/GlobPatternTests.cs
index b21e659f30..68ee4267c0 100644
--- a/src/Avalonia.NameGenerator.Tests/GlobPatternTests.cs
+++ b/src/Avalonia.NameGenerator.Tests/GlobPatternTests.cs
@@ -19,8 +19,8 @@ namespace Avalonia.NameGenerator.Tests
}
[Theory]
- [InlineData("Views/SignUpView.xaml", true, new[] { "*.xaml", "Views/*" })]
- [InlineData("Views/SignUpView.paml", false, new[] { "*.xaml", "Views/*" })]
+ [InlineData("Views/SignUpView.xaml", true, new[] { "*.xaml", "Extensions/*" })]
+ [InlineData("Extensions/SignUpView.paml", true, new[] { "*.xaml", "Extensions/*" })]
[InlineData("Extensions/SignUpView.paml", false, new[] { "*.xaml", "Views/*" })]
[InlineData("anything", true, new[] { "*", "*" })]
[InlineData("anything", false, new[] { "", "" })]
diff --git a/src/Avalonia.NameGenerator.Tests/XamlXClassResolverTests.cs b/src/Avalonia.NameGenerator.Tests/XamlXClassResolverTests.cs
index 510eb62a8a..a0d9ec4459 100644
--- a/src/Avalonia.NameGenerator.Tests/XamlXClassResolverTests.cs
+++ b/src/Avalonia.NameGenerator.Tests/XamlXClassResolverTests.cs
@@ -33,7 +33,7 @@ namespace Avalonia.NameGenerator.Tests
var resolvedClass = resolver.ResolveView(xaml);
Assert.Equal(className, resolvedClass.ClassName);
- Assert.Equal(nameSpace, resolvedClass.NameSpace);
+ Assert.Equal(nameSpace, resolvedClass.Namespace);
}
}
}
\ No newline at end of file
diff --git a/src/Avalonia.NameGenerator/AvaloniaNameSourceGenerator.cs b/src/Avalonia.NameGenerator/AvaloniaNameSourceGenerator.cs
index 81a54ef412..e9decf6c71 100644
--- a/src/Avalonia.NameGenerator/AvaloniaNameSourceGenerator.cs
+++ b/src/Avalonia.NameGenerator/AvaloniaNameSourceGenerator.cs
@@ -43,6 +43,7 @@ namespace Avalonia.NameGenerator
var compiler = MiniCompiler.CreateDefault(types, MiniCompiler.AvaloniaXmlnsDefinitionAttribute);
return new AvaloniaNameGenerator(
new GlobPatternGroup(options.AvaloniaNameGeneratorFilterByPath),
+ new GlobPatternGroup(options.AvaloniaNameGeneratorFilterByNamespace),
new XamlXViewResolver(types, compiler, true, type => ReportInvalidType(context, type)),
new XamlXNameResolver(defaultFieldModifier),
generator);
diff --git a/src/Avalonia.NameGenerator/Domain/IViewResolver.cs b/src/Avalonia.NameGenerator/Domain/IViewResolver.cs
index 11492c880f..9d619e759c 100644
--- a/src/Avalonia.NameGenerator/Domain/IViewResolver.cs
+++ b/src/Avalonia.NameGenerator/Domain/IViewResolver.cs
@@ -11,12 +11,12 @@ namespace Avalonia.NameGenerator.Domain
{
public XamlDocument Xaml { get; }
public string ClassName { get; }
- public string NameSpace { get; }
+ public string Namespace { get; }
public ResolvedView(string className, string nameSpace, XamlDocument xaml)
{
ClassName = className;
- NameSpace = nameSpace;
+ Namespace = nameSpace;
Xaml = xaml;
}
}
diff --git a/src/Avalonia.NameGenerator/Generator.props b/src/Avalonia.NameGenerator/Generator.props
index d853dedc0d..91883faf5c 100644
--- a/src/Avalonia.NameGenerator/Generator.props
+++ b/src/Avalonia.NameGenerator/Generator.props
@@ -3,12 +3,14 @@
OnlyProperties
internal
*
+ *
+
diff --git a/src/Avalonia.NameGenerator/Generator/AvaloniaNameGenerator.cs b/src/Avalonia.NameGenerator/Generator/AvaloniaNameGenerator.cs
index aaa3955c29..1eceaf33f8 100644
--- a/src/Avalonia.NameGenerator/Generator/AvaloniaNameGenerator.cs
+++ b/src/Avalonia.NameGenerator/Generator/AvaloniaNameGenerator.cs
@@ -8,17 +8,20 @@ namespace Avalonia.NameGenerator.Generator
internal class AvaloniaNameGenerator : INameGenerator
{
private readonly IGlobPattern _pathPattern;
+ private readonly IGlobPattern _namespacePattern;
private readonly IViewResolver _classes;
private readonly INameResolver _names;
private readonly ICodeGenerator _code;
public AvaloniaNameGenerator(
IGlobPattern pathPattern,
+ IGlobPattern namespacePattern,
IViewResolver classes,
INameResolver names,
ICodeGenerator code)
{
_pathPattern = pathPattern;
+ _namespacePattern = namespacePattern;
_classes = classes;
_names = names;
_code = code;
@@ -26,21 +29,21 @@ namespace Avalonia.NameGenerator.Generator
public IReadOnlyList GenerateNameReferences(IEnumerable additionalFiles)
{
- var resolveViewsQuery =
+ var resolveViews =
from file in additionalFiles
- where _pathPattern.Matches(file.Path)
- where file.Path.EndsWith(".xaml") ||
- file.Path.EndsWith(".paml") ||
- file.Path.EndsWith(".axaml")
+ where (file.Path.EndsWith(".xaml") ||
+ file.Path.EndsWith(".paml") ||
+ file.Path.EndsWith(".axaml")) &&
+ _pathPattern.Matches(file.Path)
let xaml = file.GetText()!.ToString()
- let type = _classes.ResolveView(xaml)
- where type != null
- select type;
+ let view = _classes.ResolveView(xaml)
+ where view != null && _namespacePattern.Matches(view.Namespace)
+ select view;
var query =
- from view in resolveViewsQuery
+ from view in resolveViews
let names = _names.ResolveNames(view.Xaml)
- let code = _code.GenerateCode(view.ClassName, view.NameSpace, names)
+ let code = _code.GenerateCode(view.ClassName, view.Namespace, names)
let fileName = $"{view.ClassName}.g.cs"
select new GeneratedPartialClass(fileName, code);
diff --git a/src/Avalonia.NameGenerator/Generator/GlobPatternGroup.cs b/src/Avalonia.NameGenerator/Generator/GlobPatternGroup.cs
index dedc966435..c3d5755166 100644
--- a/src/Avalonia.NameGenerator/Generator/GlobPatternGroup.cs
+++ b/src/Avalonia.NameGenerator/Generator/GlobPatternGroup.cs
@@ -13,6 +13,6 @@ namespace Avalonia.NameGenerator.Generator
.Select(pattern => new GlobPattern(pattern))
.ToArray();
- public bool Matches(string str) => _patterns.All(pattern => pattern.Matches(str));
+ public bool Matches(string str) => _patterns.Any(pattern => pattern.Matches(str));
}
}
\ No newline at end of file
diff --git a/src/Avalonia.NameGenerator/GeneratorOptions.cs b/src/Avalonia.NameGenerator/GeneratorOptions.cs
index 9966905aef..dd4d8834f8 100644
--- a/src/Avalonia.NameGenerator/GeneratorOptions.cs
+++ b/src/Avalonia.NameGenerator/GeneratorOptions.cs
@@ -8,6 +8,7 @@ namespace Avalonia.NameGenerator
AvaloniaNameGeneratorBehavior = 0,
AvaloniaNameGeneratorDefaultFieldModifier = 1,
AvaloniaNameGeneratorFilterByPath = 2,
+ AvaloniaNameGeneratorFilterByNamespace = 2,
}
public enum DefaultFieldModifier
@@ -73,5 +74,19 @@ namespace Avalonia.NameGenerator
return new[] {propertyValue};
}
}
+
+ public string[] AvaloniaNameGeneratorFilterByNamespace
+ {
+ get
+ {
+ var propertyValue = _context.GetMSBuildProperty(
+ nameof(BuildProperties.AvaloniaNameGeneratorFilterByNamespace),
+ "*");
+
+ if (propertyValue.Contains(";"))
+ return propertyValue.Split(';');
+ return new[] {propertyValue};
+ }
+ }
}
}
\ No newline at end of file