@@ -22,7 +22,7 @@ internal class ComponentMethodDrawer: IReflectorDrawer {
2222 private MethodPropertyDrawer result ;
2323 private Exception thrownException ;
2424 private string filter ;
25- private readonly Type ctorType ;
25+ private readonly Type ctorType , targetType ;
2626 private bool titleFolded = true , paramsFolded = true , resultFolded = true ,
2727 drawHeader = true , privateFields = true , obsolete = true ;
2828 private MethodMode mode = 0 ;
@@ -83,9 +83,10 @@ public ComponentMethodDrawer() {
8383 showResultSelector . valueChanged . AddListener ( RequireRedraw ) ;
8484 }
8585
86- public ComponentMethodDrawer ( object target )
86+ public ComponentMethodDrawer ( object target , Type type = null )
8787 : this ( ) {
8888 component = target ;
89+ targetType = type ?? target . GetType ( ) ;
8990 drawHeader = false ;
9091 showMethodSelector . value = true ;
9192 InitComponentMethods ( ) ;
@@ -113,7 +114,8 @@ public void Call() {
113114 return ;
114115 switch ( mode ) {
115116 case MethodMode . Constructor : if ( ctorType == null ) return ; break ;
116- case MethodMode . Method : default : if ( component == null ) return ; break ;
117+ case MethodMode . Method : if ( component == null && Helper . IsInstanceMember ( selectedMember ) ) return ; break ;
118+ default : if ( component == null ) return ; break ;
117119 }
118120 try {
119121 thrownException = null ;
@@ -165,12 +167,10 @@ public void Call() {
165167
166168 public void Draw ( ) {
167169 if ( drawHeader ) {
168- EditorGUI . BeginDisabledGroup ( component == null ) ;
169- titleFolded = EditorGUILayout . InspectorTitlebar ( titleFolded , component as UnityObject ) || component == null ;
170- EditorGUI . EndDisabledGroup ( ) ;
170+ titleFolded = EditorGUILayout . InspectorTitlebar ( titleFolded , component as UnityObject ) ;
171171 }
172172 GUI . changed = false ;
173- if ( component == null || titleFolded || ! drawHeader ) {
173+ if ( titleFolded || ! drawHeader ) {
174174 if ( drawHeader ) {
175175 EditorGUI . indentLevel ++ ;
176176 EditorGUILayout . BeginVertical ( ) ;
@@ -179,7 +179,7 @@ public void Draw() {
179179 if ( mode != MethodMode . Indexer || result == null )
180180 EditorGUILayout . Space ( ) ;
181181 if ( mode == MethodMode . Constructor ||
182- ( mode == MethodMode . Method && component != null ) ||
182+ ( mode == MethodMode . Method && ( component != null || ! Helper . IsInstanceMember ( selectedMember ) ) ) ||
183183 ( mode == MethodMode . Indexer && component != null && result == null ) ) {
184184 if ( GUI . changed ) {
185185 InitComponentMethods ( ) ;
@@ -223,7 +223,9 @@ private bool FilterMemberInfo(MemberInfo m) {
223223 }
224224
225225 private void AddComponentMethod ( Type type ) {
226- BindingFlags flag = BindingFlags . Instance | BindingFlags . Static | BindingFlags . Public ;
226+ BindingFlags flag = BindingFlags . Static | BindingFlags . Public ;
227+ if ( component != null )
228+ flag |= BindingFlags . Instance ;
227229 if ( privateFields )
228230 flag |= BindingFlags . NonPublic ;
229231 methods . AddRange (
@@ -245,11 +247,14 @@ where FilterMemberInfo(m) && m.ReturnType == type
245247 ) ;
246248 }
247249
248- private void AddComponentMethod ( object target ) {
249- BindingFlags flag = BindingFlags . Instance | BindingFlags . Static | BindingFlags . Public ;
250+ private void AddComponentMethod ( object target , Type type = null ) {
251+ BindingFlags flag = BindingFlags . Static | BindingFlags . Public ;
250252 if ( privateFields )
251253 flag |= BindingFlags . NonPublic ;
252- Type type = target . GetType ( ) ;
254+ if ( target != null )
255+ flag |= BindingFlags . Instance ;
256+ if ( type == null )
257+ type = target . GetType ( ) ;
253258 methods . AddRange (
254259 from m in type . GetProperties ( flag )
255260 where FilterMemberInfo ( m ) && m . GetIndexParameters ( ) . Length > 0
@@ -278,7 +283,7 @@ private void InitComponentMethods(bool resetIndex = true) {
278283 methodNames = methods . Select ( ( m , i ) => GetMethodNameFormatted ( m , i ) ) . ToArray ( ) ;
279284 break ;
280285 default :
281- AddComponentMethod ( component ) ;
286+ AddComponentMethod ( component , targetType ) ;
282287 break ;
283288 }
284289 if ( drawHeader ) {
@@ -406,6 +411,8 @@ private void DrawMethod() {
406411 EditorGUILayout . BeginVertical ( ) ;
407412 if ( mode != MethodMode . Indexer && ( selectedMember as MethodInfo ) . ContainsGenericParameters )
408413 EditorGUILayout . HelpBox ( "Generic method is not supported." , MessageType . Warning ) ;
414+ if ( mode != MethodMode . Indexer && component == null && Helper . IsInstanceMember ( selectedMember ) )
415+ EditorGUILayout . HelpBox ( "Method requires an exists instance." , MessageType . Warning ) ;
409416 else {
410417 if ( parameterInfo . Length == 0 )
411418 EditorGUILayout . HelpBox ( "There is no parameters required for this method." , MessageType . Info ) ;
0 commit comments