Skip to content

Commit 6336a21

Browse files
Rob Strykerdatho7561
authored andcommitted
Remove dependency on CompletionEngine, excepting static methods
Signed-off-by: Rob Stryker <[email protected]>
1 parent 142aed2 commit 6336a21

File tree

1 file changed

+57
-17
lines changed

1 file changed

+57
-17
lines changed

org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/DOMCompletionEngine.java

Lines changed: 57 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import org.eclipse.jdt.internal.compiler.env.AccessRestriction;
3434
import org.eclipse.jdt.internal.compiler.lookup.TypeConstants;
3535
import org.eclipse.jdt.internal.compiler.parser.RecoveryScanner;
36+
import org.eclipse.jdt.internal.compiler.util.HashtableOfObject;
3637
import org.eclipse.jdt.internal.core.JarPackageFragmentRoot;
3738
import org.eclipse.jdt.internal.core.JavaElementRequestor;
3839
import org.eclipse.jdt.internal.core.JavaModelManager;
@@ -69,7 +70,6 @@ public class DOMCompletionEngine implements Runnable {
6970
private final AssistOptions assistOptions;
7071
private final SearchPattern pattern;
7172

72-
private final CompletionEngine nestedEngine; // to reuse some utilities
7373
private ExpectedTypes expectedTypes;
7474
private String prefix;
7575
private String qualifiedPrefix;
@@ -79,6 +79,11 @@ public class DOMCompletionEngine implements Runnable {
7979
private final DOMCompletionEngineRecoveredNodeScanner recoveredNodeScanner;
8080
private final IProgressMonitor monitor;
8181

82+
public HashtableOfObject typeCache;
83+
public int openedBinaryTypes; // used during InternalCompletionProposal#findConstructorParameterNames()
84+
private AssistOptions modelUnitOptions;
85+
86+
8287
static class Bindings {
8388
// those need to be list since the order matters
8489
// fields must be before methods
@@ -113,6 +118,7 @@ public DOMCompletionEngine(int offset, CompilationUnit domUnit, ICompilationUnit
113118
this.offset = offset;
114119
this.unit = domUnit;
115120
this.modelUnit = modelUnit;
121+
this.modelUnitOptions = new AssistOptions(this.modelUnit.getOptions(true));
116122
this.requestor = requestor;
117123
SearchableEnvironment env = null;
118124
if (this.modelUnit.getJavaProject() instanceof JavaProject p && requestor != null) {
@@ -135,7 +141,9 @@ public DOMCompletionEngine(int offset, CompilationUnit domUnit, ICompilationUnit
135141
// TODO also honor requestor.ignore*
136142
// TODO sorting/relevance: closest/prefix match should go first
137143
// ...
138-
this.nestedEngine = new CompletionEngine(this.nameEnvironment, this.requestor, this.modelUnit.getOptions(true), this.modelUnit.getJavaProject(), workingCopyOwner, monitor);
144+
this.typeCache = new HashtableOfObject(5);
145+
this.openedBinaryTypes = 0;
146+
139147
this.variableDeclHandler = new DOMCompletionEngineVariableDeclHandler();
140148
this.recoveredNodeScanner = new DOMCompletionEngineRecoveredNodeScanner(modelUnit, offset);
141149
this.monitor = monitor;
@@ -2059,7 +2067,7 @@ private CompletionProposal toProposal(IBinding binding, String completion) {
20592067
}
20602068
}
20612069

2062-
InternalCompletionProposal res = new InternalCompletionProposal(kind, this.offset);
2070+
DOMEngineProposal res = new DOMEngineProposal(this, kind, this.offset);
20632071
res.setName(binding.getName().toCharArray());
20642072
if (kind == CompletionProposal.METHOD_REF) {
20652073
completion += "()"; //$NON-NLS-1$
@@ -2239,12 +2247,11 @@ private CompletionProposal toProposal(IBinding binding, String completion) {
22392247
res.setDeclarationTypeName(((IType)element.getAncestor(IJavaElement.TYPE)).getFullyQualifiedName().toCharArray());
22402248
res.setDeclarationPackageName(element.getAncestor(IJavaElement.PACKAGE_FRAGMENT).getElementName().toCharArray());
22412249
}
2242-
res.completionEngine = this.nestedEngine;
22432250
res.nameLookup = this.nameEnvironment.nameLookup;
22442251

22452252
res.setRelevance(CompletionEngine.computeBaseRelevance() +
22462253
CompletionEngine.computeRelevanceForResolution() +
2247-
this.nestedEngine.computeRelevanceForInterestingProposal() +
2254+
computeRelevanceForInterestingProposal() +
22482255
(res.isConstructor ? 0 : CompletionEngine.computeRelevanceForCaseMatching(this.prefix.toCharArray(), binding.getName().toCharArray(), this.assistOptions)) +
22492256
computeRelevanceForExpectingType(binding instanceof ITypeBinding typeBinding ? typeBinding :
22502257
binding instanceof IMethodBinding methodBinding ? methodBinding.getReturnType() :
@@ -2292,7 +2299,7 @@ private String qualifiedTypeName(ITypeBinding typeBinding) {
22922299
}
22932300

22942301
private CompletionProposal toProposal(IType type) {
2295-
InternalCompletionProposal res = new InternalCompletionProposal(CompletionProposal.TYPE_REF, this.offset);
2302+
DOMEngineProposal res = new DOMEngineProposal(this, CompletionProposal.TYPE_REF, this.offset);
22962303
char[] simpleName = type.getElementName().toCharArray();
22972304
char[] signature = Signature.createTypeSignature(type.getFullyQualifiedName(), true).toCharArray();
22982305

@@ -2386,7 +2393,6 @@ private CompletionProposal toProposal(IType type) {
23862393
} catch (JavaModelException e) {
23872394
// there are sensible default set if accessing the model fails
23882395
}
2389-
res.completionEngine = this.nestedEngine;
23902396
res.nameLookup = this.nameEnvironment.nameLookup;
23912397
int relevance = RelevanceConstants.R_DEFAULT
23922398
+ RelevanceConstants.R_RESOLVED
@@ -2742,11 +2748,10 @@ private CompletionProposal toAnonymousConstructorProposal(IType type) {
27422748
}
27432749

27442750
private CompletionProposal toImportProposal(char[] simpleName, char[] signature, char[] packageName) {
2745-
InternalCompletionProposal res = new InternalCompletionProposal(CompletionProposal.TYPE_IMPORT, this.offset);
2751+
InternalCompletionProposal res = new DOMEngineProposal(this, CompletionProposal.TYPE_IMPORT, this.offset);
27462752
res.setName(simpleName);
27472753
res.setSignature(signature);
27482754
res.setPackageName(packageName);
2749-
res.completionEngine = this.nestedEngine;
27502755
res.nameLookup = this.nameEnvironment.nameLookup;
27512756
return res;
27522757
}
@@ -3056,9 +3061,9 @@ private CompletionProposal toModuleCompletion(String moduleName, char[] prefix,
30563061
char[] completion = moduleName.toCharArray();
30573062
int relevance = CompletionEngine.computeBaseRelevance();
30583063
relevance += CompletionEngine.computeRelevanceForResolution();
3059-
relevance += this.nestedEngine.computeRelevanceForInterestingProposal();
3060-
relevance += this.nestedEngine.computeRelevanceForCaseMatching(prefix, completion);
3061-
relevance += this.nestedEngine.computeRelevanceForQualification(true);
3064+
relevance += computeRelevanceForInterestingProposal();
3065+
relevance += CompletionEngine.computeRelevanceForCaseMatching(prefix, completion, this.modelUnitOptions);
3066+
relevance += computeRelevanceForQualification(true);
30623067
if (requiredModules.contains(moduleName)) {
30633068
relevance += CompletionEngine.computeRelevanceForRestrictions(IAccessRule.K_ACCESSIBLE);
30643069
}
@@ -3085,16 +3090,44 @@ private CompletionProposal toModuleCompletion(String moduleName, char[] prefix,
30853090
* @return an internal completion proposal of the given kind
30863091
*/
30873092
protected InternalCompletionProposal createProposal(int kind) {
3088-
InternalCompletionProposal proposal = new DOMInternalCompletionProposal(kind, this.offset);
3093+
InternalCompletionProposal proposal = new DOMInternalCompletionProposal(this, kind, this.offset);
30893094
proposal.nameLookup = this.nameEnvironment.nameLookup;
3090-
proposal.completionEngine = this.nestedEngine;
30913095
return proposal;
30923096
}
30933097

3094-
private static class DOMInternalCompletionProposal extends InternalCompletionProposal {
3095-
3096-
public DOMInternalCompletionProposal(int kind, int completionLocation) {
3098+
private static class DOMEngineProposal extends InternalCompletionProposal {
3099+
private DOMCompletionEngine engine;
3100+
public DOMEngineProposal(DOMCompletionEngine engine, int kind, int completionLocation) {
30973101
super(kind, completionLocation);
3102+
this.engine = engine;
3103+
}
3104+
3105+
@Override
3106+
protected void incrementOpenedBinaryTypesCount() {
3107+
this.engine.openedBinaryTypes++;
3108+
}
3109+
3110+
@Override
3111+
protected int getOpenedBinaryTypesCount() {
3112+
return this.engine.openedBinaryTypes;
3113+
}
3114+
3115+
@Override
3116+
protected void addToCompletionEngineTypeCache(char[] tName, IType type) {
3117+
this.engine.typeCache.put(tName, type);
3118+
}
3119+
3120+
@Override
3121+
protected Object getFromEngineTypeCache(char[] tName) {
3122+
return this.engine.typeCache.get(tName);
3123+
}
3124+
3125+
}
3126+
3127+
private static class DOMInternalCompletionProposal extends DOMEngineProposal {
3128+
3129+
public DOMInternalCompletionProposal(DOMCompletionEngine engine, int kind, int completionLocation) {
3130+
super(engine, kind, completionLocation);
30983131
}
30993132

31003133
@Override
@@ -3318,4 +3351,11 @@ private ITypeBinding getDeclaringClass(IBinding binding) {
33183351
binding instanceof IVariableBinding variableBinding && variableBinding.isField() ? variableBinding.getDeclaringClass() :
33193352
null;
33203353
}
3354+
3355+
int computeRelevanceForInterestingProposal(){
3356+
return RelevanceConstants.R_INTERESTING;
3357+
}
3358+
int computeRelevanceForResolution(){
3359+
return RelevanceConstants.R_RESOLVED;
3360+
}
33213361
}

0 commit comments

Comments
 (0)