@@ -337,11 +337,12 @@ private Stream<CompletionItem> notImportedConstructors(String partialIdentifier,
337337 * Suggest classes that haven't yet been imported, but are on the source or class path
338338 */
339339 private Stream <CompletionItem > notImportedClasses (String partialIdentifier , Scope scope ) {
340- Stream <CompletionItem > fromClassPath = accessibleClassPathClasses (partialIdentifier , scope )
341- . map ( this :: completeClassNameFromClassPath );
342- // TODO sourcePath
340+ Stream <String > fromSourcePath = accessibleSourcePathClasses (partialIdentifier , scope );
341+ Stream < String > fromClassPath = accessibleClassPathClasses ( partialIdentifier , scope )
342+ . map ( c -> c . getName ());
343343
344- return fromClassPath ;
344+ return Stream .concat (fromSourcePath , fromClassPath )
345+ .map (this ::completeClassNameFromClassPath );
345346 }
346347
347348 private Stream <ClassPath .ClassInfo > accessibleClassPathClasses (String partialIdentifier , Scope scope ) {
@@ -352,6 +353,13 @@ private Stream<ClassPath.ClassInfo> accessibleClassPathClasses(String partialIde
352353 .filter (c -> classPath .isAccessibleFromPackage (c , packageName ));
353354 }
354355
356+ private Stream <String > accessibleSourcePathClasses (String partialIdentifier , Scope scope ) {
357+ String packageName = packageName (scope );
358+
359+ return sourcePath .accessibleTopLevelClasses (packageName )
360+ .filter (c -> containsCharactersInOrder (lastId (c ), partialIdentifier ));
361+ }
362+
355363 private String packageName (Scope scope ) {
356364 PackageElement packageEl = elements .getPackageOf (scope .getEnclosingClass ());
357365
@@ -575,15 +583,16 @@ private CompletionItem completeConstructorFromClassPath(Constructor<?> c) {
575583 return item ;
576584 }
577585
578- private CompletionItem completeClassNameFromClassPath (ClassPath . ClassInfo info ) {
586+ private CompletionItem completeClassNameFromClassPath (String qualifiedName ) {
579587 CompletionItem item = new CompletionItem ();
580-
581- item .setLabel (info .getSimpleName ());
582- item .setDetail (info .getPackageName ());
583- item .setInsertText (info .getSimpleName ());
584- item .setAdditionalTextEdits (addImport (info .getName ()));
585- item .setSortText ("2/" + info .getSimpleName ());
586- item .setData (info .getName ());
588+ String packageName = mostIds (qualifiedName ), simpleName = lastId (qualifiedName );
589+
590+ item .setLabel (simpleName );
591+ item .setDetail (packageName );
592+ item .setInsertText (simpleName );
593+ item .setAdditionalTextEdits (addImport (qualifiedName ));
594+ item .setSortText ("2/" + simpleName );
595+ item .setData (qualifiedName );
587596
588597 // TODO implement vscode resolve-completion-item
589598
0 commit comments