Skip to content

Commit db4806a

Browse files
committed
Revert "feat: Enhance the context returned by the context provider (#1518)"
This reverts commit 2e90376.
1 parent 17d1269 commit db4806a

File tree

3 files changed

+12
-145
lines changed

3 files changed

+12
-145
lines changed

src/copilot/context/copilotHelper.ts

Lines changed: 2 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,6 @@ export interface INodeImportClass {
99
uri: string;
1010
className: string; // Changed from 'class' to 'className' to match Java code
1111
}
12-
13-
export interface IProjectDependency {
14-
[key: string]: string;
15-
}
1612
/**
1713
* Helper class for Copilot integration to analyze Java project dependencies
1814
*/
@@ -27,9 +23,8 @@ export namespace CopilotHelper {
2723
if (cancellationToken?.isCancellationRequested) {
2824
return [];
2925
}
30-
3126
// Ensure the Java Dependency extension is installed and meets the minimum version requirement.
32-
if (!await validateExtensionInstalled("vscjava.vscode-java-dependency", "0.26.2")) {
27+
if (!await validateExtensionInstalled("vscjava.vscode-java-dependency", "0.26.0")) {
3328
return [];
3429
}
3530

@@ -48,23 +43,11 @@ export namespace CopilotHelper {
4843
cancellationToken.onCancellationRequested(() => {
4944
reject(new Error('Operation cancelled'));
5045
});
51-
}),
52-
new Promise<INodeImportClass[]>((_, reject) => {
53-
setTimeout(() => {
54-
reject(new Error('Operation timed out'));
55-
}, 80); // 80ms timeout
5646
})
5747
]);
5848
return result || [];
5949
} else {
60-
const result = await Promise.race([
61-
commandPromise,
62-
new Promise<INodeImportClass[]>((_, reject) => {
63-
setTimeout(() => {
64-
reject(new Error('Operation timed out'));
65-
}, 80); // 80ms timeout
66-
})
67-
]);
50+
const result = await commandPromise;
6851
return result || [];
6952
}
7053
} catch (error: any) {
@@ -76,64 +59,4 @@ export namespace CopilotHelper {
7659
return [];
7760
}
7861
}
79-
80-
/**
81-
* Resolves project dependencies for the given project URI
82-
* @param projectUri The URI of the Java project to analyze
83-
* @param cancellationToken Optional cancellation token to abort the operation
84-
* @returns Object containing project dependencies as key-value pairs
85-
*/
86-
export async function resolveProjectDependencies(projectUri: Uri, cancellationToken?: CancellationToken): Promise<IProjectDependency> {
87-
if (cancellationToken?.isCancellationRequested) {
88-
return {};
89-
}
90-
91-
// Ensure the Java Dependency extension is installed and meets the minimum version requirement.
92-
if (!await validateExtensionInstalled("vscjava.vscode-java-dependency", "0.26.2")) {
93-
return {};
94-
}
95-
96-
if (cancellationToken?.isCancellationRequested) {
97-
return {};
98-
}
99-
100-
try {
101-
// Create a promise that can be cancelled
102-
const commandPromise = commands.executeCommand("java.execute.workspaceCommand", "java.project.getDependencies", projectUri.toString()) as Promise<IProjectDependency>;
103-
//set timeout
104-
if (cancellationToken) {
105-
const result = await Promise.race([
106-
commandPromise,
107-
new Promise<IProjectDependency>((_, reject) => {
108-
cancellationToken.onCancellationRequested(() => {
109-
reject(new Error('Operation cancelled'));
110-
});
111-
}),
112-
new Promise<IProjectDependency>((_, reject) => {
113-
setTimeout(() => {
114-
reject(new Error('Operation timed out'));
115-
}, 40); // 40ms timeout
116-
})
117-
]);
118-
return result || {};
119-
} else {
120-
const result = await Promise.race([
121-
commandPromise,
122-
new Promise<IProjectDependency>((_, reject) => {
123-
setTimeout(() => {
124-
reject(new Error('Operation timed out'));
125-
}, 40); // 40ms timeout
126-
})
127-
]);
128-
return result || {};
129-
}
130-
} catch (error: any) {
131-
if (error.message === 'Operation cancelled') {
132-
logger.info('Resolve project dependencies cancelled');
133-
return {};
134-
}
135-
logger.error("Error resolving project dependencies:", error);
136-
return {};
137-
}
138-
}
13962
}

src/copilot/contextProvider.ts

Lines changed: 10 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import * as vscode from 'vscode';
1111
import { CopilotHelper } from './context/copilotHelper';
1212
import { sendInfo } from "vscode-extension-telemetry-wrapper";
1313
import {
14-
logger,
14+
logger,
1515
JavaContextProviderUtils,
1616
CancellationError,
1717
InternalCancellationError,
@@ -93,15 +93,13 @@ function createJavaContextResolver(): ContextResolverFunction {
9393
/**
9494
* Send telemetry data for Java context resolution
9595
*/
96-
function sendContextTelemetry(request: ResolveRequest, start: number, items: SupportedContextItem[], status: string, error?: string) {
96+
function sendContextTelemetry(request: ResolveRequest, start: number, itemCount: number, status: string, error?: string) {
9797
const duration = Math.round(performance.now() - start);
98-
const tokenCount = JavaContextProviderUtils.calculateTokenCount(items);
9998
const telemetryData: any = {
10099
"action": "resolveJavaContext",
101100
"completionId": request.completionId,
102101
"duration": duration,
103-
"itemCount": items.length,
104-
"tokenCount": tokenCount,
102+
"itemCount": itemCount,
105103
"status": status
106104
};
107105

@@ -130,37 +128,16 @@ async function resolveJavaContext(request: ResolveRequest, copilotCancel: vscode
130128

131129
const document = activeEditor.document;
132130

133-
// Resolve project dependencies first
134-
const projectDependencies = await CopilotHelper.resolveProjectDependencies(document.uri, copilotCancel);
135-
logger.info('Resolved project dependencies count:', Object.keys(projectDependencies).length);
136-
137-
// Check for cancellation after dependency resolution
138-
JavaContextProviderUtils.checkCancellation(copilotCancel);
139-
140-
// Convert project dependencies to Trait items
141-
if (projectDependencies && Object.keys(projectDependencies).length > 0) {
142-
for (const [key, value] of Object.entries(projectDependencies)) {
143-
items.push({
144-
name: key,
145-
value: value,
146-
importance: 50
147-
});
148-
}
149-
}
150-
151-
// Check for cancellation before resolving imports
152-
JavaContextProviderUtils.checkCancellation(copilotCancel);
153-
154131
// Resolve imports directly without caching
155132
const importClass = await CopilotHelper.resolveLocalImports(document.uri, copilotCancel);
156-
logger.info('Resolved imports count:', importClass?.length || 0);
133+
logger.trace('Resolved imports count:', importClass?.length || 0);
157134

158135
// Check for cancellation after resolution
159136
JavaContextProviderUtils.checkCancellation(copilotCancel);
160137

161138
// Check for cancellation before processing results
162139
JavaContextProviderUtils.checkCancellation(copilotCancel);
163-
140+
164141
if (importClass) {
165142
// Process imports in batches to reduce cancellation check overhead
166143
const contextItems = JavaContextProviderUtils.createContextItemsFromImports(importClass);
@@ -172,26 +149,26 @@ async function resolveJavaContext(request: ResolveRequest, copilotCancel: vscode
172149
}
173150
} catch (error: any) {
174151
if (error instanceof CopilotCancellationError) {
175-
sendContextTelemetry(request, start, items, "cancelled_by_copilot");
152+
sendContextTelemetry(request, start, items.length, "cancelled_by_copilot");
176153
throw error;
177154
}
178155
if (error instanceof vscode.CancellationError || error.message === CancellationError.Canceled) {
179-
sendContextTelemetry(request, start, items, "cancelled_internally");
156+
sendContextTelemetry(request, start, items.length, "cancelled_internally");
180157
throw new InternalCancellationError();
181158
}
182159

183160
// Send telemetry for general errors (but continue with partial results)
184-
sendContextTelemetry(request, start, items, "error_partial_results", error.message || "unknown_error");
161+
sendContextTelemetry(request, start, items.length, "error_partial_results", error.message || "unknown_error");
185162

186163
logger.error(`Error resolving Java context for ${documentUri}:${caretOffset}:`, error);
187164

188165
// Return partial results and log completion for error case
189166
JavaContextProviderUtils.logCompletion('Java context resolution', documentUri, caretOffset, start, items.length);
190167
return items;
191168
}
192-
169+
193170
// Send telemetry data once at the end for success case
194-
sendContextTelemetry(request, start, items, "succeeded");
171+
sendContextTelemetry(request, start, items.length, "succeeded");
195172

196173
JavaContextProviderUtils.logCompletion('Java context resolution', documentUri, caretOffset, start, items.length);
197174
return items;

src/copilot/utils.ts

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -301,39 +301,6 @@ export class JavaContextProviderUtils {
301301

302302
return installCount;
303303
}
304-
305-
/**
306-
* Calculate approximate token count for context items
307-
* Using a simple heuristic: ~4 characters per token
308-
* Optimized for performance by using reduce and direct property access
309-
*/
310-
static calculateTokenCount(items: SupportedContextItem[]): number {
311-
// Fast path: if no items, return 0
312-
if (items.length === 0) {
313-
return 0;
314-
}
315-
316-
// Use reduce for better performance
317-
const totalChars = items.reduce((sum, item) => {
318-
let itemChars = 0;
319-
// Direct property access is faster than 'in' operator
320-
const value = (item as any).value;
321-
const name = (item as any).name;
322-
323-
if (value && typeof value === 'string') {
324-
itemChars += value.length;
325-
}
326-
if (name && typeof name === 'string') {
327-
itemChars += name.length;
328-
}
329-
330-
return sum + itemChars;
331-
}, 0);
332-
333-
// Approximate: 1 token ≈ 4 characters
334-
// Use bitwise shift for faster division by 4
335-
return (totalChars >> 2) + (totalChars & 3 ? 1 : 0);
336-
}
337304
}
338305

339306
/**

0 commit comments

Comments
 (0)