2
2
// Copyright (c) Unity Technologies. For terms of use, see
3
3
// https://unity3d.com/legal/licenses/Unity_Reference_Only_License
4
4
5
- using UnityEngine ;
5
+ using System ;
6
6
using System . Collections . Generic ;
7
+ using System . IO ;
7
8
using System . Linq ;
8
- using UnityEditorInternal ;
9
- using UnityEditor . Scripting . ScriptCompilation ;
10
- using UnityEditor . Experimental . AssetImporters ;
11
9
using UnityEditor . Compilation ;
12
- using System ;
13
- using System . IO ;
10
+ using UnityEditor . Experimental . AssetImporters ;
11
+ using UnityEditor . Scripting . ScriptCompilation ;
12
+ using UnityEditorInternal ;
13
+ using UnityEngine ;
14
14
using AssemblyFlags = UnityEditor . Scripting . ScriptCompilation . AssemblyFlags ;
15
15
using Object = UnityEngine . Object ;
16
16
@@ -41,8 +41,41 @@ internal class Styles
41
41
public static readonly GUIContent loadError = EditorGUIUtility . TrTextContent ( "Load error" ) ;
42
42
public static readonly GUIContent expressionOutcome = EditorGUIUtility . TrTextContent ( "Expression outcome" , "Shows the mathematical equation that your Expression represents." ) ;
43
43
public static readonly GUIContent noEngineReferences = EditorGUIUtility . TrTextContent ( "No Engine References" , "When enabled, references to UnityEngine/UnityEditor will not be added when compiling this assembly." ) ;
44
- public static readonly GUIContent validDefineConstraint = new GUIContent ( EditorGUIUtility . FindTexture ( "TestPassed" ) , L10n . Tr ( "Define constraint is valid." ) ) ;
45
- public static readonly GUIContent invalidDefineConstraint = new GUIContent ( EditorGUIUtility . FindTexture ( "TestFailed" ) , L10n . Tr ( "Define constraint is invalid." ) ) ;
44
+
45
+ public const int kValidityIconHeight = 16 ;
46
+ public const int kValidityIconWidth = 16 ;
47
+ static readonly Texture2D kValidDefineConstraint = EditorGUIUtility . FindTexture ( "Valid" ) ;
48
+ static readonly Texture2D kValidDefineConstraintHighDpi = EditorGUIUtility . FindTexture ( "Valid@2x" ) ;
49
+ static readonly Texture2D kInvalidDefineConstraint = EditorGUIUtility . FindTexture ( "Invalid" ) ;
50
+ static readonly Texture2D kInvalidDefineConstraintHighDpi = EditorGUIUtility . FindTexture ( "Invalid@2x" ) ;
51
+
52
+ public static Texture2D validDefineConstraint => EditorGUIUtility . pixelsPerPoint > 1 ? kValidDefineConstraintHighDpi : kValidDefineConstraint ;
53
+ public static Texture2D invalidDefineConstraint => EditorGUIUtility . pixelsPerPoint > 1 ? kInvalidDefineConstraintHighDpi : kInvalidDefineConstraint ;
54
+
55
+ static string kCompatibleTextTitle = L10n . Tr ( "Define constraints are compatible." ) ;
56
+ static string kIncompatibleTextTitle = L10n . Tr ( "One or more define constraints are invalid or incompatible." ) ;
57
+
58
+ public static string GetTitleTooltipFromDefineConstraintCompatibility ( bool compatible )
59
+ {
60
+ return compatible ? kCompatibleTextTitle : kIncompatibleTextTitle ;
61
+ }
62
+
63
+ static string kCompatibleTextIndividual = L10n . Tr ( "Define constraint is compatible." ) ;
64
+ static string kIncompatibleTextIndividual = L10n . Tr ( "Define constraint is incompatible." ) ;
65
+ static string kInvalidTextIndividual = L10n . Tr ( "Define constraint is invalid." ) ;
66
+
67
+ public static string GetIndividualTooltipFromDefineConstraintStatus ( DefineConstraintsHelper . DefineConstraintStatus status )
68
+ {
69
+ switch ( status )
70
+ {
71
+ case DefineConstraintsHelper . DefineConstraintStatus . Compatible :
72
+ return Styles . kCompatibleTextIndividual ;
73
+ case DefineConstraintsHelper . DefineConstraintStatus . Incompatible :
74
+ return Styles . kIncompatibleTextIndividual ;
75
+ default :
76
+ return Styles . kInvalidTextIndividual ;
77
+ }
78
+ }
46
79
}
47
80
48
81
GUIStyle m_TextStyle ;
@@ -119,7 +152,6 @@ class AssemblyDefinitionState : ScriptableObject
119
152
SerializedProperty m_PlatformCompatibility ;
120
153
SerializedProperty m_NoEngineReferences ;
121
154
122
- string [ ] m_Defines ;
123
155
Exception initializeException ;
124
156
125
157
public override bool showImportedObject => false ;
@@ -128,8 +160,6 @@ public override void OnEnable()
128
160
{
129
161
base . OnEnable ( ) ;
130
162
m_AssemblyName = extraDataSerializedObject . FindProperty ( "assemblyName" ) ;
131
- m_Defines = CompilationPipeline . GetDefinesFromAssemblyName ( m_AssemblyName . stringValue ) ;
132
-
133
163
InitializeReorderableLists ( ) ;
134
164
m_SemVersionRanges = new SemVersionRangesFactory ( ) ;
135
165
m_AllowUnsafeCode = extraDataSerializedObject . FindProperty ( "allowUnsafeCode" ) ;
@@ -139,6 +169,21 @@ public override void OnEnable()
139
169
m_CompatibleWithAnyPlatform = extraDataSerializedObject . FindProperty ( "compatibleWithAnyPlatform" ) ;
140
170
m_PlatformCompatibility = extraDataSerializedObject . FindProperty ( "platformCompatibility" ) ;
141
171
m_NoEngineReferences = extraDataSerializedObject . FindProperty ( "noEngineReferences" ) ;
172
+
173
+ AssemblyReloadEvents . afterAssemblyReload += AfterAssemblyReload ;
174
+ }
175
+
176
+ public override void OnDisable ( )
177
+ {
178
+ base . OnDisable ( ) ;
179
+ AssemblyReloadEvents . afterAssemblyReload -= AfterAssemblyReload ;
180
+ }
181
+
182
+ void AfterAssemblyReload ( )
183
+ {
184
+ var selector = ( ObjectSelector ) WindowLayout . FindEditorWindowOfType ( typeof ( ObjectSelector ) ) ;
185
+ if ( selector != null && selector . hasFocus )
186
+ selector . Close ( ) ;
142
187
}
143
188
144
189
public override void OnInspectorGUI ( )
@@ -178,33 +223,41 @@ public override void OnInspectorGUI()
178
223
EditorGUILayout . EndVertical ( ) ;
179
224
GUILayout . Space ( 10f ) ;
180
225
226
+ EditorGUILayout . BeginHorizontal ( ) ;
181
227
GUILayout . Label ( Styles . defineConstraints , EditorStyles . boldLabel ) ;
228
+ GUILayout . FlexibleSpace ( ) ;
229
+ EditorGUILayout . EndHorizontal ( ) ;
230
+
182
231
if ( m_DefineConstraints . serializedProperty . arraySize > 0 )
183
232
{
184
- var defineConstraintsValid = true ;
185
- for ( var i = 0 ; i < m_DefineConstraints . serializedProperty . arraySize && defineConstraintsValid ; ++ i )
233
+ var defineConstraintsCompatible = true ;
234
+
235
+ var defines = CompilationPipeline . GetDefinesFromAssemblyName ( m_AssemblyName . stringValue ) ;
236
+
237
+ if ( defines != null )
186
238
{
187
- var defineConstraint = m_DefineConstraints . serializedProperty . GetArrayElementAtIndex ( i ) . FindPropertyRelative ( "name" ) . stringValue ;
188
- if ( ! DefineConstraintsHelper . IsDefineConstraintValid ( m_Defines , defineConstraint ) )
239
+ for ( var i = 0 ; i < m_DefineConstraints . serializedProperty . arraySize && defineConstraintsCompatible ; ++ i )
189
240
{
190
- defineConstraintsValid = false ;
241
+ var defineConstraint = m_DefineConstraints . serializedProperty . GetArrayElementAtIndex ( i ) . FindPropertyRelative ( "name" ) . stringValue ;
242
+
243
+ if ( DefineConstraintsHelper . GetDefineConstraintCompatibility ( defines , defineConstraint ) != DefineConstraintsHelper . DefineConstraintStatus . Compatible )
244
+ {
245
+ defineConstraintsCompatible = false ;
246
+ }
191
247
}
192
- }
193
- var constraintValidityRect = new Rect ( GUILayoutUtility . GetLastRect ( ) ) ;
194
- constraintValidityRect . x += constraintValidityRect . width - 23 ;
195
- if ( defineConstraintsValid )
196
- {
197
- constraintValidityRect . width = Styles . validDefineConstraint . image . width ;
198
- constraintValidityRect . height = Styles . validDefineConstraint . image . height ;
199
- EditorGUI . LabelField ( constraintValidityRect , Styles . validDefineConstraint ) ;
200
- }
201
- else
202
- {
203
- constraintValidityRect . width = Styles . invalidDefineConstraint . image . width ;
204
- constraintValidityRect . height = Styles . invalidDefineConstraint . image . height ;
205
- EditorGUI . LabelField ( constraintValidityRect , Styles . invalidDefineConstraint ) ;
248
+
249
+ var constraintValidityRect = new Rect ( GUILayoutUtility . GetLastRect ( ) ) ;
250
+ constraintValidityRect . x += constraintValidityRect . width - 23 ;
251
+ var image = defineConstraintsCompatible ? Styles . validDefineConstraint : Styles . invalidDefineConstraint ;
252
+ var tooltip = Styles . GetTitleTooltipFromDefineConstraintCompatibility ( defineConstraintsCompatible ) ;
253
+ var content = new GUIContent ( image , tooltip ) ;
254
+
255
+ constraintValidityRect . width = Styles . kValidityIconWidth ;
256
+ constraintValidityRect . height = Styles . kValidityIconHeight ;
257
+ EditorGUI . LabelField ( constraintValidityRect , content ) ;
206
258
}
207
259
}
260
+
208
261
m_DefineConstraints . DoLayoutList ( ) ;
209
262
210
263
GUILayout . Label ( Styles . references , EditorStyles . boldLabel ) ;
@@ -233,7 +286,6 @@ public override void OnInspectorGUI()
233
286
}
234
287
}
235
288
236
-
237
289
GUILayout . Label ( Styles . platforms , EditorStyles . boldLabel ) ;
238
290
EditorGUILayout . BeginVertical ( GUI . skin . box ) ;
239
291
@@ -251,6 +303,7 @@ public override void OnInspectorGUI()
251
303
{
252
304
InversePlatformCompatibility ( state ) ;
253
305
}
306
+
254
307
extraDataSerializedObject . Update ( ) ;
255
308
}
256
309
}
@@ -272,6 +325,7 @@ public override void OnInspectorGUI()
272
325
{
273
326
property = m_PlatformCompatibility . GetArrayElementAtIndex ( i ) ;
274
327
}
328
+
275
329
EditorGUILayout . PropertyField ( property , new GUIContent ( platforms [ i ] . DisplayName ) ) ;
276
330
}
277
331
@@ -322,6 +376,7 @@ public override void OnInspectorGUI()
322
376
protected override void Apply ( )
323
377
{
324
378
base . Apply ( ) ;
379
+
325
380
// Do not write back to the asset if no asset can be found.
326
381
if ( assetTarget != null )
327
382
SaveAndUpdateAssemblyDefinitionStates ( extraDataTargets . Cast < AssemblyDefinitionState > ( ) . ToArray ( ) ) ;
@@ -398,8 +453,6 @@ private void DrawDefineConstraintListElement(Rect rect, int index, bool isactive
398
453
399
454
var textFieldRect = new Rect ( rect . x , rect . y + 1 , rect . width - ReorderableList . Defaults . dragHandleWidth + 1 , rect . height ) ;
400
455
401
- var constraintValidityRect = new Rect ( rect . width + ReorderableList . Defaults . dragHandleWidth + ReorderableList . Defaults . dragHandleWidth / 2f - Styles . invalidDefineConstraint . image . width / 2f , rect . y , ReorderableList . Defaults . dragHandleWidth , rect . height ) ;
402
-
403
456
string noValue = L10n . Tr ( "(Missing)" ) ;
404
457
405
458
var label = string . IsNullOrEmpty ( defineConstraint . stringValue ) ? noValue : defineConstraint . stringValue ;
@@ -408,20 +461,17 @@ private void DrawDefineConstraintListElement(Rect rect, int index, bool isactive
408
461
var textFieldValue = EditorGUI . TextField ( textFieldRect , mixed ? L10n . Tr ( "(Multiple Values)" ) : label ) ;
409
462
EditorGUI . showMixedValue = false ;
410
463
411
- if ( m_Defines != null )
464
+ var defines = CompilationPipeline . GetDefinesFromAssemblyName ( m_AssemblyName . stringValue ) ;
465
+
466
+ if ( defines != null )
412
467
{
413
- if ( DefineConstraintsHelper . IsDefineConstraintValid ( m_Defines , defineConstraint . stringValue ) )
414
- {
415
- constraintValidityRect . width = Styles . validDefineConstraint . image . width ;
416
- constraintValidityRect . height = Styles . validDefineConstraint . image . height ;
417
- EditorGUI . LabelField ( constraintValidityRect , Styles . validDefineConstraint ) ;
418
- }
419
- else
420
- {
421
- constraintValidityRect . width = Styles . invalidDefineConstraint . image . width ;
422
- constraintValidityRect . height = Styles . invalidDefineConstraint . image . height ;
423
- EditorGUI . LabelField ( constraintValidityRect , Styles . invalidDefineConstraint ) ;
424
- }
468
+ var status = DefineConstraintsHelper . GetDefineConstraintCompatibility ( defines , defineConstraint . stringValue ) ;
469
+ var image = status == DefineConstraintsHelper . DefineConstraintStatus . Compatible ? Styles . validDefineConstraint : Styles . invalidDefineConstraint ;
470
+
471
+ var content = new GUIContent ( image , Styles . GetIndividualTooltipFromDefineConstraintStatus ( status ) ) ;
472
+
473
+ var constraintValidityRect = new Rect ( rect . width + ReorderableList . Defaults . dragHandleWidth + ReorderableList . Defaults . dragHandleWidth / 2f - Styles . kValidityIconWidth / 2f + 1 , rect . y , Styles . kValidityIconWidth , Styles . kValidityIconHeight ) ;
474
+ EditorGUI . LabelField ( constraintValidityRect , content ) ;
425
475
}
426
476
427
477
if ( ! string . IsNullOrEmpty ( textFieldValue ) && textFieldValue != noValue )
@@ -619,19 +669,10 @@ static void LoadAssemblyDefinitionState(AssemblyDefinitionState state, string pa
619
669
{
620
670
foreach ( var defineConstraint in data . defineConstraints )
621
671
{
622
- var symbolName = defineConstraint . StartsWith ( DefineConstraintsHelper . Not ) ? defineConstraint . Substring ( 1 ) : defineConstraint ;
623
- if ( ! SymbolNameRestrictions . IsValid ( symbolName ) )
624
- {
625
- var exception = new AssemblyDefinitionException ( $ "Invalid define constraint { symbolName } ", path ) ;
626
- Debug . LogException ( exception , asset ) ;
627
- }
628
- else
672
+ state . defineConstraints . Add ( new DefineConstraint
629
673
{
630
- state . defineConstraints . Add ( new DefineConstraint
631
- {
632
- name = defineConstraint ,
633
- } ) ;
634
- }
674
+ name = defineConstraint ,
675
+ } ) ;
635
676
}
636
677
}
637
678
@@ -683,6 +724,7 @@ static void LoadAssemblyDefinitionState(AssemblyDefinitionState state, string pa
683
724
precompiledReference . path = assembly . Path ;
684
725
precompiledReference . fileName = AssetPath . GetFileName ( assembly . Path ) ;
685
726
}
727
+
686
728
state . precompiledReferences . Add ( precompiledReference ) ;
687
729
}
688
730
catch ( AssemblyDefinitionException e )
0 commit comments