8326333: jshell <TAB> completion on arrays is incomplete
Reviewed-by: vromero
This commit is contained in:
parent
ece4124f25
commit
48717d63cc
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2014, 2022, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2014, 2024, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -1032,14 +1032,7 @@ class SourceCodeAnalysisImpl extends SourceCodeAnalysis {
|
|||||||
case DECLARED: {
|
case DECLARED: {
|
||||||
TypeElement element = (TypeElement) at.getTypes().asElement(site);
|
TypeElement element = (TypeElement) at.getTypes().asElement(site);
|
||||||
List<Element> result = new ArrayList<>();
|
List<Element> result = new ArrayList<>();
|
||||||
at.getElements().getAllMembers(element).forEach(m -> result.add(
|
result.addAll(membersOf(at, element));
|
||||||
element.equals(m.getEnclosingElement())
|
|
||||||
? m
|
|
||||||
: (m instanceof Symbol.MethodSymbol ms)
|
|
||||||
? ms.clone((Symbol)element)
|
|
||||||
: (m instanceof Symbol.VarSymbol vs)
|
|
||||||
? vs.clone((Symbol)element)
|
|
||||||
: m));
|
|
||||||
if (shouldGenerateDotClassItem) {
|
if (shouldGenerateDotClassItem) {
|
||||||
result.add(createDotClassSymbol(at, site));
|
result.add(createDotClassSymbol(at, site));
|
||||||
}
|
}
|
||||||
@ -1076,6 +1069,10 @@ class SourceCodeAnalysisImpl extends SourceCodeAnalysis {
|
|||||||
}
|
}
|
||||||
case ARRAY: {
|
case ARRAY: {
|
||||||
List<Element> result = new ArrayList<>();
|
List<Element> result = new ArrayList<>();
|
||||||
|
TypeElement jlObject = at.getElements().getTypeElement("java.lang.Object");
|
||||||
|
if (jlObject != null) {
|
||||||
|
result.addAll(membersOf(at, jlObject));
|
||||||
|
}
|
||||||
result.add(createArrayLengthSymbol(at, site));
|
result.add(createArrayLengthSymbol(at, site));
|
||||||
if (shouldGenerateDotClassItem)
|
if (shouldGenerateDotClassItem)
|
||||||
result.add(createDotClassSymbol(at, site));
|
result.add(createDotClassSymbol(at, site));
|
||||||
@ -1086,6 +1083,17 @@ class SourceCodeAnalysisImpl extends SourceCodeAnalysis {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private List<? extends Element> membersOf(AnalyzeTask at, TypeElement element) {
|
||||||
|
return at.getElements().getAllMembers(element).stream().map(m ->
|
||||||
|
element.equals(m.getEnclosingElement())
|
||||||
|
? m
|
||||||
|
: (m instanceof Symbol.MethodSymbol ms)
|
||||||
|
? ms.clone((Symbol)element)
|
||||||
|
: (m instanceof Symbol.VarSymbol vs)
|
||||||
|
? vs.clone((Symbol)element)
|
||||||
|
: m).toList();
|
||||||
|
}
|
||||||
|
|
||||||
private List<? extends Element> membersOf(AnalyzeTask at, List<? extends Element> elements) {
|
private List<? extends Element> membersOf(AnalyzeTask at, List<? extends Element> elements) {
|
||||||
return elements.stream()
|
return elements.stream()
|
||||||
.flatMap(e -> membersOf(at, e.asType(), true).stream())
|
.flatMap(e -> membersOf(at, e.asType(), true).stream())
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2015, 2022, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2015, 2024, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* @test
|
* @test
|
||||||
* @bug 8131025 8141092 8153761 8145263 8131019 8175886 8176184 8176241 8176110 8177466 8197439 8221759 8234896 8240658 8278039 8286206 8296789 8314662
|
* @bug 8131025 8141092 8153761 8145263 8131019 8175886 8176184 8176241 8176110 8177466 8197439 8221759 8234896 8240658 8278039 8286206 8296789 8314662 8326333
|
||||||
* @summary Test Completion and Documentation
|
* @summary Test Completion and Documentation
|
||||||
* @library /tools/lib
|
* @library /tools/lib
|
||||||
* @modules jdk.compiler/com.sun.tools.javac.api
|
* @modules jdk.compiler/com.sun.tools.javac.api
|
||||||
@ -86,9 +86,9 @@ public class CompletionSuggestionTest extends KullaTesting {
|
|||||||
assertCompletion("Object[].|", "class");
|
assertCompletion("Object[].|", "class");
|
||||||
assertCompletion("int[].|", "class");
|
assertCompletion("int[].|", "class");
|
||||||
assertEval("Object[] ao = null;");
|
assertEval("Object[] ao = null;");
|
||||||
assertCompletion("int i = ao.|", "length");
|
assertCompletion("int i = ao.le|", "length");
|
||||||
assertEval("int[] ai = null;");
|
assertEval("int[] ai = null;");
|
||||||
assertCompletion("int i = ai.|", "length");
|
assertCompletion("int i = ai.le|", "length");
|
||||||
assertCompletionIncludesExcludes("\"\".|",
|
assertCompletionIncludesExcludes("\"\".|",
|
||||||
new HashSet<>(Collections.emptyList()),
|
new HashSet<>(Collections.emptyList()),
|
||||||
new HashSet<>(Arrays.asList("String(")));
|
new HashSet<>(Arrays.asList("String(")));
|
||||||
@ -810,4 +810,15 @@ public class CompletionSuggestionTest extends KullaTesting {
|
|||||||
ste(m2, RECOVERABLE_DEFINED, VALID, true, MAIN_SNIPPET));
|
ste(m2, RECOVERABLE_DEFINED, VALID, true, MAIN_SNIPPET));
|
||||||
assertSignature("test(|", "void test(String s)", "void test(Integer i)");
|
assertSignature("test(|", "void test(String s)", "void test(Integer i)");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//JDK-8326333: verify completion returns sensible output for arrays:
|
||||||
|
public void testArray() {
|
||||||
|
assertEval("String[] strs = null;");
|
||||||
|
assertCompletion("strs.to|", "toString()");
|
||||||
|
assertCompletion("strs.le|", "length");
|
||||||
|
assertEval("int[] ints = null;");
|
||||||
|
assertCompletion("ints.no|", "notify()", "notifyAll()");
|
||||||
|
assertCompletion("ints.le|", "length");
|
||||||
|
assertCompletion("String[].|", "class");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user