Skip to content

Commit a79fe7f

Browse files
committed
PDEX: simplify import suggestion handling
1 parent 84258d9 commit a79fe7f

File tree

1 file changed

+23
-28
lines changed

1 file changed

+23
-28
lines changed

java/src/processing/mode/java/pdex/PDEX.java

Lines changed: 23 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,10 @@
3636
import java.util.Collections;
3737
import java.util.Comparator;
3838
import java.util.Deque;
39+
import java.util.HashMap;
3940
import java.util.List;
4041
import java.util.Map;
42+
import java.util.Objects;
4143
import java.util.concurrent.Executors;
4244
import java.util.concurrent.ScheduledExecutorService;
4345
import java.util.concurrent.ScheduledFuture;
@@ -1074,6 +1076,9 @@ public void dispose() {
10741076

10751077

10761078
private void handleSketchProblems(PreprocessedSketch ps) {
1079+
Map<String, String[]> suggCache =
1080+
JavaMode.importSuggestEnabled ? new HashMap<>() : Collections.emptyMap();
1081+
10771082
// Process problems
10781083
IProblem[] iproblems = ps.compilationUnit.getProblems();
10791084
final List<Problem> problems = Arrays.stream(iproblems)
@@ -1095,38 +1100,20 @@ private void handleSketchProblems(PreprocessedSketch ps) {
10951100
int line = ps.tabOffsetToTabLine(in.tabIndex, in.startTabOffset);
10961101
JavaProblem p = new JavaProblem(iproblem, in.tabIndex, line);
10971102
p.setPDEOffsets(in.startTabOffset, in.stopTabOffset);
1103+
1104+
// Handle import suggestions
1105+
if (JavaMode.importSuggestEnabled && isUndefinedTypeProblem(iproblem)) {
1106+
ClassPath cp = ps.searchClassPath;
1107+
String[] s = suggCache.computeIfAbsent(iproblem.getArguments()[0],
1108+
name -> getImportSuggestions(cp, name));
1109+
p.setImportSuggestions(s);
1110+
}
1111+
10981112
return p;
10991113
})
1100-
.filter(p -> p != null)
1114+
.filter(Objects::nonNull)
11011115
.collect(Collectors.toList());
11021116

1103-
// Handle import suggestions
1104-
if (JavaMode.importSuggestEnabled) {
1105-
Map<String, List<Problem>> undefinedTypeProblems = problems.stream()
1106-
// Get only problems with undefined types/names
1107-
.filter(p -> {
1108-
int id = ((JavaProblem) p).getIProblem().getID();
1109-
return id == IProblem.UndefinedType ||
1110-
id == IProblem.UndefinedName ||
1111-
id == IProblem.UnresolvedVariable;
1112-
})
1113-
// Group problems by the missing type/name
1114-
.collect(Collectors.groupingBy(p -> ((JavaProblem) p).getIProblem().getArguments()[0]));
1115-
1116-
if (!undefinedTypeProblems.isEmpty()) {
1117-
final ClassPath cp = ps.searchClassPath;
1118-
1119-
// Get suggestions for each missing type, update the problems
1120-
undefinedTypeProblems.entrySet().stream()
1121-
.forEach(entry -> {
1122-
String missingClass = entry.getKey();
1123-
List<Problem> affectedProblems = entry.getValue();
1124-
String[] suggestions = getImportSuggestions(cp, missingClass);
1125-
affectedProblems.forEach(p -> ((JavaProblem) p).setImportSuggestions(suggestions));
1126-
});
1127-
}
1128-
}
1129-
11301117
if (scheduledUiUpdate != null) {
11311118
scheduledUiUpdate.cancel(true);
11321119
}
@@ -1142,6 +1129,14 @@ private void handleSketchProblems(PreprocessedSketch ps) {
11421129
}
11431130

11441131

1132+
private boolean isUndefinedTypeProblem(IProblem iproblem) {
1133+
int id = iproblem.getID();
1134+
return id == IProblem.UndefinedType ||
1135+
id == IProblem.UndefinedName ||
1136+
id == IProblem.UnresolvedVariable;
1137+
}
1138+
1139+
11451140
public static String[] getImportSuggestions(ClassPath cp, String className) {
11461141
RegExpResourceFilter regf = new RegExpResourceFilter(
11471142
Pattern.compile(".*"),

0 commit comments

Comments
 (0)