Remove AssemblyName requirement from TagHelperDescriptorFactory method.
- The assembly name is accessible on the provided type. No need to pass one in.
This commit is contained in:
parent
d7527d2e0a
commit
d218bc3173
|
|
@ -62,7 +62,6 @@ namespace Microsoft.CodeAnalysis.Razor
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public virtual IEnumerable<TagHelperDescriptor> CreateDescriptors(
|
public virtual IEnumerable<TagHelperDescriptor> CreateDescriptors(
|
||||||
string assemblyName,
|
|
||||||
INamedTypeSymbol type,
|
INamedTypeSymbol type,
|
||||||
ErrorSink errorSink)
|
ErrorSink errorSink)
|
||||||
{
|
{
|
||||||
|
|
@ -88,7 +87,7 @@ namespace Microsoft.CodeAnalysis.Razor
|
||||||
var tagHelperDescriptors =
|
var tagHelperDescriptors =
|
||||||
BuildTagHelperDescriptors(
|
BuildTagHelperDescriptors(
|
||||||
type,
|
type,
|
||||||
assemblyName,
|
type.ContainingAssembly.Identity.Name,
|
||||||
attributeDescriptors,
|
attributeDescriptors,
|
||||||
targetElementAttributes,
|
targetElementAttributes,
|
||||||
allowedChildren);
|
allowedChildren);
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,8 @@ namespace Microsoft.CodeAnalysis.Razor
|
||||||
|
|
||||||
foreach (var type in types)
|
foreach (var type in types)
|
||||||
{
|
{
|
||||||
results.AddRange(factory.CreateDescriptors(type.ContainingAssembly.Identity.GetDisplayName(), type, errors));
|
var descriptors = factory.CreateDescriptors(type, errors);
|
||||||
|
results.AddRange(descriptors);
|
||||||
}
|
}
|
||||||
|
|
||||||
return results;
|
return results;
|
||||||
|
|
|
||||||
|
|
@ -245,10 +245,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
|
||||||
var typeSymbol = Compilation.GetTypeByMetadataName(tagHelperType.FullName);
|
var typeSymbol = Compilation.GetTypeByMetadataName(tagHelperType.FullName);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var descriptors = factory.CreateDescriptors(
|
var descriptors = factory.CreateDescriptors(typeSymbol, errorSink);
|
||||||
AssemblyName,
|
|
||||||
typeSymbol,
|
|
||||||
errorSink: errorSink);
|
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Empty(errorSink.Errors);
|
Assert.Empty(errorSink.Errors);
|
||||||
|
|
@ -335,10 +332,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
|
||||||
var typeSymbol = Compilation.GetTypeByMetadataName(tagHelperType.FullName);
|
var typeSymbol = Compilation.GetTypeByMetadataName(tagHelperType.FullName);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var descriptors = factory.CreateDescriptors(
|
var descriptors = factory.CreateDescriptors(typeSymbol, errorSink);
|
||||||
AssemblyName,
|
|
||||||
typeSymbol,
|
|
||||||
errorSink: errorSink);
|
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Empty(errorSink.Errors);
|
Assert.Empty(errorSink.Errors);
|
||||||
|
|
@ -420,10 +414,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
|
||||||
var typeSymbol = Compilation.GetTypeByMetadataName(tagHelperType.FullName);
|
var typeSymbol = Compilation.GetTypeByMetadataName(tagHelperType.FullName);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var descriptors = factory.CreateDescriptors(
|
var descriptors = factory.CreateDescriptors(typeSymbol, errorSink);
|
||||||
AssemblyName,
|
|
||||||
typeSymbol,
|
|
||||||
errorSink: errorSink);
|
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Empty(errorSink.Errors);
|
Assert.Empty(errorSink.Errors);
|
||||||
|
|
@ -510,10 +501,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
|
||||||
var typeSymbol = Compilation.GetTypeByMetadataName(tagHelperType.FullName);
|
var typeSymbol = Compilation.GetTypeByMetadataName(tagHelperType.FullName);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var descriptors = factory.CreateDescriptors(
|
var descriptors = factory.CreateDescriptors(typeSymbol, errorSink);
|
||||||
AssemblyName,
|
|
||||||
typeSymbol,
|
|
||||||
errorSink: errorSink);
|
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Empty(errorSink.Errors);
|
Assert.Empty(errorSink.Errors);
|
||||||
|
|
@ -747,10 +735,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
|
||||||
var typeSymbol = Compilation.GetTypeByMetadataName(tagHelperType.FullName);
|
var typeSymbol = Compilation.GetTypeByMetadataName(tagHelperType.FullName);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var descriptors = factory.CreateDescriptors(
|
var descriptors = factory.CreateDescriptors(typeSymbol, errorSink);
|
||||||
AssemblyName,
|
|
||||||
typeSymbol,
|
|
||||||
errorSink);
|
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Empty(errorSink.Errors);
|
Assert.Empty(errorSink.Errors);
|
||||||
|
|
@ -1015,10 +1000,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
|
||||||
var typeSymbol = Compilation.GetTypeByMetadataName(tagHelperType.FullName);
|
var typeSymbol = Compilation.GetTypeByMetadataName(tagHelperType.FullName);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var descriptors = factory.CreateDescriptors(
|
var descriptors = factory.CreateDescriptors(typeSymbol, errorSink);
|
||||||
AssemblyName,
|
|
||||||
typeSymbol,
|
|
||||||
errorSink: errorSink);
|
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Empty(errorSink.Errors);
|
Assert.Empty(errorSink.Errors);
|
||||||
|
|
@ -1065,10 +1047,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
|
||||||
var typeSymbol = Compilation.GetTypeByMetadataName(tagHelperType.FullName);
|
var typeSymbol = Compilation.GetTypeByMetadataName(tagHelperType.FullName);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var descriptors = factory.CreateDescriptors(
|
var descriptors = factory.CreateDescriptors(typeSymbol, errorSink);
|
||||||
AssemblyName,
|
|
||||||
typeSymbol,
|
|
||||||
errorSink: errorSink);
|
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Empty(errorSink.Errors);
|
Assert.Empty(errorSink.Errors);
|
||||||
|
|
@ -1103,10 +1082,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
|
||||||
var typeSymbol = Compilation.GetTypeByMetadataName(typeof(OverriddenAttributeTagHelper).FullName);
|
var typeSymbol = Compilation.GetTypeByMetadataName(typeof(OverriddenAttributeTagHelper).FullName);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var descriptors = factory.CreateDescriptors(
|
var descriptors = factory.CreateDescriptors(typeSymbol, errorSink);
|
||||||
AssemblyName,
|
|
||||||
typeSymbol,
|
|
||||||
errorSink: errorSink);
|
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Empty(errorSink.Errors);
|
Assert.Empty(errorSink.Errors);
|
||||||
|
|
@ -1138,10 +1114,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
|
||||||
var typeSymbol = Compilation.GetTypeByMetadataName(typeof(InheritedOverriddenAttributeTagHelper).FullName);
|
var typeSymbol = Compilation.GetTypeByMetadataName(typeof(InheritedOverriddenAttributeTagHelper).FullName);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var descriptors = factory.CreateDescriptors(
|
var descriptors = factory.CreateDescriptors(typeSymbol, errorSink);
|
||||||
AssemblyName,
|
|
||||||
typeSymbol,
|
|
||||||
errorSink: errorSink);
|
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Empty(errorSink.Errors);
|
Assert.Empty(errorSink.Errors);
|
||||||
|
|
@ -1173,10 +1146,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
|
||||||
var typeSymbol = Compilation.GetTypeByMetadataName(typeof(InheritedNotOverriddenAttributeTagHelper).FullName);
|
var typeSymbol = Compilation.GetTypeByMetadataName(typeof(InheritedNotOverriddenAttributeTagHelper).FullName);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var descriptors = factory.CreateDescriptors(
|
var descriptors = factory.CreateDescriptors(typeSymbol, errorSink);
|
||||||
AssemblyName,
|
|
||||||
typeSymbol,
|
|
||||||
errorSink: errorSink);
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Empty(errorSink.Errors);
|
Assert.Empty(errorSink.Errors);
|
||||||
Assert.Equal(expectedDescriptors, descriptors, CaseSensitiveTagHelperDescriptorComparer.Default);
|
Assert.Equal(expectedDescriptors, descriptors, CaseSensitiveTagHelperDescriptorComparer.Default);
|
||||||
|
|
@ -1204,10 +1174,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
|
||||||
var typeSymbol = Compilation.GetTypeByMetadataName(typeof(InheritedSingleAttributeTagHelper).FullName);
|
var typeSymbol = Compilation.GetTypeByMetadataName(typeof(InheritedSingleAttributeTagHelper).FullName);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var descriptors = factory.CreateDescriptors(
|
var descriptors = factory.CreateDescriptors(typeSymbol, errorSink);
|
||||||
AssemblyName,
|
|
||||||
typeSymbol,
|
|
||||||
errorSink: errorSink);
|
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Empty(errorSink.Errors);
|
Assert.Empty(errorSink.Errors);
|
||||||
|
|
@ -1233,10 +1200,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
|
||||||
var typeSymbol = Compilation.GetTypeByMetadataName(typeof(SingleAttributeTagHelper).FullName);
|
var typeSymbol = Compilation.GetTypeByMetadataName(typeof(SingleAttributeTagHelper).FullName);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var descriptors = factory.CreateDescriptors(
|
var descriptors = factory.CreateDescriptors(typeSymbol, errorSink);
|
||||||
AssemblyName,
|
|
||||||
typeSymbol,
|
|
||||||
errorSink: new ErrorSink());
|
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Empty(errorSink.Errors);
|
Assert.Empty(errorSink.Errors);
|
||||||
|
|
@ -1263,10 +1227,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
|
||||||
var typeSymbol = Compilation.GetTypeByMetadataName(typeof(MissingAccessorTagHelper).FullName);
|
var typeSymbol = Compilation.GetTypeByMetadataName(typeof(MissingAccessorTagHelper).FullName);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var descriptors = factory.CreateDescriptors(
|
var descriptors = factory.CreateDescriptors(typeSymbol, errorSink);
|
||||||
AssemblyName,
|
|
||||||
typeSymbol,
|
|
||||||
errorSink: errorSink);
|
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Empty(errorSink.Errors);
|
Assert.Empty(errorSink.Errors);
|
||||||
|
|
@ -1293,10 +1254,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
|
||||||
var typeSymbol = Compilation.GetTypeByMetadataName(typeof(NonPublicAccessorTagHelper).FullName);
|
var typeSymbol = Compilation.GetTypeByMetadataName(typeof(NonPublicAccessorTagHelper).FullName);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var descriptors = factory.CreateDescriptors(
|
var descriptors = factory.CreateDescriptors(typeSymbol, errorSink);
|
||||||
AssemblyName,
|
|
||||||
typeSymbol,
|
|
||||||
errorSink: errorSink);
|
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Empty(errorSink.Errors);
|
Assert.Empty(errorSink.Errors);
|
||||||
|
|
@ -1326,9 +1284,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
|
||||||
var typeSymbol = Compilation.GetTypeByMetadataName(typeof(NotBoundAttributeTagHelper).FullName);
|
var typeSymbol = Compilation.GetTypeByMetadataName(typeof(NotBoundAttributeTagHelper).FullName);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var descriptors = factory.CreateDescriptors(
|
var descriptors = factory.CreateDescriptors(typeSymbol,
|
||||||
AssemblyName,
|
|
||||||
typeSymbol,
|
|
||||||
errorSink: errorSink);
|
errorSink: errorSink);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
|
@ -1346,10 +1302,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
|
||||||
var typeSymbol = Compilation.GetTypeByMetadataName(typeof(DuplicateAttributeNameTagHelper).FullName);
|
var typeSymbol = Compilation.GetTypeByMetadataName(typeof(DuplicateAttributeNameTagHelper).FullName);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var descriptors = factory.CreateDescriptors(
|
var descriptors = factory.CreateDescriptors(typeSymbol, errorSink);
|
||||||
AssemblyName,
|
|
||||||
typeSymbol,
|
|
||||||
errorSink: errorSink);
|
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Empty(descriptors);
|
Assert.Empty(descriptors);
|
||||||
|
|
@ -1396,10 +1349,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
|
||||||
var typeSymbol = Compilation.GetTypeByMetadataName(typeof(MultiTagTagHelper).FullName);
|
var typeSymbol = Compilation.GetTypeByMetadataName(typeof(MultiTagTagHelper).FullName);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var descriptors = factory.CreateDescriptors(
|
var descriptors = factory.CreateDescriptors(typeSymbol, errorSink);
|
||||||
AssemblyName,
|
|
||||||
typeSymbol,
|
|
||||||
errorSink: errorSink);
|
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Empty(errorSink.Errors);
|
Assert.Empty(errorSink.Errors);
|
||||||
|
|
@ -1429,10 +1379,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
|
||||||
var typeSymbol = Compilation.GetTypeByMetadataName(typeof(InheritedMultiTagTagHelper).FullName);
|
var typeSymbol = Compilation.GetTypeByMetadataName(typeof(InheritedMultiTagTagHelper).FullName);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var descriptors = factory.CreateDescriptors(
|
var descriptors = factory.CreateDescriptors(typeSymbol, errorSink);
|
||||||
AssemblyName,
|
|
||||||
typeSymbol,
|
|
||||||
errorSink: errorSink);
|
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Empty(errorSink.Errors);
|
Assert.Empty(errorSink.Errors);
|
||||||
|
|
@ -1460,10 +1407,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
|
||||||
var typeSymbol = Compilation.GetTypeByMetadataName(typeof(DuplicateTagNameTagHelper).FullName);
|
var typeSymbol = Compilation.GetTypeByMetadataName(typeof(DuplicateTagNameTagHelper).FullName);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var descriptors = factory.CreateDescriptors(
|
var descriptors = factory.CreateDescriptors(typeSymbol, errorSink);
|
||||||
AssemblyName,
|
|
||||||
typeSymbol,
|
|
||||||
errorSink: errorSink);
|
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Empty(errorSink.Errors);
|
Assert.Empty(errorSink.Errors);
|
||||||
|
|
@ -1491,10 +1435,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
|
||||||
var typeSymbol = Compilation.GetTypeByMetadataName(typeof(OverrideNameTagHelper).FullName);
|
var typeSymbol = Compilation.GetTypeByMetadataName(typeof(OverrideNameTagHelper).FullName);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var descriptors = factory.CreateDescriptors(
|
var descriptors = factory.CreateDescriptors(typeSymbol, errorSink);
|
||||||
AssemblyName,
|
|
||||||
typeSymbol,
|
|
||||||
errorSink: errorSink);
|
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Empty(errorSink.Errors);
|
Assert.Empty(errorSink.Errors);
|
||||||
|
|
@ -1666,10 +1607,7 @@ public class DynamicTestTagHelper : {typeof(AspNetCore.Razor.TagHelpers.TagHelpe
|
||||||
var typeSymbol = Compilation.GetTypeByMetadataName(type.FullName);
|
var typeSymbol = Compilation.GetTypeByMetadataName(type.FullName);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var descriptors = factory.CreateDescriptors(
|
var descriptors = factory.CreateDescriptors(typeSymbol, errorSink);
|
||||||
AssemblyName,
|
|
||||||
typeSymbol,
|
|
||||||
errorSink: errorSink);
|
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
var actualErrors = errorSink.Errors.ToArray();
|
var actualErrors = errorSink.Errors.ToArray();
|
||||||
|
|
@ -2167,10 +2105,7 @@ public class DynamicTestTagHelper : {typeof(AspNetCore.Razor.TagHelpers.TagHelpe
|
||||||
var typeSymbol = Compilation.GetTypeByMetadataName(typeof(object).FullName);
|
var typeSymbol = Compilation.GetTypeByMetadataName(typeof(object).FullName);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var descriptors = factory.CreateDescriptors(
|
var descriptors = factory.CreateDescriptors(typeSymbol, errorSink);
|
||||||
objectAssemblyName,
|
|
||||||
typeSymbol,
|
|
||||||
errorSink: errorSink);
|
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Empty(errorSink.Errors);
|
Assert.Empty(errorSink.Errors);
|
||||||
|
|
@ -2191,10 +2126,7 @@ public class DynamicTestTagHelper : {typeof(AspNetCore.Razor.TagHelpers.TagHelpe
|
||||||
var typeSymbol = Compilation.GetTypeByMetadataName(tagHelperType.FullName);
|
var typeSymbol = Compilation.GetTypeByMetadataName(tagHelperType.FullName);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var descriptors = factory.CreateDescriptors(
|
var descriptors = factory.CreateDescriptors(typeSymbol, errorSink);
|
||||||
AssemblyName,
|
|
||||||
typeSymbol,
|
|
||||||
errorSink: errorSink);
|
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
var errors = errorSink.Errors.ToArray();
|
var errors = errorSink.Errors.ToArray();
|
||||||
|
|
@ -2337,10 +2269,7 @@ public class DynamicTestTagHelper : {typeof(AspNetCore.Razor.TagHelpers.TagHelpe
|
||||||
var typeSymbol = Compilation.GetTypeByMetadataName(tagHelperType.FullName);
|
var typeSymbol = Compilation.GetTypeByMetadataName(tagHelperType.FullName);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var descriptors = factory.CreateDescriptors(
|
var descriptors = factory.CreateDescriptors(typeSymbol, errorSink);
|
||||||
AssemblyName,
|
|
||||||
typeSymbol,
|
|
||||||
errorSink: errorSink);
|
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Empty(errorSink.Errors);
|
Assert.Empty(errorSink.Errors);
|
||||||
|
|
@ -2381,10 +2310,7 @@ public class DocumentedTagHelper : " + typeof(AspNetCore.Razor.TagHelpers.TagHel
|
||||||
};
|
};
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var descriptors = factory.CreateDescriptors(
|
var descriptors = factory.CreateDescriptors(typeSymbol, errorSink);
|
||||||
AssemblyName,
|
|
||||||
typeSymbol,
|
|
||||||
errorSink: errorSink);
|
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Empty(errorSink.Errors);
|
Assert.Empty(errorSink.Errors);
|
||||||
|
|
@ -2441,10 +2367,7 @@ public class DocumentedTagHelper : " + typeof(AspNetCore.Razor.TagHelpers.TagHel
|
||||||
};
|
};
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var descriptors = factory.CreateDescriptors(
|
var descriptors = factory.CreateDescriptors(typeSymbol, errorSink);
|
||||||
AssemblyName,
|
|
||||||
typeSymbol,
|
|
||||||
errorSink: errorSink);
|
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Empty(errorSink.Errors);
|
Assert.Empty(errorSink.Errors);
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0">
|
<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0">
|
||||||
<Import Project="..\..\build\common.props" />
|
<Import Project="..\..\build\common.props" />
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue