Skip to content

Commit c488a7f

Browse files
committed
Add "Create record" quick fix.
Signed-off-by: Roland Grunberg <rgrunber@redhat.com>
1 parent cba9210 commit c488a7f

File tree

4 files changed

+87
-26
lines changed

4 files changed

+87
-26
lines changed

org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/corrections/CorrectionMessages.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,16 +249,23 @@ private CorrectionMessages() {
249249
public static String NoCorrectionProposal_description;
250250
public static String MarkerResolutionProposal_additionaldesc;
251251
public static String NewCUCompletionUsingWizardProposal_createclass_description;
252+
public static String NewCUCompletionUsingWizardProposal_createrecord_description;
252253
public static String NewCUCompletionUsingWizardProposal_createenum_description;
253254
public static String NewCUCompletionUsingWizardProposal_createclass_inpackage_description;
255+
public static String NewCUCompletionUsingWizardProposal_createrecord_inpackage_description;
254256
public static String NewCUCompletionUsingWizardProposal_createinnerclass_description;
257+
public static String NewCUCompletionUsingWizardProposal_createnewinnerclass_description;
258+
public static String NewCUCompletionUsingWizardProposal_createinnerrecord_description;
259+
public static String NewCUCompletionUsingWizardProposal_createnewinnerrecord_description;
255260
public static String NewCUCompletionUsingWizardProposal_createinnerenum_description;
256261
public static String NewCUCompletionUsingWizardProposal_createannotation_description;
257262
public static String NewCUCompletionUsingWizardProposal_createinnerclass_intype_description;
263+
public static String NewCUCompletionUsingWizardProposal_createinnerrecord_intype_description;
258264
public static String NewCUCompletionUsingWizardProposal_createinnerenum_intype_description;
259265
public static String NewCUCompletionUsingWizardProposal_createinterface_description;
260266
public static String NewCUCompletionUsingWizardProposal_createinterface_inpackage_description;
261267
public static String NewCUCompletionUsingWizardProposal_createinnerinterface_description;
268+
public static String NewCUCompletionUsingWizardProposal_createnewinnerinterface_description;
262269
public static String NewCUCompletionUsingWizardProposal_createenum_inpackage_description;
263270
public static String NewCUCompletionUsingWizardProposal_createinnerannotation_description;
264271
public static String NewCUCompletionUsingWizardProposal_createinnerinterface_intype_description;
@@ -272,6 +279,7 @@ private CorrectionMessages() {
272279
public static String NewCUCompletionUsingWizardProposal_createnewinterface_inpackage_description;
273280
public static String NewCUCompletionUsingWizardProposal_createnewannotation_inpackage_description;
274281
public static String NewCUCompletionUsingWizardProposal_createnewenum_inpackage_description;
282+
public static String NewCUCompletionUsingWizardProposal_createnewrecord_inpackage_description;
275283
public static String ConfigureProblemSeveritySubProcessor_info;
276284
public static String ConfigureProblemSeveritySubProcessor_name;
277285
public static String ConstructorFromSuperclassProposal_description;

org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/corrections/CorrectionMessages.properties

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,16 +277,23 @@ MarkerResolutionProposal_additionaldesc=Problem description: {0}
277277

278278
NewCUCompletionUsingWizardProposal_createclass_description=Create class ''{0}''
279279
NewCUCompletionUsingWizardProposal_createenum_description=Create enum ''{0}''
280+
NewCUCompletionUsingWizardProposal_createrecord_description=Create record ''{0}''
280281
NewCUCompletionUsingWizardProposal_createclass_inpackage_description=Create class ''{0}'' in package ''{1}''
282+
NewCUCompletionUsingWizardProposal_createrecord_inpackage_description=Create record ''{0}'' in package ''{1}''
281283
NewCUCompletionUsingWizardProposal_createinnerclass_description=Create member class ''{0}''
284+
NewCUCompletionUsingWizardProposal_createnewinnerclass_description=Create new member class
285+
NewCUCompletionUsingWizardProposal_createinnerrecord_description=Create member record ''{0}''
286+
NewCUCompletionUsingWizardProposal_createnewinnerrecord_description=Create new member record
282287
NewCUCompletionUsingWizardProposal_createinnerenum_description=Create member enum ''{0}''
283288
NewCUCompletionUsingWizardProposal_createannotation_description=Create annotation ''{0}''
284289
NewCUCompletionUsingWizardProposal_createinnerclass_intype_description=Create class ''{0}'' in type ''{1}''
285290
NewCUCompletionUsingWizardProposal_createinnerenum_intype_description=Create enum ''{0}'' in type ''{1}''
291+
NewCUCompletionUsingWizardProposal_createinnerrecord_intype_description=Create record ''{0}'' in type ''{1}''
286292

287293
NewCUCompletionUsingWizardProposal_createinterface_description=Create interface ''{0}''
288294
NewCUCompletionUsingWizardProposal_createinterface_inpackage_description=Create interface ''{0}'' in package ''{1}''
289295
NewCUCompletionUsingWizardProposal_createinnerinterface_description=Create member interface ''{0}''
296+
NewCUCompletionUsingWizardProposal_createnewinnerinterface_description=Create new member interface
290297
NewCUCompletionUsingWizardProposal_createenum_inpackage_description=Create enum ''{0}'' in package ''{1}''
291298
NewCUCompletionUsingWizardProposal_createinnerannotation_description=Create member annotation ''{0}''
292299
NewCUCompletionUsingWizardProposal_createinnerinterface_intype_description=Create interface ''{0}'' in type ''{1}''
@@ -296,6 +303,7 @@ NewCUCompletionUsingWizardProposal_createnewclass_inpackage_description=Create n
296303
NewCUCompletionUsingWizardProposal_createnewinterface_inpackage_description=Create new interface in package ''{0}''
297304
NewCUCompletionUsingWizardProposal_createnewannotation_inpackage_description=Create new annotation in package ''{0}''
298305
NewCUCompletionUsingWizardProposal_createnewenum_inpackage_description=Create new enum in package ''{0}''
306+
NewCUCompletionUsingWizardProposal_createnewrecord_inpackage_description=Create new record in package ''{0}''
299307

300308
NewCUCompletionUsingWizardProposal_createclass_info=Opens the new class wizard to create the type.
301309
NewCUCompletionUsingWizardProposal_createenum_info=Opens the new enum wizard to create the type.

org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/corrections/proposals/NewCUProposal.java

Lines changed: 67 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ public class NewCUProposal extends ChangeCorrectionProposalCore {
7373
public static final int K_INTERFACE = 2;
7474
public static final int K_ENUM = 3;
7575
public static final int K_ANNOTATION = 4;
76+
public static final int K_RECORD= 5;
7677

7778
private Name fNode;
7879
private ICompilationUnit fCompilationUnit;
@@ -125,43 +126,51 @@ private void setDisplayName() {
125126
boolean isInnerType = fTypeContainer instanceof IType;
126127
switch (fTypeKind) {
127128
case K_CLASS:
128-
if (fNode != null) {
129-
if (isInnerType) {
130-
if (containerName.length() == 0) {
131-
setDisplayName(Messages.format(CorrectionMessages.NewCUCompletionUsingWizardProposal_createinnerclass_description, typeLabel));
132-
} else {
133-
setDisplayName(Messages.format(CorrectionMessages.NewCUCompletionUsingWizardProposal_createinnerclass_intype_description, new String[] { typeLabel, containerLabel }));
134-
}
129+
if (fNode != null) {
130+
if (isInnerType) {
131+
if (containerName.length() == 0) {
132+
setDisplayName(Messages.format(CorrectionMessages.NewCUCompletionUsingWizardProposal_createinnerclass_description, typeLabel));
135133
} else {
136-
if (containerName.length() == 0) {
137-
setDisplayName(Messages.format(CorrectionMessages.NewCUCompletionUsingWizardProposal_createclass_description, typeLabel));
138-
} else {
139-
setDisplayName(Messages.format(CorrectionMessages.NewCUCompletionUsingWizardProposal_createclass_inpackage_description, new String[] { typeLabel, containerLabel }));
140-
}
134+
setDisplayName(Messages.format(CorrectionMessages.NewCUCompletionUsingWizardProposal_createinnerclass_intype_description, new String[] { typeLabel, containerLabel }));
141135
}
136+
} else {
137+
if (containerName.length() == 0) {
138+
setDisplayName(Messages.format(CorrectionMessages.NewCUCompletionUsingWizardProposal_createclass_description, typeLabel));
139+
} else {
140+
setDisplayName(Messages.format(CorrectionMessages.NewCUCompletionUsingWizardProposal_createclass_inpackage_description, new String[] { typeLabel, containerLabel }));
141+
}
142+
}
143+
} else {
144+
if (isInnerType) {
145+
setDisplayName(Messages.format(CorrectionMessages.NewCUCompletionUsingWizardProposal_createnewinnerclass_description, containerLabel));
142146
} else {
143147
setDisplayName(Messages.format(CorrectionMessages.NewCUCompletionUsingWizardProposal_createnewclass_inpackage_description, containerLabel));
144148
}
145-
break;
149+
}
150+
break;
146151
case K_INTERFACE:
147-
if (fNode != null) {
148-
if (isInnerType) {
149-
if (containerName.length() == 0) {
150-
setDisplayName(Messages.format(CorrectionMessages.NewCUCompletionUsingWizardProposal_createinnerinterface_description, typeLabel));
151-
} else {
152-
setDisplayName(Messages.format(CorrectionMessages.NewCUCompletionUsingWizardProposal_createinnerinterface_intype_description, new String[] { typeLabel, containerLabel }));
153-
}
152+
if (fNode != null) {
153+
if (isInnerType) {
154+
if (containerName.length() == 0) {
155+
setDisplayName(Messages.format(CorrectionMessages.NewCUCompletionUsingWizardProposal_createinnerinterface_description, typeLabel));
154156
} else {
155-
if (containerName.length() == 0) {
156-
setDisplayName(Messages.format(CorrectionMessages.NewCUCompletionUsingWizardProposal_createinterface_description, typeLabel));
157-
} else {
158-
setDisplayName(Messages.format(CorrectionMessages.NewCUCompletionUsingWizardProposal_createinterface_inpackage_description, new String[] { typeLabel, containerLabel }));
159-
}
157+
setDisplayName(Messages.format(CorrectionMessages.NewCUCompletionUsingWizardProposal_createinnerinterface_intype_description, new String[] { typeLabel, containerLabel }));
158+
}
159+
} else {
160+
if (containerName.length() == 0) {
161+
setDisplayName(Messages.format(CorrectionMessages.NewCUCompletionUsingWizardProposal_createinterface_description, typeLabel));
162+
} else {
163+
setDisplayName(Messages.format(CorrectionMessages.NewCUCompletionUsingWizardProposal_createinterface_inpackage_description, new String[] { typeLabel, containerLabel }));
160164
}
165+
}
166+
} else {
167+
if (isInnerType) {
168+
setDisplayName(Messages.format(CorrectionMessages.NewCUCompletionUsingWizardProposal_createnewinnerinterface_description, containerLabel));
161169
} else {
162170
setDisplayName(Messages.format(CorrectionMessages.NewCUCompletionUsingWizardProposal_createnewinterface_inpackage_description, containerLabel));
163171
}
164-
break;
172+
}
173+
break;
165174
case K_ENUM:
166175
if (fNode != null) {
167176
if (isInnerType) {
@@ -200,6 +209,29 @@ private void setDisplayName() {
200209
setDisplayName(Messages.format(CorrectionMessages.NewCUCompletionUsingWizardProposal_createnewannotation_inpackage_description, containerLabel));
201210
}
202211
break;
212+
case K_RECORD:
213+
if (fNode != null) {
214+
if (isInnerType) {
215+
if (containerName.length() == 0) {
216+
setDisplayName(Messages.format(CorrectionMessages.NewCUCompletionUsingWizardProposal_createinnerrecord_description, typeLabel));
217+
} else {
218+
setDisplayName(Messages.format(CorrectionMessages.NewCUCompletionUsingWizardProposal_createinnerrecord_intype_description, new String[] { typeLabel, containerLabel }));
219+
}
220+
} else {
221+
if (containerName.length() == 0) {
222+
setDisplayName(Messages.format(CorrectionMessages.NewCUCompletionUsingWizardProposal_createrecord_description, typeLabel));
223+
} else {
224+
setDisplayName(Messages.format(CorrectionMessages.NewCUCompletionUsingWizardProposal_createrecord_inpackage_description, new String[] { typeLabel, containerLabel }));
225+
}
226+
}
227+
} else {
228+
if (isInnerType) {
229+
setDisplayName(Messages.format(CorrectionMessages.NewCUCompletionUsingWizardProposal_createnewinnerrecord_description, containerLabel));
230+
} else {
231+
setDisplayName(Messages.format(CorrectionMessages.NewCUCompletionUsingWizardProposal_createnewrecord_inpackage_description, containerLabel));
232+
}
233+
}
234+
break;
203235
default:
204236
throw new IllegalArgumentException("Unknown type kind"); //$NON-NLS-1$
205237
}
@@ -305,6 +337,9 @@ private TextEdit constructEnclosingTypeEdit(ICompilationUnit icu) throws CoreExc
305337
case K_ANNOTATION:
306338
newDeclaration = ast.newAnnotationTypeDeclaration();
307339
break;
340+
case K_RECORD:
341+
newDeclaration = ast.newRecordDeclaration();
342+
break;
308343
default:
309344
return null;
310345
}
@@ -428,13 +463,19 @@ private String constructTypeStub(ICompilationUnit parentCU, String name, int mod
428463
type = "@interface "; //$NON-NLS-1$
429464
templateID = CodeGeneration.ANNOTATION_BODY_TEMPLATE_ID;
430465
break;
466+
case K_RECORD:
467+
type = "record "; //$NON-NLS-1$
468+
templateID = CodeGeneration.RECORD_BODY_TEMPLATE_ID;
469+
break;
431470
}
432471
buf.append(type);
433472
buf.append(name);
434473
if (isPermitted) {
435474
buf.append(' ');
436475
buf.append(superType);
437476
buf.append(cuType.getElementName());
477+
} else if (fTypeKind == K_RECORD) {
478+
buf.append("() ");
438479
}
439480

440481
buf.append(" {").append(lineDelimiter); //$NON-NLS-1$

org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/corrections/proposals/UnresolvedElementsSubProcessor.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,10 @@ protected void addNewTypeProposalsInteractiveInnerLoop(ICompilationUnit cu, Name
105105
if ((kind & TypeKinds.CLASSES) != 0) {
106106
NewCUProposal proposal = new NewCUProposal(cu, node, NewCUProposal.K_CLASS, enclosing, rel + 3);
107107
proposals.add(CodeActionHandler.wrap(proposal, CodeActionKind.QuickFix));
108+
if (canUseRecord(cu.getJavaProject(), refNode)) {
109+
proposal = new NewCUProposal(cu, node, NewCUProposal.K_RECORD, enclosing, rel + 3);
110+
proposals.add(CodeActionHandler.wrap(proposal, CodeActionKind.QuickFix));
111+
}
108112
}
109113
if ((kind & TypeKinds.INTERFACES) != 0) {
110114
NewCUProposal proposal = new NewCUProposal(cu, node, NewCUProposal.K_INTERFACE, enclosing, rel + 3);

0 commit comments

Comments
 (0)