@@ -43,109 +43,26 @@ public class ContextResolver {
4343 private static final int MAX_STATIC_METHODS_TO_DISPLAY = 10 ;
4444 private static final int MAX_STATIC_FIELDS_TO_DISPLAY = 10 ;
4545
46- // Common JDK types to skip (Copilot already has good understanding of these)
47- // These are well-known classes that don't need to be extracted from JARs
48- private static final Set <String > SKIP_COMMON_JDK_TYPES = new HashSet <>();
46+ // Common JDK packages to skip (Copilot already has good understanding of these)
47+ // These are well-known packages whose classes don't need to be extracted from JARs
48+ private static final Set <String > SKIP_COMMON_JDK_PACKAGES = new HashSet <>();
4949 static {
50- // java.lang - fundamental types
51- SKIP_COMMON_JDK_TYPES .add ("java.lang.Object" );
52- SKIP_COMMON_JDK_TYPES .add ("java.lang.String" );
53- SKIP_COMMON_JDK_TYPES .add ("java.lang.Integer" );
54- SKIP_COMMON_JDK_TYPES .add ("java.lang.Long" );
55- SKIP_COMMON_JDK_TYPES .add ("java.lang.Double" );
56- SKIP_COMMON_JDK_TYPES .add ("java.lang.Float" );
57- SKIP_COMMON_JDK_TYPES .add ("java.lang.Boolean" );
58- SKIP_COMMON_JDK_TYPES .add ("java.lang.Character" );
59- SKIP_COMMON_JDK_TYPES .add ("java.lang.Byte" );
60- SKIP_COMMON_JDK_TYPES .add ("java.lang.Short" );
61- SKIP_COMMON_JDK_TYPES .add ("java.lang.Number" );
62- SKIP_COMMON_JDK_TYPES .add ("java.lang.Void" );
63- SKIP_COMMON_JDK_TYPES .add ("java.lang.Class" );
64- SKIP_COMMON_JDK_TYPES .add ("java.lang.System" );
65- SKIP_COMMON_JDK_TYPES .add ("java.lang.Math" );
66- SKIP_COMMON_JDK_TYPES .add ("java.lang.Thread" );
67- SKIP_COMMON_JDK_TYPES .add ("java.lang.Runnable" );
68- SKIP_COMMON_JDK_TYPES .add ("java.lang.Exception" );
69- SKIP_COMMON_JDK_TYPES .add ("java.lang.RuntimeException" );
70- SKIP_COMMON_JDK_TYPES .add ("java.lang.Throwable" );
71- SKIP_COMMON_JDK_TYPES .add ("java.lang.Error" );
72-
73- // java.util - collections
74- SKIP_COMMON_JDK_TYPES .add ("java.util.List" );
75- SKIP_COMMON_JDK_TYPES .add ("java.util.ArrayList" );
76- SKIP_COMMON_JDK_TYPES .add ("java.util.LinkedList" );
77- SKIP_COMMON_JDK_TYPES .add ("java.util.Map" );
78- SKIP_COMMON_JDK_TYPES .add ("java.util.HashMap" );
79- SKIP_COMMON_JDK_TYPES .add ("java.util.LinkedHashMap" );
80- SKIP_COMMON_JDK_TYPES .add ("java.util.TreeMap" );
81- SKIP_COMMON_JDK_TYPES .add ("java.util.Set" );
82- SKIP_COMMON_JDK_TYPES .add ("java.util.HashSet" );
83- SKIP_COMMON_JDK_TYPES .add ("java.util.LinkedHashSet" );
84- SKIP_COMMON_JDK_TYPES .add ("java.util.TreeSet" );
85- SKIP_COMMON_JDK_TYPES .add ("java.util.Collection" );
86- SKIP_COMMON_JDK_TYPES .add ("java.util.Iterator" );
87- SKIP_COMMON_JDK_TYPES .add ("java.util.Queue" );
88- SKIP_COMMON_JDK_TYPES .add ("java.util.Deque" );
89- SKIP_COMMON_JDK_TYPES .add ("java.util.Stack" );
90- SKIP_COMMON_JDK_TYPES .add ("java.util.Vector" );
91- SKIP_COMMON_JDK_TYPES .add ("java.util.Optional" );
92- SKIP_COMMON_JDK_TYPES .add ("java.util.Arrays" );
93- SKIP_COMMON_JDK_TYPES .add ("java.util.Collections" );
94- SKIP_COMMON_JDK_TYPES .add ("java.util.Comparator" );
95-
96- // java.io - I/O
97- SKIP_COMMON_JDK_TYPES .add ("java.io.File" );
98- SKIP_COMMON_JDK_TYPES .add ("java.io.IOException" );
99- SKIP_COMMON_JDK_TYPES .add ("java.io.InputStream" );
100- SKIP_COMMON_JDK_TYPES .add ("java.io.OutputStream" );
101- SKIP_COMMON_JDK_TYPES .add ("java.io.Reader" );
102- SKIP_COMMON_JDK_TYPES .add ("java.io.Writer" );
103- SKIP_COMMON_JDK_TYPES .add ("java.io.BufferedReader" );
104- SKIP_COMMON_JDK_TYPES .add ("java.io.BufferedWriter" );
105- SKIP_COMMON_JDK_TYPES .add ("java.io.FileReader" );
106- SKIP_COMMON_JDK_TYPES .add ("java.io.FileWriter" );
107- SKIP_COMMON_JDK_TYPES .add ("java.io.PrintWriter" );
108- SKIP_COMMON_JDK_TYPES .add ("java.io.Serializable" );
109-
110- // java.nio - NIO
111- SKIP_COMMON_JDK_TYPES .add ("java.nio.file.Path" );
112- SKIP_COMMON_JDK_TYPES .add ("java.nio.file.Paths" );
113- SKIP_COMMON_JDK_TYPES .add ("java.nio.file.Files" );
114- SKIP_COMMON_JDK_TYPES .add ("java.nio.ByteBuffer" );
115-
116- // java.time - Date/Time API
117- SKIP_COMMON_JDK_TYPES .add ("java.time.LocalDate" );
118- SKIP_COMMON_JDK_TYPES .add ("java.time.LocalDateTime" );
119- SKIP_COMMON_JDK_TYPES .add ("java.time.LocalTime" );
120- SKIP_COMMON_JDK_TYPES .add ("java.time.Instant" );
121- SKIP_COMMON_JDK_TYPES .add ("java.time.Duration" );
122- SKIP_COMMON_JDK_TYPES .add ("java.time.Period" );
123- SKIP_COMMON_JDK_TYPES .add ("java.time.ZonedDateTime" );
124-
125- // java.util.concurrent - Concurrency
126- SKIP_COMMON_JDK_TYPES .add ("java.util.concurrent.ExecutorService" );
127- SKIP_COMMON_JDK_TYPES .add ("java.util.concurrent.Future" );
128- SKIP_COMMON_JDK_TYPES .add ("java.util.concurrent.CompletableFuture" );
129- SKIP_COMMON_JDK_TYPES .add ("java.util.concurrent.ConcurrentHashMap" );
130-
131- // java.util.stream - Streams
132- SKIP_COMMON_JDK_TYPES .add ("java.util.stream.Stream" );
133- SKIP_COMMON_JDK_TYPES .add ("java.util.stream.Collectors" );
134-
135- // java.util.function - Functional interfaces
136- SKIP_COMMON_JDK_TYPES .add ("java.util.function.Function" );
137- SKIP_COMMON_JDK_TYPES .add ("java.util.function.Consumer" );
138- SKIP_COMMON_JDK_TYPES .add ("java.util.function.Supplier" );
139- SKIP_COMMON_JDK_TYPES .add ("java.util.function.Predicate" );
140-
141- // java.net - Networking
142- SKIP_COMMON_JDK_TYPES .add ("java.net.URL" );
143- SKIP_COMMON_JDK_TYPES .add ("java.net.URI" );
144- SKIP_COMMON_JDK_TYPES .add ("java.net.HttpURLConnection" );
145-
146- // java.util.regex - Regular expressions
147- SKIP_COMMON_JDK_TYPES .add ("java.util.regex.Pattern" );
148- SKIP_COMMON_JDK_TYPES .add ("java.util.regex.Matcher" );
50+ // Core Java packages - Copilot has excellent understanding of these
51+ SKIP_COMMON_JDK_PACKAGES .add ("java.lang" ); // Object, String, Integer, etc.
52+ SKIP_COMMON_JDK_PACKAGES .add ("java.util" ); // Collections, List, Map, Set, etc.
53+ SKIP_COMMON_JDK_PACKAGES .add ("java.io" ); // File, InputStream, Reader, etc.
54+ SKIP_COMMON_JDK_PACKAGES .add ("java.nio" ); // ByteBuffer, etc.
55+ SKIP_COMMON_JDK_PACKAGES .add ("java.nio.file" ); // Path, Paths, Files
56+ SKIP_COMMON_JDK_PACKAGES .add ("java.time" ); // LocalDate, LocalDateTime, Instant, etc.
57+ SKIP_COMMON_JDK_PACKAGES .add ("java.util.concurrent" ); // ExecutorService, Future, CompletableFuture, etc.
58+ SKIP_COMMON_JDK_PACKAGES .add ("java.util.stream" ); // Stream, Collectors
59+ SKIP_COMMON_JDK_PACKAGES .add ("java.util.function" ); // Function, Consumer, Supplier, Predicate
60+ SKIP_COMMON_JDK_PACKAGES .add ("java.net" ); // URL, URI, HttpURLConnection
61+ SKIP_COMMON_JDK_PACKAGES .add ("java.util.regex" ); // Pattern, Matcher
62+ SKIP_COMMON_JDK_PACKAGES .add ("java.math" ); // BigDecimal, BigInteger
63+ SKIP_COMMON_JDK_PACKAGES .add ("java.text" ); // DateFormat, SimpleDateFormat, etc.
64+ SKIP_COMMON_JDK_PACKAGES .add ("java.sql" ); // Connection, ResultSet, etc.
65+ SKIP_COMMON_JDK_PACKAGES .add ("javax.sql" ); // DataSource, etc.
14966 }
15067
15168 /**
@@ -251,6 +168,32 @@ public static void resolveSingleType(IJavaProject javaProject, String typeName,
251168 }
252169 }
253170
171+ /**
172+ * Check if a type belongs to a common JDK package that should be skipped.
173+ * Uses package-level matching for efficient filtering.
174+ *
175+ * @param typeName Fully qualified type name (e.g., "java.lang.String")
176+ * @return true if the type is from a common JDK package
177+ */
178+ private static boolean isCommonJdkType (String typeName ) {
179+ if (typeName == null || typeName .isEmpty ()) {
180+ return false ;
181+ }
182+
183+ // Extract package name from fully qualified type name
184+ int lastDotIndex = typeName .lastIndexOf ('.' );
185+ if (lastDotIndex == -1 ) {
186+ return false ; // No package (default package)
187+ }
188+
189+ String packageName = typeName .substring (0 , lastDotIndex );
190+
191+ // Check if package matches any common JDK package
192+ // This includes both exact matches and sub-packages
193+ return SKIP_COMMON_JDK_PACKAGES .contains (packageName ) ||
194+ SKIP_COMMON_JDK_PACKAGES .stream ().anyMatch (pkg -> packageName .startsWith (pkg + "." ));
195+ }
196+
254197 /**
255198 * Resolve a static import statement
256199 */
@@ -418,9 +361,9 @@ public static void resolveBinaryType(IJavaProject javaProject, String typeName,
418361 return ;
419362 }
420363
421- // Performance optimization: Skip common JDK types that Copilot already understands well
364+ // Performance optimization: Skip common JDK packages that Copilot already understands well
422365 // This significantly reduces processing time for external dependencies
423- if (SKIP_COMMON_JDK_TYPES . contains (typeName )) {
366+ if (isCommonJdkType (typeName )) {
424367 processedTypes .add (typeName );
425368 return ;
426369 }
0 commit comments