Skip to content

Commit b240c4a

Browse files
committed
completion/ui: fix position for contextInfo
1 parent d4afb3a commit b240c4a

File tree

1 file changed

+26
-17
lines changed

1 file changed

+26
-17
lines changed

plugins/org.eclipse.dltk.javascript.ui/src/org/eclipse/dltk/javascript/internal/ui/text/completion/JavaScriptCompletionProposalCollector.java

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -90,19 +90,23 @@ protected IScriptCompletionProposal createMethodReferenceProposal(
9090
CompletionProposal methodProposal) {
9191
AbstractScriptCompletionProposal methodReferenceProposal = (AbstractScriptCompletionProposal) super
9292
.createMethodReferenceProposal(methodProposal);
93-
if (methodProposal.getExtraInfo() != null) {
93+
final Object extraInfo = methodProposal.getExtraInfo();
94+
if (extraInfo != null) {
9495
methodReferenceProposal.setProposalInfo(new JavaScriptProposalInfo(
95-
methodProposal.getExtraInfo()));
96+
extraInfo));
9697
}
9798
StringBuilder sb = null;
98-
if (methodProposal.getExtraInfo() instanceof Method) {
99-
Method method = (Method) methodProposal.getExtraInfo();
100-
EList<Parameter> parameters = method.getParameters();
99+
final Integer paramLimit = (Integer) methodProposal
100+
.getAttribute(ScriptCompletionProposalCollector.ATTR_PARAM_LIMIT);
101+
if (extraInfo instanceof Method) {
102+
final Method method = (Method) extraInfo;
103+
final EList<Parameter> parameters = method.getParameters();
101104
if (parameters.size() > 0) {
102105
sb = new StringBuilder();
106+
int index = 0;
103107
for (Parameter parameter : parameters) {
104108
if (sb.length() > 0)
105-
sb.append(',');
109+
sb.append(", ");
106110
if (parameter.getKind() == ParameterKind.OPTIONAL)
107111
sb.append('[');
108112
if (parameter.getType() != null) {
@@ -117,18 +121,19 @@ protected IScriptCompletionProposal createMethodReferenceProposal(
117121
sb.append("...");
118122
if (parameter.getKind() == ParameterKind.OPTIONAL)
119123
sb.append(']');
120-
124+
if (paramLimit != null && ++index >= paramLimit.intValue())
125+
break;
121126
}
122127
}
123-
} else if (methodProposal.getExtraInfo() instanceof IValueReference) {
124-
IRMethod method = (IRMethod) ((IValueReference) methodProposal
125-
.getExtraInfo())
128+
} else if (extraInfo instanceof IValueReference) {
129+
final IRMethod method = (IRMethod) ((IValueReference) extraInfo)
126130
.getAttribute(IReferenceAttributes.R_METHOD);
127131
if (method != null && method.getParameterCount() > 0) {
128132
sb = new StringBuilder();
133+
int index = 0;
129134
for (IRParameter parameter : method.getParameters()) {
130135
if (sb.length() > 0)
131-
sb.append(',');
136+
sb.append(", ");
132137
if (parameter.isOptional())
133138
sb.append('[');
134139
if (parameter.getType() != null) {
@@ -142,17 +147,21 @@ protected IScriptCompletionProposal createMethodReferenceProposal(
142147
sb.append("...");
143148
if (parameter.isOptional())
144149
sb.append(']');
150+
if (paramLimit != null && ++index >= paramLimit.intValue())
151+
break;
145152
}
146153
}
147154
}
148155
if (sb != null) {
149-
ProposalContextInformation contextInformation = new JavaScriptProposalContextInformation(
156+
final ProposalContextInformation contextInformation = new JavaScriptProposalContextInformation(
150157
methodProposal, sb.toString());
151-
152-
contextInformation.setContextInformationPosition(methodProposal
153-
.getReplaceStart()
154-
+ methodProposal.getCompletion().length() + 1);
155-
methodReferenceProposal.setContextInformation(contextInformation);
158+
final int pos = methodProposal.getCompletion().indexOf('(');
159+
if (pos >= 0) {
160+
contextInformation.setContextInformationPosition(methodProposal
161+
.getReplaceStart() + pos + 1);
162+
methodReferenceProposal
163+
.setContextInformation(contextInformation);
164+
}
156165
}
157166

158167
return methodReferenceProposal;

0 commit comments

Comments
 (0)