Skip to content

Commit

Permalink
Merge pull request #4502 from mbien/fast-star-import
Browse files Browse the repository at this point in the history
#4500 static imported methods slow down auto completion
  • Loading branch information
neilcsmith-net authored Aug 16, 2022
2 parents 17c21d8 + 1a98d8e commit ceffbbc
Showing 1 changed file with 9 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3380,6 +3380,8 @@ public boolean accept(Element e, TypeMirror t) {
addAllStaticMemberNames(env);
}
final TypeElement enclClass = scope.getEnclosingClass();
List<ExecutableElement> methodsIn = null;

for (Element e : locals) {
switch (simplifyElementKind(e.getKind())) {
case ENUM_CONSTANT:
Expand All @@ -3399,8 +3401,11 @@ public boolean accept(Element e, TypeMirror t) {
}
break;
case METHOD:
if (methodsIn == null) {
methodsIn = ElementFilter.methodsIn(locals);
}
ExecutableType et = (ExecutableType) asMemberOf(e, enclClass != null ? enclClass.asType() : null, types);
if (e.getEnclosingElement() != enclClass && conflictsWithLocal(e.getSimpleName(), enclClass, locals)) {
if (e.getEnclosingElement() != enclClass && conflictsWithLocalMethods(e.getSimpleName(), enclClass, methodsIn)) {
results.add(itemFactory.createStaticMemberItem(env.getController(), (DeclaredType)e.getEnclosingElement().asType(), e, et, false, anchorOffset, elements.isDeprecated(e), env.addSemicolon()));
} else {
results.add(itemFactory.createExecutableItem(env.getController(), (ExecutableElement) e, et, anchorOffset, null, env.getScope().getEnclosingClass() != e.getEnclosingElement(), elements.isDeprecated(e), false, env.addSemicolon(), isOfSmartType(env, getCorrectedReturnType(env, et, (ExecutableElement) e, enclClass != null ? enclClass.asType() : null), smartTypes), env.assignToVarPos(), false));
Expand Down Expand Up @@ -6216,9 +6221,9 @@ private boolean hasAccessibleInnerClassConstructor(Element e, Scope scope, Trees
}
return false;
}
private boolean conflictsWithLocal(Name name, TypeElement enclClass, Iterable<? extends Element> locals) {
for (ExecutableElement local : ElementFilter.methodsIn(locals)) {

private static boolean conflictsWithLocalMethods(Name name, TypeElement enclClass, List<ExecutableElement> methodsIn) {
for (ExecutableElement local : methodsIn) {
if (local.getEnclosingElement() == enclClass && name.contentEquals(local.getSimpleName())) {
return true;
}
Expand Down

0 comments on commit ceffbbc

Please sign in to comment.