@@ -29,9 +29,15 @@ public class FilterStaticWebAssetEndpoints : Task
29
29
30
30
[ Output ] public ITaskItem [ ] AssetsWithoutMatchingEndpoints { get ; set ; }
31
31
32
+ // Private fields for reusable collections and criteria
33
+ private FilterCriteria [ ] _filterCriteria ;
34
+ private readonly List < StaticWebAssetEndpointProperty > _propertiesList = new ( ) ;
35
+ private readonly List < StaticWebAssetEndpointSelector > _selectorsList = new ( ) ;
36
+ private readonly List < StaticWebAssetEndpointResponseHeader > _headersList = new ( ) ;
37
+
32
38
public override bool Execute ( )
33
39
{
34
- var filterCriteria = ( Filters ?? [ ] ) . Select ( FilterCriteria . FromTaskItem ) . ToArray ( ) ;
40
+ _filterCriteria = ( Filters ?? [ ] ) . Select ( FilterCriteria . FromTaskItem ) . ToArray ( ) ;
35
41
var assetFiles = Assets != null ? StaticWebAsset . ToAssetDictionary ( Assets ) : [ ] ;
36
42
var endpoints = StaticWebAssetEndpoint . FromItemGroup ( Endpoints ?? [ ] ) ;
37
43
var endpointFoundMatchingAsset = new Dictionary < string , StaticWebAsset > ( ) ;
@@ -46,7 +52,7 @@ public override bool Execute()
46
52
continue ;
47
53
}
48
54
49
- if ( MeetsAllCriteria ( endpoint , asset , filterCriteria , out var failingCriteria ) )
55
+ if ( MeetsAllCriteria ( endpoint , asset , out var failingCriteria ) )
50
56
{
51
57
if ( asset != null && ! endpointFoundMatchingAsset . ContainsKey ( asset . Identity ) )
52
58
{
@@ -73,18 +79,27 @@ public override bool Execute()
73
79
return ! Log . HasLoggedErrors ;
74
80
}
75
81
76
- private static bool MeetsAllCriteria ( StaticWebAssetEndpoint endpoint , StaticWebAsset asset , FilterCriteria [ ] filterCriteria , out FilterCriteria failingCriteria )
82
+ private bool MeetsAllCriteria (
83
+ StaticWebAssetEndpoint endpoint ,
84
+ StaticWebAsset asset ,
85
+ out FilterCriteria failingCriteria )
77
86
{
78
- for ( var i = 0 ; i < filterCriteria . Length ; i ++ )
87
+ for ( var i = 0 ; i < _filterCriteria . Length ; i ++ )
79
88
{
80
- var criteria = filterCriteria [ i ] ;
89
+ var criteria = _filterCriteria [ i ] ;
81
90
switch ( criteria . Type )
82
91
{
83
92
case "Property" :
84
93
var meetsPropertyCriteria = criteria . ExcludeOnMatch ( ) ;
85
- for ( var j = 0 ; j < endpoint . EndpointProperties . Length ; j ++ )
94
+
95
+ // Parse properties from string to avoid accessing endpoint.EndpointProperties array
96
+ _propertiesList . Clear ( ) ;
97
+ var propertiesString = endpoint . EndpointPropertiesString ;
98
+ StaticWebAssetEndpointProperty . PopulateFromMetadataValue ( propertiesString , _propertiesList ) ;
99
+
100
+ for ( var j = 0 ; j < _propertiesList . Count ; j ++ )
86
101
{
87
- var property = endpoint . EndpointProperties [ j ] ;
102
+ var property = _propertiesList [ j ] ;
88
103
if ( MeetsCriteria ( criteria , property . Name , property . Value ) )
89
104
{
90
105
meetsPropertyCriteria = ! criteria . ExcludeOnMatch ( ) ;
@@ -99,9 +114,15 @@ private static bool MeetsAllCriteria(StaticWebAssetEndpoint endpoint, StaticWebA
99
114
break ;
100
115
case "Selector" :
101
116
var meetsSelectorCriteria = criteria . ExcludeOnMatch ( ) ;
102
- for ( var j = 0 ; j < endpoint . Selectors . Length ; j ++ )
117
+
118
+ // Parse selectors from string to avoid accessing endpoint.Selectors array
119
+ _selectorsList . Clear ( ) ;
120
+ var selectorsString = endpoint . SelectorsString ;
121
+ StaticWebAssetEndpointSelector . PopulateFromMetadataValue ( selectorsString , _selectorsList ) ;
122
+
123
+ for ( var j = 0 ; j < _selectorsList . Count ; j ++ )
103
124
{
104
- var selector = endpoint . Selectors [ j ] ;
125
+ var selector = _selectorsList [ j ] ;
105
126
if ( MeetsCriteria ( criteria , selector . Name , selector . Value ) )
106
127
{
107
128
meetsSelectorCriteria = ! criteria . ExcludeOnMatch ( ) ;
@@ -116,9 +137,15 @@ private static bool MeetsAllCriteria(StaticWebAssetEndpoint endpoint, StaticWebA
116
137
break ;
117
138
case "Header" :
118
139
var meetsHeaderCriteria = criteria . ExcludeOnMatch ( ) ;
119
- for ( var j = 0 ; j < endpoint . ResponseHeaders . Length ; j ++ )
140
+
141
+ // Parse headers from string to avoid accessing endpoint.ResponseHeaders array
142
+ _headersList . Clear ( ) ;
143
+ var headersString = endpoint . ResponseHeadersString ;
144
+ StaticWebAssetEndpointResponseHeader . PopulateFromMetadataValue ( headersString , _headersList ) ;
145
+
146
+ for ( var j = 0 ; j < _headersList . Count ; j ++ )
120
147
{
121
- var header = endpoint . ResponseHeaders [ j ] ;
148
+ var header = _headersList [ j ] ;
122
149
if ( MeetsCriteria ( criteria , header . Name , header . Value ) )
123
150
{
124
151
meetsHeaderCriteria = ! criteria . ExcludeOnMatch ( ) ;
0 commit comments