Skip to content

Commit be6ef0e

Browse files
committed
WIP: getDisplayName()
Signed-off-by: BoykoAlex <alex.boyko@broadcom.com>
1 parent 470cc5a commit be6ef0e

File tree

7 files changed

+69
-0
lines changed

7 files changed

+69
-0
lines changed

headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/jdt/refactoring/ArrayTypeName.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,11 @@ public int getDimensions() {
5353
return dimensions;
5454
}
5555

56+
@Override
57+
public String getDisplayName() {
58+
return componentType.getDisplayName() + "[]".repeat(dimensions);
59+
}
60+
5661
@Override
5762
public List<ClassName> getAllClassNames() {
5863
return componentType.getAllClassNames();

headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/jdt/refactoring/ClassName.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,11 @@ public String getFieldTypeName() {
9696
return simpleName;
9797
}
9898

99+
@Override
100+
public String getDisplayName() {
101+
return getFieldTypeName();
102+
}
103+
99104
@Override
100105
public String getFullyQualifiedName() {
101106
String fieldTypeName = getFieldTypeName();

headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/jdt/refactoring/JavaType.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,21 @@
3838
*/
3939
interface JavaType {
4040

41+
/**
42+
* Returns a human-readable display name for this type using short (simple) names.
43+
* <p>
44+
* Examples:
45+
* <ul>
46+
* <li>{@code "int"} for a primitive</li>
47+
* <li>{@code "String"} for a simple class</li>
48+
* <li>{@code "Map.Entry"} for an inner class</li>
49+
* <li>{@code "Map<String, Integer>"} for a parameterized type</li>
50+
* <li>{@code "String[]"} for an array</li>
51+
* <li>{@code "? extends Number"} for a wildcard</li>
52+
* </ul>
53+
*/
54+
String getDisplayName();
55+
4156
/**
4257
* Returns a flat list of all concrete {@link ClassName} instances referenced in this
4358
* type tree. This is used for import management — each class name in the list may

headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/jdt/refactoring/ParameterizedClassName.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,18 @@ public String getSimpleName() {
6363
return erasure.getSimpleName();
6464
}
6565

66+
@Override
67+
public String getDisplayName() {
68+
String base = erasure.getDisplayName();
69+
if (typeArguments.isEmpty()) {
70+
return base;
71+
}
72+
String args = typeArguments.stream()
73+
.map(JavaType::getDisplayName)
74+
.collect(Collectors.joining(", "));
75+
return base + "<" + args + ">";
76+
}
77+
6678
@Override
6779
public String getFullyQualifiedName() {
6880
String base = erasure.getFullyQualifiedName();

headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/jdt/refactoring/PrimitiveTypeName.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,11 @@ public String getKeyword() {
4848
return keyword;
4949
}
5050

51+
@Override
52+
public String getDisplayName() {
53+
return keyword;
54+
}
55+
5156
@Override
5257
public List<ClassName> getAllClassNames() {
5358
return Collections.emptyList();

headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/jdt/refactoring/WildcardName.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,14 @@ public boolean isUpperBound() {
5656
return upperBound;
5757
}
5858

59+
@Override
60+
public String getDisplayName() {
61+
if (bound == null) {
62+
return "?";
63+
}
64+
return "? " + (upperBound ? "extends" : "super") + " " + bound.getDisplayName();
65+
}
66+
5967
@Override
6068
public List<ClassName> getAllClassNames() {
6169
if (bound != null) {

headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/jdt/refactoring/JavaTypeTest.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ void parseSimpleTopLevelClass() {
4444
assertNull(cn.getDeclaringClass());
4545
assertEquals("MyService", cn.getFieldTypeName());
4646
assertEquals("com.example.MyService", cn.getFullyQualifiedName());
47+
assertEquals("MyService", jt.getDisplayName());
4748
}
4849

4950
@Test
@@ -58,6 +59,7 @@ void parseJavaLangType() {
5859
assertNull(cn.getDeclaringClass());
5960
assertEquals("String", cn.getFieldTypeName());
6061
assertEquals("java.lang.String", cn.getFullyQualifiedName());
62+
assertEquals("String", jt.getDisplayName());
6163
}
6264

6365
@Test
@@ -70,6 +72,7 @@ void parseUnqualifiedName() {
7072
assertEquals("MyService", cn.getSimpleName());
7173
assertEquals("MyService", cn.getFieldTypeName());
7274
assertEquals("MyService", cn.getFullyQualifiedName());
75+
assertEquals("MyService", jt.getDisplayName());
7376
}
7477

7578
// ========== Inner class types ==========
@@ -87,6 +90,7 @@ void parseInnerClassType() {
8790
assertEquals("Map", cn.getDeclaringClass().getSimpleName());
8891
assertEquals("Map.Entry", cn.getFieldTypeName());
8992
assertEquals("java.util.Map.Entry", cn.getFullyQualifiedName());
93+
assertEquals("Map.Entry", jt.getDisplayName());
9094
}
9195

9296
@Test
@@ -99,6 +103,7 @@ void parseDeepInnerClassType() {
99103
assertEquals("com.example", cn.getPackageName());
100104
assertEquals("Inner", cn.getSimpleName());
101105
assertEquals("Outer.Middle.Inner", cn.getFieldTypeName());
106+
assertEquals("Outer.Middle.Inner", jt.getDisplayName());
102107

103108
// Check declaring class chain
104109
ClassName middle = cn.getDeclaringClass();
@@ -148,6 +153,7 @@ void parseSimpleParameterizedType() {
148153
JavaType arg = pcn.getTypeArguments().get(0);
149154
assertInstanceOf(ClassName.class, arg);
150155
assertEquals("java.lang.String", ((FullyQualifiedName) arg).getFullyQualifiedName());
156+
assertEquals("List<String>", jt.getDisplayName());
151157
}
152158

153159
@Test
@@ -162,6 +168,7 @@ void parseMapType() {
162168
assertEquals(2, pcn.getTypeArguments().size());
163169
assertEquals("java.lang.String", ((FullyQualifiedName) pcn.getTypeArguments().get(0)).getFullyQualifiedName());
164170
assertEquals("java.lang.Integer", ((FullyQualifiedName) pcn.getTypeArguments().get(1)).getFullyQualifiedName());
171+
assertEquals("Map<String, Integer>", jt.getDisplayName());
165172
}
166173

167174
@Test
@@ -193,6 +200,7 @@ void parseNestedParameterizedType() {
193200
assertEquals("List", listArg.getSimpleName());
194201
assertEquals(1, listArg.getTypeArguments().size());
195202
assertEquals("java.lang.Integer", ((FullyQualifiedName) listArg.getTypeArguments().get(0)).getFullyQualifiedName());
203+
assertEquals("Map<String, List<Integer>>", jt.getDisplayName());
196204
}
197205

198206
@Test
@@ -220,6 +228,7 @@ void parseComplexNestedType() {
220228
assertEquals(2, entry.getTypeArguments().size());
221229
assertEquals("java.lang.String", ((FullyQualifiedName) entry.getTypeArguments().get(0)).getFullyQualifiedName());
222230
assertInstanceOf(WildcardName.class, entry.getTypeArguments().get(1));
231+
assertEquals("Map<String, List<Map.Entry<String, ?>>>", jt.getDisplayName());
223232
}
224233

225234
// ========== getAllClassNames for parameterized types ==========
@@ -276,6 +285,7 @@ void parseUnboundedWildcard() {
276285

277286
assertNull(wn.getBound());
278287
assertEquals("?", wn.toString());
288+
assertEquals("?", jt.getDisplayName());
279289
assertTrue(wn.getAllClassNames().isEmpty());
280290
}
281291

@@ -290,6 +300,7 @@ void parseUpperBoundedWildcard() {
290300
assertTrue(wn.isUpperBound());
291301
assertEquals("java.lang.Number", ((FullyQualifiedName) wn.getBound()).getFullyQualifiedName());
292302
assertEquals("? extends java.lang.Number", wn.toString());
303+
assertEquals("? extends Number", jt.getDisplayName());
293304
}
294305

295306
@Test
@@ -303,6 +314,7 @@ void parseLowerBoundedWildcard() {
303314
assertTrue(!wn.isUpperBound());
304315
assertEquals("java.lang.Integer", ((FullyQualifiedName) wn.getBound()).getFullyQualifiedName());
305316
assertEquals("? super java.lang.Integer", wn.toString());
317+
assertEquals("? super Integer", jt.getDisplayName());
306318
}
307319

308320
@Test
@@ -330,6 +342,7 @@ void parseParameterizedWithWildcardExtends() {
330342
WildcardName wn = assertInstanceOf(WildcardName.class, pcn.getTypeArguments().get(0));
331343
assertTrue(wn.isUpperBound());
332344
assertEquals("com.example.dto.BaseDto", ((FullyQualifiedName) wn.getBound()).getFullyQualifiedName());
345+
assertEquals("List<? extends BaseDto>", jt.getDisplayName());
333346
}
334347

335348
@Test
@@ -446,6 +459,7 @@ void parsePrimitiveInt() {
446459

447460
assertEquals("int", ptn.getKeyword());
448461
assertEquals("int", ptn.toString());
462+
assertEquals("int", jt.getDisplayName());
449463
assertTrue(ptn.getAllClassNames().isEmpty());
450464
}
451465

@@ -491,6 +505,7 @@ void parsePrimitiveArray() {
491505
assertInstanceOf(PrimitiveTypeName.class, atn.getComponentType());
492506
assertEquals("int", atn.getComponentType().toString());
493507
assertEquals("int[]", atn.toString());
508+
assertEquals("int[]", jt.getDisplayName());
494509
assertTrue(atn.getAllClassNames().isEmpty());
495510
}
496511

@@ -518,6 +533,7 @@ void parseReferenceArray() {
518533
assertInstanceOf(ClassName.class, atn.getComponentType());
519534
assertEquals("String", ((ClassName) atn.getComponentType()).getSimpleName());
520535
assertEquals("java.lang.String[]", atn.toString());
536+
assertEquals("String[]", jt.getDisplayName());
521537

522538
List<ClassName> classNames = atn.getAllClassNames();
523539
assertEquals(1, classNames.size());
@@ -534,6 +550,7 @@ void parseMultiDimensionalReferenceArray() {
534550
assertEquals(2, atn.getDimensions());
535551
assertInstanceOf(ClassName.class, atn.getComponentType());
536552
assertEquals("com.example.Foo[][]", atn.toString());
553+
assertEquals("Foo[][]", jt.getDisplayName());
537554
}
538555

539556
@Test
@@ -547,6 +564,7 @@ void parseParameterizedArray() {
547564
assertInstanceOf(ParameterizedClassName.class, atn.getComponentType());
548565
assertEquals("List", ((ParameterizedClassName) atn.getComponentType()).getSimpleName());
549566
assertEquals("java.util.List<java.lang.String>[]", atn.toString());
567+
assertEquals("List<String>[]", jt.getDisplayName());
550568

551569
List<ClassName> classNames = atn.getAllClassNames();
552570
assertEquals(2, classNames.size());
@@ -567,6 +585,7 @@ void parseInnerClassArray() {
567585
assertEquals("Entry", cn.getSimpleName());
568586
assertNotNull(cn.getDeclaringClass());
569587
assertEquals("java.util.Map.Entry[]", atn.toString());
588+
assertEquals("Map.Entry[]", jt.getDisplayName());
570589
}
571590

572591
// ========== Round-trip for arrays and primitives ==========

0 commit comments

Comments
 (0)