Skip to content

Commit 982f144

Browse files
committed
fix: shorten the msg
1 parent 3fb2679 commit 982f144

File tree

1 file changed

+57
-40
lines changed

1 file changed

+57
-40
lines changed

jdtls.ext/com.microsoft.jdtls.ext.core/src/com/microsoft/jdtls/ext/core/ProjectCommand.java

Lines changed: 57 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -152,17 +152,13 @@ public String getMessage() {
152152
}
153153

154154
/**
155-
* Error context information for ImportClassContent operations
155+
* Error context information for operations
156156
*/
157157
public static class ErrorContext {
158-
public final String uri; // Original URI from arguments
159-
public final String parsedPath; // Parsed file path (if successful)
160-
public final String projectName; // Project name (if found)
158+
public final String errorValue; // The value that caused the error (e.g., invalid URI, null parsedPath, etc.)
161159

162-
public ErrorContext(String uri, String parsedPath, String projectName) {
163-
this.uri = uri;
164-
this.parsedPath = parsedPath;
165-
this.projectName = projectName;
160+
public ErrorContext(String errorValue) {
161+
this.errorValue = errorValue;
166162
}
167163
}
168164

@@ -189,11 +185,11 @@ public ImportClassContentResult(ImportClassContentErrorReason errorReason) {
189185
this.errorContext = null;
190186
}
191187

192-
public ImportClassContentResult(ImportClassContentErrorReason errorReason, String uri, String parsedPath, String projectName) {
188+
public ImportClassContentResult(ImportClassContentErrorReason errorReason, String errorValue) {
193189
this.classInfoList = Collections.emptyList();
194190
this.emptyReason = errorReason.getMessage();
195191
this.isEmpty = true;
196-
this.errorContext = new ErrorContext(uri, parsedPath, projectName);
192+
this.errorContext = new ErrorContext(errorValue);
197193
}
198194
}
199195

@@ -220,11 +216,11 @@ public ProjectDependenciesResult(ProjectDependenciesErrorReason errorReason) {
220216
this.errorContext = null;
221217
}
222218

223-
public ProjectDependenciesResult(ProjectDependenciesErrorReason errorReason, String uri, String parsedPath, String projectName) {
219+
public ProjectDependenciesResult(ProjectDependenciesErrorReason errorReason, String errorValue) {
224220
this.dependencyInfoList = new ArrayList<>();
225221
this.emptyReason = errorReason.getMessage();
226222
this.isEmpty = true;
227-
this.errorContext = new ErrorContext(uri, parsedPath, projectName);
223+
this.errorContext = new ErrorContext(errorValue);
228224
}
229225
}
230226

@@ -492,20 +488,24 @@ public static boolean checkImportStatus() {
492488
*/
493489
public static ImportClassContentResult getImportClassContent(List<Object> arguments,
494490
IProgressMonitor monitor) {
491+
// Record start time for timeout control
492+
long startTime = System.currentTimeMillis();
493+
final long TIMEOUT_MS = 80; // 80ms timeout
494+
495495
if (arguments == null || arguments.isEmpty()) {
496-
return new ImportClassContentResult(ImportClassContentErrorReason.NULL_ARGUMENTS, null, null, null);
496+
return new ImportClassContentResult(ImportClassContentErrorReason.NULL_ARGUMENTS);
497497
}
498498

499499
try {
500500
String fileUri = (String) arguments.get(0);
501501
if (fileUri == null || fileUri.trim().isEmpty()) {
502-
return new ImportClassContentResult(ImportClassContentErrorReason.INVALID_URI, fileUri, null, null);
502+
return new ImportClassContentResult(ImportClassContentErrorReason.INVALID_URI, fileUri);
503503
}
504504
// Parse URI manually to avoid restricted API
505505
java.net.URI uri = new java.net.URI(fileUri);
506506
String filePath = uri.getPath();
507507
if (filePath == null) {
508-
return new ImportClassContentResult(ImportClassContentErrorReason.URI_PARSE_FAILED, fileUri, null, null);
508+
return new ImportClassContentResult(ImportClassContentErrorReason.URI_PARSE_FAILED, filePath);
509509
}
510510

511511
IPath path = new Path(filePath);
@@ -514,27 +514,26 @@ public static ImportClassContentResult getImportClassContent(List<Object> argume
514514
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
515515
IFile file = root.getFileForLocation(path);
516516
if (file == null || !file.exists()) {
517-
return new ImportClassContentResult(ImportClassContentErrorReason.FILE_NOT_FOUND, fileUri, filePath, null);
517+
return new ImportClassContentResult(ImportClassContentErrorReason.FILE_NOT_FOUND, filePath);
518518
}
519519
if (!file.exists()) {
520-
return new ImportClassContentResult(ImportClassContentErrorReason.FILE_NOT_EXISTS, fileUri, filePath, null);
520+
return new ImportClassContentResult(ImportClassContentErrorReason.FILE_NOT_EXISTS, filePath);
521521
}
522522

523523
// Get the Java project
524524
IJavaProject javaProject = JavaCore.create(file.getProject());
525525
if (javaProject == null) {
526-
return new ImportClassContentResult(ImportClassContentErrorReason.NOT_JAVA_PROJECT, fileUri, filePath, null);
526+
return new ImportClassContentResult(ImportClassContentErrorReason.NOT_JAVA_PROJECT, filePath);
527527
}
528528
if (!javaProject.exists()) {
529529
String projectName = javaProject.getProject().getName();
530-
return new ImportClassContentResult(ImportClassContentErrorReason.PROJECT_NOT_EXISTS, fileUri, filePath, projectName);
530+
return new ImportClassContentResult(ImportClassContentErrorReason.PROJECT_NOT_EXISTS, projectName);
531531
}
532532

533533
// Find the compilation unit
534534
IJavaElement javaElement = JavaCore.create(file);
535535
if (!(javaElement instanceof org.eclipse.jdt.core.ICompilationUnit)) {
536-
String projectName = javaProject.getProject().getName();
537-
return new ImportClassContentResult(ImportClassContentErrorReason.NOT_COMPILATION_UNIT, fileUri, filePath, projectName);
536+
return new ImportClassContentResult(ImportClassContentErrorReason.NOT_COMPILATION_UNIT, filePath);
538537
}
539538

540539
org.eclipse.jdt.core.ICompilationUnit compilationUnit = (org.eclipse.jdt.core.ICompilationUnit) javaElement;
@@ -548,16 +547,14 @@ public static ImportClassContentResult getImportClassContent(List<Object> argume
548547

549548
// Check if file has no imports
550549
if (imports == null || imports.length == 0) {
551-
String projectName = javaProject.getProject().getName();
552-
return new ImportClassContentResult(ImportClassContentErrorReason.NO_IMPORTS, fileUri, filePath, projectName);
550+
return new ImportClassContentResult(ImportClassContentErrorReason.NO_IMPORTS);
553551
}
554552

555553
// Phase 1: Priority - Resolve project source classes (internal)
556-
String projectName = javaProject.getProject().getName();
557554
for (org.eclipse.jdt.core.IImportDeclaration importDecl : imports) {
558555
// Check cancellation before each operation
559556
if (monitor.isCanceled()) {
560-
return new ImportClassContentResult(ImportClassContentErrorReason.OPERATION_CANCELLED, fileUri, filePath, projectName);
557+
return new ImportClassContentResult(ImportClassContentErrorReason.OPERATION_CANCELLED);
561558
}
562559

563560
String importName = importDecl.getElementName();
@@ -578,15 +575,35 @@ public static ImportClassContentResult getImportClassContent(List<Object> argume
578575
}
579576
}
580577

581-
// Phase 2: Resolve external dependencies if not cancelled
578+
// Phase 2: Resolve external dependencies if not cancelled and within time limit
582579
if (!monitor.isCanceled()) {
580+
// Check if we have exceeded the timeout before starting external resolution
581+
long currentTime = System.currentTimeMillis();
582+
long elapsedTime = currentTime - startTime;
583+
584+
if (elapsedTime >= TIMEOUT_MS) {
585+
// Return early due to timeout, but still return what we have collected so far
586+
if (classInfoList.isEmpty()) {
587+
return new ImportClassContentResult(ImportClassContentErrorReason.TIME_LIMIT_EXCEEDED, String.valueOf(elapsedTime) + "ms");
588+
}
589+
return new ImportClassContentResult(classInfoList);
590+
}
591+
583592
List<ImportClassInfo> externalClasses = new ArrayList<>();
584593

585594
for (org.eclipse.jdt.core.IImportDeclaration importDecl : imports) {
586595
// Check cancellation before each external resolution
587596
if (monitor.isCanceled()) {
588597
break;
589598
}
599+
600+
// Check timeout before each external resolution
601+
currentTime = System.currentTimeMillis();
602+
elapsedTime = currentTime - startTime;
603+
if (elapsedTime >= TIMEOUT_MS) {
604+
// Timeout reached, stop processing external dependencies but keep existing results
605+
break;
606+
}
590607

591608
String importName = importDecl.getElementName();
592609
boolean isStatic = (importDecl.getFlags() & org.eclipse.jdt.core.Flags.AccStatic) != 0;
@@ -608,7 +625,7 @@ public static ImportClassContentResult getImportClassContent(List<Object> argume
608625
}
609626
// Success case - return the resolved class information
610627
if (classInfoList.isEmpty()) {
611-
return new ImportClassContentResult(ImportClassContentErrorReason.NO_RESULTS, fileUri, filePath, projectName);
628+
return new ImportClassContentResult(ImportClassContentErrorReason.NO_RESULTS);
612629
}
613630
return new ImportClassContentResult(classInfoList);
614631

@@ -623,7 +640,7 @@ public static ImportClassContentResult getImportClassContent(List<Object> argume
623640
} catch (Exception ignored) {
624641
// Ignore any further exceptions when trying to get context
625642
}
626-
return new ImportClassContentResult(ImportClassContentErrorReason.PROCESSING_EXCEPTION, errorUri, null, null);
643+
return new ImportClassContentResult(ImportClassContentErrorReason.PROCESSING_EXCEPTION, errorUri);
627644
}
628645
}
629646

@@ -662,37 +679,37 @@ private static String getSeverityString(int severity) {
662679
public static ProjectDependenciesResult getProjectDependencies(List<Object> arguments,
663680
IProgressMonitor monitor) {
664681
if (arguments == null || arguments.isEmpty()) {
665-
return new ProjectDependenciesResult(ProjectDependenciesErrorReason.NULL_ARGUMENTS, null, null, null);
682+
return new ProjectDependenciesResult(ProjectDependenciesErrorReason.NULL_ARGUMENTS);
666683
}
667684

668685
try {
669-
String projectUri = (String) arguments.get(0);
670-
if (projectUri == null || projectUri.trim().isEmpty()) {
671-
return new ProjectDependenciesResult(ProjectDependenciesErrorReason.INVALID_URI, projectUri, null, null);
686+
String fileUri = (String) arguments.get(0);
687+
if (fileUri == null || fileUri.trim().isEmpty()) {
688+
return new ProjectDependenciesResult(ProjectDependenciesErrorReason.INVALID_URI, fileUri);
672689
}
673690

674691
// Validate URI format
675692
String parsedPath = null;
676693
try {
677-
java.net.URI uri = new java.net.URI(projectUri);
694+
java.net.URI uri = new java.net.URI(fileUri);
678695
parsedPath = uri.getPath();
679696
if (parsedPath == null) {
680-
return new ProjectDependenciesResult(ProjectDependenciesErrorReason.URI_PARSE_FAILED, projectUri, null, null);
697+
return new ProjectDependenciesResult(ProjectDependenciesErrorReason.URI_PARSE_FAILED, parsedPath);
681698
}
682699
} catch (java.net.URISyntaxException e) {
683-
return new ProjectDependenciesResult(ProjectDependenciesErrorReason.MALFORMED_URI, projectUri, null, null);
700+
return new ProjectDependenciesResult(ProjectDependenciesErrorReason.MALFORMED_URI, fileUri);
684701
}
685702

686703
// Check if monitor is cancelled before processing
687704
if (monitor.isCanceled()) {
688-
return new ProjectDependenciesResult(ProjectDependenciesErrorReason.OPERATION_CANCELLED, projectUri, parsedPath, null);
705+
return new ProjectDependenciesResult(ProjectDependenciesErrorReason.OPERATION_CANCELLED);
689706
}
690-
List<ProjectResolver.DependencyInfo> resolverResult = ProjectResolver.resolveProjectDependencies(projectUri,
707+
List<ProjectResolver.DependencyInfo> resolverResult = ProjectResolver.resolveProjectDependencies(fileUri,
691708
monitor);
692709
// Check if resolver returned null (should not happen, but defensive
693710
// programming)
694711
if (resolverResult == null) {
695-
return new ProjectDependenciesResult(ProjectDependenciesErrorReason.RESOLVER_NULL_RESULT, projectUri, parsedPath, null);
712+
return new ProjectDependenciesResult(ProjectDependenciesErrorReason.RESOLVER_NULL_RESULT);
696713
}
697714
// Convert ProjectResolver.DependencyInfo to ProjectCommand.DependencyInfo
698715
List<DependencyInfo> result = new ArrayList<>();
@@ -704,7 +721,7 @@ public static ProjectDependenciesResult getProjectDependencies(List<Object> argu
704721

705722
// Check if no dependencies were resolved
706723
if (result.isEmpty()) {
707-
return new ProjectDependenciesResult(ProjectDependenciesErrorReason.NO_DEPENDENCIES, projectUri, parsedPath, null);
724+
return new ProjectDependenciesResult(ProjectDependenciesErrorReason.NO_DEPENDENCIES);
708725
}
709726

710727
return new ProjectDependenciesResult(result);
@@ -719,7 +736,7 @@ public static ProjectDependenciesResult getProjectDependencies(List<Object> argu
719736
} catch (Exception ignored) {
720737
// Ignore any further exceptions when trying to get context
721738
}
722-
return new ProjectDependenciesResult(ProjectDependenciesErrorReason.PROCESSING_EXCEPTION, errorUri, null, null);
739+
return new ProjectDependenciesResult(ProjectDependenciesErrorReason.PROCESSING_EXCEPTION, errorUri);
723740
}
724741
}
725742

0 commit comments

Comments
 (0)