@@ -18,7 +18,8 @@ import {
1818 ContextResolverFunction ,
1919 CopilotApi ,
2020 ContextProviderRegistrationError ,
21- ContextProviderResolverError
21+ ContextProviderResolverError ,
22+ sendContextResolutionTelemetry
2223} from './utils' ;
2324
2425export async function registerCopilotContextProviders (
@@ -70,70 +71,95 @@ function createJavaContextResolver(): ContextResolverFunction {
7071 } ;
7172}
7273
73- /**
74- * Send telemetry data for Java context resolution
75- */
76- function sendContextTelemetry ( request : ResolveRequest , start : number , items : SupportedContextItem [ ] , status : string , error ?: string ) {
77- const duration = Math . round ( performance . now ( ) - start ) ;
78- const tokenCount = JavaContextProviderUtils . calculateTokenCount ( items ) ;
79- const telemetryData : any = {
80- "action" : "resolveJavaContext" ,
81- "completionId" : request . completionId ,
82- "duration" : duration ,
83- "itemCount" : items . length ,
84- "tokenCount" : tokenCount ,
85- "status" : status
86- } ;
87- if ( error ) {
88- telemetryData . error = error ;
89- }
90- sendInfo ( "" , telemetryData ) ;
91- }
92-
9374async function resolveJavaContext ( request : ResolveRequest , copilotCancel : vscode . CancellationToken ) : Promise < SupportedContextItem [ ] > {
9475 const items : SupportedContextItem [ ] = [ ] ;
9576 const start = performance . now ( ) ;
77+
78+ let dependenciesResult : CopilotHelper . IResolveResult | undefined ;
79+ let importsResult : CopilotHelper . IResolveResult | undefined ;
80+
9681 try {
9782 // Check for cancellation before starting
9883 JavaContextProviderUtils . checkCancellation ( copilotCancel ) ;
84+
9985 // Resolve project dependencies and convert to context items
100- const projectDependencyItems = await CopilotHelper . resolveAndConvertProjectDependencies (
86+ dependenciesResult = await CopilotHelper . resolveAndConvertProjectDependencies (
10187 vscode . window . activeTextEditor ,
10288 copilotCancel ,
10389 JavaContextProviderUtils . checkCancellation
10490 ) ;
10591 JavaContextProviderUtils . checkCancellation ( copilotCancel ) ;
106- items . push ( ...projectDependencyItems ) ;
92+ items . push ( ...dependenciesResult . items ) ;
10793
10894 JavaContextProviderUtils . checkCancellation ( copilotCancel ) ;
10995
11096 // Resolve local imports and convert to context items
111- const localImportItems = await CopilotHelper . resolveAndConvertLocalImports (
97+ importsResult = await CopilotHelper . resolveAndConvertLocalImports (
11298 vscode . window . activeTextEditor ,
11399 copilotCancel ,
114100 JavaContextProviderUtils . checkCancellation
115101 ) ;
116102 JavaContextProviderUtils . checkCancellation ( copilotCancel ) ;
117- items . push ( ...localImportItems ) ;
103+ items . push ( ...importsResult . items ) ;
118104 } catch ( error : any ) {
119105 if ( error instanceof CopilotCancellationError ) {
120- sendContextTelemetry ( request , start , items , "cancelled_by_copilot" ) ;
106+ sendContextResolutionTelemetry (
107+ request ,
108+ start ,
109+ items ,
110+ "cancelled_by_copilot" ,
111+ undefined ,
112+ dependenciesResult ?. emptyReason ,
113+ importsResult ?. emptyReason ,
114+ dependenciesResult ?. itemCount ,
115+ importsResult ?. itemCount
116+ ) ;
121117 throw error ;
122118 }
123119 if ( error instanceof vscode . CancellationError || error . message === CancellationError . CANCELED ) {
124- sendContextTelemetry ( request , start , items , "cancelled_internally" ) ;
120+ sendContextResolutionTelemetry (
121+ request ,
122+ start ,
123+ items ,
124+ "cancelled_internally" ,
125+ undefined ,
126+ dependenciesResult ?. emptyReason ,
127+ importsResult ?. emptyReason ,
128+ dependenciesResult ?. itemCount ,
129+ importsResult ?. itemCount
130+ ) ;
125131 throw new InternalCancellationError ( ) ;
126132 }
127133
128134 // Send telemetry for general errors (but continue with partial results)
129- sendContextTelemetry ( request , start , items , "error_partial_results" , error . message || "unknown_error" ) ;
135+ sendContextResolutionTelemetry (
136+ request ,
137+ start ,
138+ items ,
139+ "error_partial_results" ,
140+ error . message || "unknown_error" ,
141+ dependenciesResult ?. emptyReason ,
142+ importsResult ?. emptyReason ,
143+ dependenciesResult ?. itemCount ,
144+ importsResult ?. itemCount
145+ ) ;
130146
131147 // Return partial results and log completion for error case
132148 return items ;
133149 }
134150
135151 // Send telemetry data once at the end for success case
136- sendContextTelemetry ( request , start , items , "succeeded" ) ;
152+ sendContextResolutionTelemetry (
153+ request ,
154+ start ,
155+ items ,
156+ "succeeded" ,
157+ undefined ,
158+ dependenciesResult ?. emptyReason ,
159+ importsResult ?. emptyReason ,
160+ dependenciesResult ?. itemCount ,
161+ importsResult ?. itemCount
162+ ) ;
137163
138164 return items ;
139165}
0 commit comments