@@ -217,27 +217,34 @@ func newServiceMethodsCmd() *cobra.Command {
217217 ctx := cmd .Context ()
218218 name := args [0 ]
219219
220- conn , err := OpenConn (ctx , cmd )
221- if err != nil {
222- return err
220+ if generatedRegistry == nil {
221+ return fmt .Errorf ("no method registry available" )
223222 }
224- defer conn .Close (ctx )
225223
226- svc , err := conn .GetService (ctx , name )
227- if err != nil {
228- return err
229- }
224+ // Try static lookup first (no binder connection needed).
225+ descriptor , info := lookupServiceStatic (name )
230226
231- descriptor := discovery .QueryDescriptor (ctx , svc )
227+ // Fall back to binder connection for unknown services.
228+ if info == nil {
229+ conn , err := OpenConn (ctx , cmd )
230+ if err != nil {
231+ return err
232+ }
233+ defer conn .Close (ctx )
232234
233- // InterfaceTransaction may return empty on some services.
234- // Fall back to the static knownServiceNames map (reverse lookup).
235- if descriptor == "" || descriptor == "(unknown)" {
236- for desc , svcName := range discovery .KnownServiceNames {
237- if svcName == name {
238- descriptor = desc
239- break
240- }
235+ svc , err := conn .GetService (ctx , name )
236+ if err != nil {
237+ return err
238+ }
239+
240+ descriptor = discovery .QueryDescriptor (ctx , svc )
241+ if descriptor == "" || descriptor == "(unknown)" {
242+ return fmt .Errorf ("cannot determine interface descriptor for service %q" , name )
243+ }
244+
245+ info = generatedRegistry .ByDescriptor (descriptor )
246+ if info == nil {
247+ return fmt .Errorf ("unknown interface %q for service %q — not in registry" , descriptor , name )
241248 }
242249 }
243250
@@ -246,38 +253,18 @@ func newServiceMethodsCmd() *cobra.Command {
246253 return fmt .Errorf ("reading --format flag: %w" , err )
247254 }
248255
249- if generatedRegistry == nil {
250- return fmt .Errorf ("no method registry available" )
251- }
252-
253- info := generatedRegistry .ByDescriptor (descriptor )
254- if info == nil {
255- // Also try looking up by alias (the service name itself).
256- info = generatedRegistry .ByAlias (name )
257- }
258- if info == nil {
259- return fmt .Errorf ("unknown interface %q for service %q — not in registry" , descriptor , name )
260- }
261-
262- table , tableErr := getActiveTable (conn )
263-
264256 f := NewFormatter (mode , os .Stdout )
265257 switch f .Mode {
266258 case "json" :
267259 f .WriteJSON (map [string ]any {
268260 "descriptor" : descriptor ,
269- "methods" : methodsToJSONWithCodes (info .Methods , table , descriptor ),
261+ "methods" : methodsToJSONWithCodes (info .Methods , nil , descriptor ),
270262 })
271263 default :
272264 fmt .Fprintf (f .W , "Interface: %s (%d methods)\n \n " , descriptor , len (info .Methods ))
273- for _ , m := range info .Methods {
274- codeStr := " ???? "
275- if tableErr == nil {
276- if code , ok := resolveMethodToCode (table , descriptor , m .Name ); ok {
277- codeStr = fmt .Sprintf (" 0x%04x" , code )
278- }
279- }
280- fmt .Fprintf (f .W , "%s %s\n " , codeStr , formatMethodSignature (m ))
265+ for i , m := range info .Methods {
266+ code := binder .FirstCallTransaction + binder .TransactionCode (i )
267+ fmt .Fprintf (f .W , " 0x%04x %s\n " , code , formatMethodSignature (m ))
281268 }
282269 }
283270
0 commit comments