33
33
import java .util .Set ;
34
34
35
35
import org .eclipse .core .runtime .CoreException ;
36
+ import org .eclipse .core .runtime .IProgressMonitor ;
36
37
import org .eclipse .jdt .core .IBuffer ;
37
38
import org .eclipse .jdt .core .ICompilationUnit ;
38
39
import org .eclipse .jdt .core .JavaModelException ;
@@ -75,24 +76,27 @@ private static int moveBack(int offset, int start, String ignoreCharacters, ICom
75
76
return start ;
76
77
}
77
78
78
- public List <ChangeCorrectionProposal > getCorrections (CodeActionParams params , IInvocationContext context , IProblemLocationCore [] locations ) throws CoreException {
79
+ public List <ChangeCorrectionProposal > getCorrections (CodeActionParams params , IInvocationContext context , IProblemLocationCore [] locations , IProgressMonitor monitor ) throws CoreException {
79
80
if (locations == null || locations .length == 0 ) {
80
81
return Collections .emptyList ();
81
82
}
82
83
ArrayList <ChangeCorrectionProposal > resultingCollections = new ArrayList <>();
83
84
Set <Integer > handledProblems = new HashSet <>(locations .length );
84
85
for (int i = 0 ; i < locations .length ; i ++) {
86
+ if (monitor .isCanceled ()) {
87
+ return Collections .emptyList ();
88
+ }
85
89
IProblemLocationCore curr = locations [i ];
86
- if (handledProblems (curr , locations , handledProblems )) {
87
- process (params , context , curr , resultingCollections );
90
+ if (handledProblems (curr , locations , handledProblems , monitor )) {
91
+ process (params , context , curr , resultingCollections , monitor );
88
92
}
89
93
}
90
94
return resultingCollections ;
91
95
}
92
96
93
- private static boolean handledProblems (IProblemLocationCore location , IProblemLocationCore [] locations , Set <Integer > handledProblems ) {
97
+ private static boolean handledProblems (IProblemLocationCore location , IProblemLocationCore [] locations , Set <Integer > handledProblems , IProgressMonitor monitor ) {
94
98
int problemId = location .getProblemId ();
95
- if (handledProblems .contains (problemId )) {
99
+ if (monitor . isCanceled () || handledProblems .contains (problemId )) {
96
100
return false ;
97
101
}
98
102
if (problemId == IProblem .UndefinedName ) {
@@ -107,7 +111,7 @@ private static boolean handledProblems(IProblemLocationCore location, IProblemLo
107
111
return handledProblems .add (problemId );
108
112
}
109
113
110
- private void process (CodeActionParams params , IInvocationContext context , IProblemLocationCore problem , Collection <ChangeCorrectionProposal > proposals ) throws CoreException {
114
+ private void process (CodeActionParams params , IInvocationContext context , IProblemLocationCore problem , Collection <ChangeCorrectionProposal > proposals , IProgressMonitor monitor ) throws CoreException {
111
115
int id = problem .getProblemId ();
112
116
if (id == 0 ) { // no proposals for none-problem locations
113
117
return ;
@@ -135,7 +139,7 @@ private void process(CodeActionParams params, IInvocationContext context, IProbl
135
139
break ;
136
140
137
141
case IProblem .UndefinedMethod :
138
- UnresolvedElementsSubProcessor .getMethodProposals (context , problem , false , proposals );
142
+ UnresolvedElementsSubProcessor .getMethodProposals (context , problem , false , proposals , monitor );
139
143
break ;
140
144
case IProblem .UndefinedConstructor :
141
145
UnresolvedElementsSubProcessor .getConstructorProposals (context , problem , proposals );
@@ -144,7 +148,7 @@ private void process(CodeActionParams params, IInvocationContext context, IProbl
144
148
UnresolvedElementsSubProcessor .getAnnotationMemberProposals (context , problem , proposals );
145
149
break ;
146
150
case IProblem .ParameterMismatch :
147
- UnresolvedElementsSubProcessor .getMethodProposals (context , problem , true , proposals );
151
+ UnresolvedElementsSubProcessor .getMethodProposals (context , problem , true , proposals , monitor );
148
152
break ;
149
153
// case IProblem.MethodButWithConstructorName:
150
154
// ReturnTypeSubProcessor.addMethodWithConstrNameProposals(context,
@@ -153,7 +157,7 @@ private void process(CodeActionParams params, IInvocationContext context, IProbl
153
157
case IProblem .UndefinedField :
154
158
case IProblem .UndefinedName :
155
159
case IProblem .UnresolvedVariable :
156
- UnresolvedElementsSubProcessor .getVariableProposals (context , problem , null , proposals );
160
+ UnresolvedElementsSubProcessor .getVariableProposals (context , problem , null , proposals , monitor );
157
161
break ;
158
162
case IProblem .AmbiguousType :
159
163
case IProblem .JavadocAmbiguousType :
@@ -214,7 +218,7 @@ private void process(CodeActionParams params, IInvocationContext context, IProbl
214
218
case IProblem .NonStaticOrAlienTypeReceiver :
215
219
case IProblem .IndirectAccessToStaticField :
216
220
case IProblem .IndirectAccessToStaticMethod :
217
- LocalCorrectionsSubProcessor .addCorrectAccessToStaticProposals (context , problem , proposals );
221
+ LocalCorrectionsSubProcessor .addCorrectAccessToStaticProposals (context , problem , proposals , monitor );
218
222
break ;
219
223
case IProblem .SealedMissingClassModifier :
220
224
case IProblem .SealedMissingInterfaceModifier :
@@ -230,15 +234,15 @@ private void process(CodeActionParams params, IInvocationContext context, IProbl
230
234
case IProblem .NonStaticFieldFromStaticInvocation :
231
235
case IProblem .InstanceMethodDuringConstructorInvocation :
232
236
case IProblem .InstanceFieldDuringConstructorInvocation :
233
- ModifierCorrectionSubProcessor .addNonAccessibleReferenceProposal (context , problem , proposals , ModifierCorrectionSubProcessor .TO_STATIC , IProposalRelevance .CHANGE_MODIFIER_TO_STATIC );
237
+ ModifierCorrectionSubProcessor .addNonAccessibleReferenceProposal (context , problem , proposals , ModifierCorrectionSubProcessor .TO_STATIC , IProposalRelevance .CHANGE_MODIFIER_TO_STATIC , monitor );
234
238
break ;
235
239
case IProblem .NonBlankFinalLocalAssignment :
236
240
case IProblem .DuplicateFinalLocalInitialization :
237
241
case IProblem .FinalFieldAssignment :
238
242
case IProblem .DuplicateBlankFinalFieldInitialization :
239
243
case IProblem .AnonymousClassCannotExtendFinalClass :
240
244
case IProblem .ClassExtendFinalClass :
241
- ModifierCorrectionSubProcessor .addNonAccessibleReferenceProposal (context , problem , proposals , ModifierCorrectionSubProcessor .TO_NON_FINAL , IProposalRelevance .REMOVE_FINAL_MODIFIER );
245
+ ModifierCorrectionSubProcessor .addNonAccessibleReferenceProposal (context , problem , proposals , ModifierCorrectionSubProcessor .TO_NON_FINAL , IProposalRelevance .REMOVE_FINAL_MODIFIER , monitor );
242
246
break ;
243
247
case IProblem .InheritedMethodReducesVisibility :
244
248
case IProblem .MethodReducesVisibility :
@@ -277,13 +281,13 @@ private void process(CodeActionParams params, IInvocationContext context, IProbl
277
281
break ;
278
282
case IProblem .NotVisibleField :
279
283
GetterSetterCorrectionSubProcessor .addGetterSetterProposal (context , problem , proposals , IProposalRelevance .GETTER_SETTER_NOT_VISIBLE_FIELD );
280
- ModifierCorrectionSubProcessor .addNonAccessibleReferenceProposal (context , problem , proposals , ModifierCorrectionSubProcessor .TO_VISIBLE , IProposalRelevance .CHANGE_VISIBILITY );
284
+ ModifierCorrectionSubProcessor .addNonAccessibleReferenceProposal (context , problem , proposals , ModifierCorrectionSubProcessor .TO_VISIBLE , IProposalRelevance .CHANGE_VISIBILITY , monitor );
281
285
break ;
282
286
case IProblem .NotVisibleMethod :
283
287
case IProblem .NotVisibleConstructor :
284
288
case IProblem .NotVisibleType :
285
289
case IProblem .JavadocNotVisibleType :
286
- ModifierCorrectionSubProcessor .addNonAccessibleReferenceProposal (context , problem , proposals , ModifierCorrectionSubProcessor .TO_VISIBLE , IProposalRelevance .CHANGE_VISIBILITY );
290
+ ModifierCorrectionSubProcessor .addNonAccessibleReferenceProposal (context , problem , proposals , ModifierCorrectionSubProcessor .TO_VISIBLE , IProposalRelevance .CHANGE_VISIBILITY , monitor );
287
291
break ;
288
292
case IProblem .BodyForAbstractMethod :
289
293
case IProblem .AbstractMethodInAbstractClass :
0 commit comments