blob: 0c932c77af9ea2a169a34b7f5cbc08fd054e771a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2019 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.core.tests.model;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.ILocalVariable;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.core.WorkingCopyOwner;
import org.eclipse.jdt.core.search.IJavaSearchScope;
import org.eclipse.jdt.core.search.ReferenceMatch;
import org.eclipse.jdt.core.search.SearchEngine;
import org.eclipse.jdt.core.search.SearchMatch;
import org.eclipse.jdt.core.search.TypeReferenceMatch;
import junit.framework.Test;
public class JavaSearchBugs13Tests extends AbstractJavaSearchTests {
static {
// org.eclipse.jdt.internal.core.search.BasicSearchEngine.VERBOSE = true;
// TESTS_NUMBERS = new int[] { 19 };
// TESTS_RANGE = new int[] { 1, -1 };
// TESTS_NAMES = new String[] {"testBug542559_001"};
}
public JavaSearchBugs13Tests(String name) {
super(name);
this.endChar = "";
}
public static Test suite() {
return buildModelTestSuite(JavaSearchBugs13Tests.class, BYTECODE_DECLARATION_ORDER);
}
class TestCollector extends JavaSearchResultCollector {
public void acceptSearchMatch(SearchMatch searchMatch) throws CoreException {
super.acceptSearchMatch(searchMatch);
}
}
class ReferenceCollector extends JavaSearchResultCollector {
protected void writeLine() throws CoreException {
super.writeLine();
ReferenceMatch refMatch = (ReferenceMatch) this.match;
IJavaElement localElement = refMatch.getLocalElement();
if (localElement != null) {
this.line.append("+[");
if (localElement.getElementType() == IJavaElement.ANNOTATION) {
this.line.append('@');
this.line.append(localElement.getElementName());
this.line.append(" on ");
this.line.append(localElement.getParent().getElementName());
} else {
this.line.append(localElement.getElementName());
}
this.line.append(']');
}
}
}
class TypeReferenceCollector extends ReferenceCollector {
protected void writeLine() throws CoreException {
super.writeLine();
TypeReferenceMatch typeRefMatch = (TypeReferenceMatch) this.match;
IJavaElement[] others = typeRefMatch.getOtherElements();
int length = others==null ? 0 : others.length;
if (length > 0) {
this.line.append("+[");
for (int i=0; i<length; i++) {
IJavaElement other = others[i];
if (i>0) this.line.append(',');
if (other.getElementType() == IJavaElement.ANNOTATION) {
this.line.append('@');
this.line.append(other.getElementName());
this.line.append(" on ");
this.line.append(other.getParent().getElementName());
} else {
this.line.append(other.getElementName());
}
}
this.line.append(']');
}
}
}
IJavaSearchScope getJavaSearchScope() {
return SearchEngine.createJavaSearchScope(new IJavaProject[] {getJavaProject("JavaSearchBugs")});
}
IJavaSearchScope getJavaSearchScopeBugs(String packageName, boolean addSubpackages) throws JavaModelException {
if (packageName == null) return getJavaSearchScope();
return getJavaSearchPackageScope("JavaSearchBugs", packageName, addSubpackages);
}
public ICompilationUnit getWorkingCopy(String path, String source) throws JavaModelException {
if (this.wcOwner == null) {
this.wcOwner = new WorkingCopyOwner() {};
}
return getWorkingCopy(path, source, this.wcOwner);
}
@Override
public void setUpSuite() throws Exception {
super.setUpSuite();
JAVA_PROJECT = setUpJavaProject("JavaSearchBugs", "13");
}
public void tearDownSuite() throws Exception {
deleteProject("JavaSearchBugs");
super.tearDownSuite();
}
protected void setUp () throws Exception {
super.setUp();
this.resultCollector = new TestCollector();
this.resultCollector.showAccuracy(true);
}
//copy from JavaSearchBugs12Tests starts ( after deleting break with value tests since that is discarded)
public void testBug542559_001() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n" +
" int switch_expr_field = 10;\n" +
" int twice(int i) {\n" +
" int tw = switch (i) {\n" +
" case 0 -> switch_expr_field * 0;\n" +
" case 1 -> 2;\n" +
" default -> 3;\n" +
" };\n" +
" return tw;\n" +
" }\n" +
" public static void main(String... args) {\n" +
" System.out.print(new X().twice(3));\n" +
" }\n" +
"}\n"
);
IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
try {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
search("switch_expr_field", FIELD, REFERENCES);
assertSearchResults("src/X.java int X.twice(int) [switch_expr_field] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
/*
* java search reference for an integer in default block of switch expression
*/
public void testBug542559_004() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n" +
" int switch_expr_field = 10;\n" +
" int twice(int i) {\n" +
" int tw = switch (i) {\n" +
" case 0 -> switch_expr_field * 0;\n" +
" case 1 -> 2;\n" +
" default ->{ \n" +
" switch_expr_field*9; \n" +
" }};\n" +
" return tw;\n" +
" }\n" +
" public static void main(String... args) {\n" +
" System.out.print(new X().twice(3));\n" +
" }\n" +
"}\n"
);
IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
try {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
search("switch_expr_field", FIELD, REFERENCES);
assertSearchResults(
"src/X.java int X.twice(int) [switch_expr_field] EXACT_MATCH\n" +
"src/X.java int X.twice(int) [switch_expr_field] EXACT_MATCH"
);
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
/*
* java search reference for an integer in default of switch expression
*/
public void testBug542559_005() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n" +
" int switch_expr_field = 10;\n" +
" int twice(int i) {\n" +
" int tw = switch (i) {\n" +
" case 0 -> switch_expr_field * 0;\n" +
" case 1 -> 2;\n" +
" default -> switch_expr_field*9;\n" +
" };\n" +
" return tw;\n" +
" }\n" +
" public static void main(String... args) {\n" +
" System.out.print(new X().twice(3));\n" +
" }\n" +
"}\n"
);
IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
try {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
search("switch_expr_field", FIELD, REFERENCES);
assertSearchResults(
"src/X.java int X.twice(int) [switch_expr_field] EXACT_MATCH\n" +
"src/X.java int X.twice(int) [switch_expr_field] EXACT_MATCH"
);
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
/*
* java search reference for simple multi constant case statement for enum
*/
public void testBug542559_006() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n" +
"enum Day { SATURDAY, SUNDAY, MONDAY;}\n" +
"public static void bar(Day day) {\n" +
" switch (day) {\n" +
" case SATURDAY, SUNDAY: \n" +
" System.out.println(Day.SUNDAY);\n" +
" break;\n" +
" case MONDAY : System.out.println(Day.MONDAY);\n" +
" break;\n" +
" }\n" +
" }" +
" public static void main(String[] args) {\n" +
" bar(Day.SATURDAY);\n" +
" }\n"
+
"}\n"
);
IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
try {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
search("SATURDAY", FIELD, REFERENCES);
assertSearchResults(
"src/X.java void X.bar(Day) [SATURDAY] EXACT_MATCH\n"+
"src/X.java void X.main(String[]) [SATURDAY] EXACT_MATCH"
);
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
/*
* java search reference for simple multi constant case statement for enum, 2nd case
*/
public void testBug542559_007() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n" +
"enum Day { SATURDAY, SUNDAY, MONDAY;}\n" +
"public static void bar(Day day) {\n" +
" switch (day) {\n" +
" case SATURDAY, SUNDAY: \n" +
" System.out.println(Day.SUNDAY);\n" +
" break;\n" +
" case MONDAY : System.out.println(Day.MONDAY);\n" +
" break;\n" +
" }\n" +
" }" +
" public static void main(String[] args) {\n" +
" bar(Day.SATURDAY);\n" +
" }\n"
+
"}\n"
);
IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
try {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
search("SUNDAY", FIELD, REFERENCES);
assertSearchResults(
"src/X.java void X.bar(Day) [SUNDAY] EXACT_MATCH\n"+
"src/X.java void X.bar(Day) [SUNDAY] EXACT_MATCH"
);
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
/*
* java search reference for class file reference in switch expression
*/
public void testBug542559_008() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X2.java",
"public class X2 {\n" +
" String s = new String(); \n" +
" int switch_expr_field = 10;\n" +
" int twice(int i) {\n" +
" int tw = switch (i) {\n" +
" case 0 -> switch_expr_field * 0;\n" +
" case 1 -> 2;\n" +
" default -> new X2().toString().length();\n" +
" };\n" +
" return tw;\n" +
" }\n" +
" public static void main(String... args) {\n" +
" System.out.print(new X2().twice(3));\n" +
" }\n" +
"}\n"
);
IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
try {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
search("X2", CLASS, REFERENCES);
assertSearchResults(
"src/X2.java int X2.twice(int) [X2] EXACT_MATCH\n"+
"src/X2.java void X2.main(String ...) [X2] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
/*
* java search a method reference in switch expression
*/
public void testBug542559_0012() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"import java.util.function.Supplier;\n" +
"interface I0 { void i(); }\n" +
"interface I1 extends I0 {}\n" +
"interface I2 extends I0 {}\n" +
"public class X {\n" +
" I1 n1() { return null; }\n" +
" <I extends I2> I n2() { return null; }\n" +
" <M> M m(Supplier<M> m) { return m.get(); }\n" +
" void test(int i, boolean b) {\n" +
" m(switch (i) {\n" +
" case 1 -> this::n1;\n" +
" default -> this::n2;\n" +
" }).i(); \n" +
" }\n" +
" public static void main(String[] args) {\n" +
" try {\n" +
" new X().test(1, true);\n" +
" } catch (NullPointerException e) {\n" +
" System.out.println(\"NPE as expected\");\n" +
" }\n" +
" }\n" +
"}\n"
);
IJavaProject javaProject = this.workingCopies[0].getJavaProject();//assuming single project for all working copies
String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
try {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
search("n1", METHOD, REFERENCES);
assertSearchResults("src/X.java void X.test(int, boolean) [n1] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
// copy from JavaSearchBugs12Tests ends
public void testBug549413_001() throws CoreException {
// field reference in yield
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n" +
"int switch_expr_field = 10; \n" +
"public static int foo(int val) {\n" +
"int k = switch (val) {\n" +
"case 1 -> { yield switch_expr_field; }\n" +
"default -> { yield 2; }\n" +
"};\n" +
"return k;\n" +
"}\n" +
" public static void main(String... args) {\n" +
" System.out.println(X.foo(2));\n" +
" }\n" +
"}\n"
);
IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
try {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
search("switch_expr_field", FIELD, REFERENCES);
assertSearchResults("src/X.java int X.foo(int) [switch_expr_field] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
public void testBug549413_002() throws CoreException {
//field all occurrences in yield
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n" +
"int switch_expr_field = 10; \n" +
"public static int foo(int val) {\n" +
"int k = switch (val) {\n" +
"case 1 -> { yield switch_expr_field; }\n" +
"default -> { yield 2; }\n" +
"};\n" +
"return k;\n" +
"}\n" +
" public static void main(String... args) {\n" +
" System.out.println(X.foo(2));\n" +
" }\n" +
"}\n"
);
IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
try {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
search("switch_expr_field", FIELD, ALL_OCCURRENCES);
assertSearchResults("src/X.java X.switch_expr_field [switch_expr_field] EXACT_MATCH\n" +
"src/X.java int X.foo(int) [switch_expr_field] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
public void testBug549413_003() throws CoreException {
//METHOD named yield - all occurrences in yield
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n"+
"\n"+
" public static int yield() {\n"+
" return 1;\n"+
" }\n"+
" @SuppressWarnings(\"preview\")\n"+
" public static int foo(int val) {\n"+
" int k = switch (val) {\n"+
" case 1 -> { yield 1; }\n"+
" default -> { yield 2; }\n"+
" };\n"+
" return k;\n"+
" }\n"+
" public static void main(String[] args) {\n"+
" System.out.println(X.foo(1));\n"+
" }\n"+
"}\n"
);
IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
try {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
search("yield", METHOD, ALL_OCCURRENCES);
assertSearchResults("src/X.java int X.yield() [yield] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
public void testBug549413_004() throws CoreException {
//METHOD yield - references in yield
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n"+
"\n"+
" public static int yield() {\n"+
" return 1;\n"+
" }\n"+
" @SuppressWarnings(\"preview\")\n"+
" public static int foo(int val) {\n"+
" int k = switch (val) {\n"+
" case 1 -> { yield X.yield(); }\n"+
" default -> { yield 2; }\n"+
" };\n"+
" return k;\n"+
" }\n"+
" public static void main(String[] args) {\n"+
" System.out.println(X.foo(1));\n"+
" }\n"+
"}\n"
);
IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
try {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
search("yield", METHOD, REFERENCES);
assertSearchResults("src/X.java int X.foo(int) [yield()] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
public void testBug549413_005() throws CoreException {
//field yield - references in yield
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n"+
" public static int yield;\n"+
" @SuppressWarnings(\"preview\")\n"+
" public static int foo(int val) {\n"+
" int k = switch (val) {\n"+
" case 1 -> { yield yield; }\n"+
" default -> { yield 2; }\n"+
" };\n"+
" return k;\n"+
" }\n"+
" public static void main(String[] args) {\n"+
" System.out.println(X.foo(1));\n"+
" }\n"+
"}\n"
);
IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
try {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
search("yield", FIELD, REFERENCES);
assertSearchResults("src/X.java int X.foo(int) [yield] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
public void testBug549413_006() throws CoreException {
//field yield - all occurrence in yield
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n"+
" public static int yield;\n"+
" @SuppressWarnings(\"preview\")\n"+
" public static int foo(int val) {\n"+
" int k = switch (val) {\n"+
" case 1 -> { yield yield; }\n"+
" default -> { yield 2; }\n"+
" };\n"+
" return k;\n"+
" }\n"+
" public static void main(String[] args) {\n"+
" System.out.println(X.foo(1));\n"+
" }\n"+
"}\n"
);
IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
try {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
search("yield", FIELD, ALL_OCCURRENCES);
assertSearchResults("src/X.java X.yield [yield] EXACT_MATCH\n" +
"src/X.java int X.foo(int) [yield] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
public void testBug549413_007() throws CoreException {
//field yield - all reference of identifier in yield statement
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n"+
" public static int yield;\n"+
" public static int abc;\n"+
" @SuppressWarnings(\"preview\")\n"+
" public static int foo(int val) {\n"+
" int k = switch (val) {\n"+
" case 1 -> { abc=0;yield yield; }\n"+
" default -> { yield 2; }\n"+
" };\n"+
" return k;\n"+
" }\n"+
" public static void main(String[] args) {\n"+
" System.out.println(X.foo(1));\n"+
" }\n"+
"}\n"
);
IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
try {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
search("abc", FIELD, ALL_OCCURRENCES);
assertSearchResults("src/X.java X.abc [abc] EXACT_MATCH\n" +
"src/X.java int X.foo(int) [abc] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
public void testBug549413_008() throws CoreException {
//field yield - all reference of identifier in yield statement ( yield -1 without braces)
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n"+
" static int yield = 100;\n"+
" @SuppressWarnings(\"preview\")\n"+
" public static int foo(int i) {\n"+
" int r = switch(i) {\n"+
" default -> yield - 1;\n"+
" };\n"+
" return r;\n"+
" }\n"+
" public int yield() {\n"+
" return 0;\n"+
" }\n"+
" public static void main(String[] args) {\n"+
" System.out.println(X.foo(0));\n"+
" }\n"+
"}\n"
);
IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
try {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
search("yield", FIELD, REFERENCES);
assertSearchResults("src/X.java int X.foo(int) [yield] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
public void testBug549413_009() throws CoreException {
//field yield - all reference of identifier in yield statement ( yield -1 with braces)
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n"+
" int yield = 100;\n"+
" @SuppressWarnings(\"preview\")\n"+
" public static int foo(int i) {\n"+
" int r = switch(i) {\n"+
" default ->{ yield - 1;}\n"+
" };\n"+
" return r;\n"+
" }\n"+
" public int yield() {\n"+
" return 0;\n"+
" }\n"+
" public static void main(String[] args) {\n"+
" System.out.println(X.foo(0));\n"+
" }\n"+
"}\n"
);
IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
try {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
search("yield", FIELD, REFERENCES);
assertSearchResults("");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
public void testBug549413_010() throws CoreException {
//method - break label
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n"+
"\n"+
" static int yield = 100;\n"+
" @SuppressWarnings(\"preview\")\n"+
" public static int foo(int i) {\n"+
" int r = switch(i) {\n"+
" default -> X.yield();\n"+
" };\n"+
" return r;\n"+
" }\n"+
" public static int yield() {\n"+
" yield: while (X.yield == 100) {\n"+
" yield = 256;\n"+
" break yield;\n"+
" }\n"+
" return yield;\n"+
" }\n"+
" public static void main(String[] args) {\n"+
" System.out.println(X.foo(0));\n"+
" }\n"+
"}\n"
);
IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
try {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
search("yield", METHOD, REFERENCES);
assertSearchResults("src/X.java int X.foo(int) [yield()] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
public void testBug549413_011() throws CoreException {
//break label in combination with yield field
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n"+
"\n"+
" static int yield = 100;\n"+
" @SuppressWarnings(\"preview\")\n"+
" public static int foo(int i) {\n"+
" int r = switch(i) {\n"+
" default -> X.yield();\n"+
" };\n"+
" return r;\n"+
" }\n"+
" public static int yield() {\n"+
" yield: while (X.yield == 100) {\n"+
" yield = 256;\n"+
" break yield;\n"+
" }\n"+
" return yield;\n"+
" }\n"+
" public static void main(String[] args) {\n"+
" System.out.println(X.foo(0));\n"+
" }\n"+
"}\n"
);
IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
try {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
search("yield", FIELD, REFERENCES);
assertSearchResults("src/X.java int X.yield() [yield] EXACT_MATCH\n" +
"src/X.java int X.yield() [yield] EXACT_MATCH\n" +
"src/X.java int X.yield() [yield] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
public void testBug549413_012() throws CoreException {
//field yield - multiple yield references
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n"+
"\n"+
" static int yield = 100;\n"+
" @SuppressWarnings(\"preview\")\n"+
" public static int foo(int i) {\n"+
" int r = switch(i) {\n"+
" default -> {yield yield + yield + yield * yield;}\n"+
" };\n"+
" return r;\n"+
" }\n"+
" public static void main(String[] args) {\n"+
" System.out.println(X.foo(0));\n"+
" }\n"+
"}\n"
);
IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
try {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
search("yield", FIELD, REFERENCES);
assertSearchResults("src/X.java int X.foo(int) [yield] EXACT_MATCH\n" +
"src/X.java int X.foo(int) [yield] EXACT_MATCH\n" +
"src/X.java int X.foo(int) [yield] EXACT_MATCH\n" +
"src/X.java int X.foo(int) [yield] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
public void testBug549413_013() throws CoreException {
//field yield -another yield field test
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n"+
"\n"+
" static int yield = 100;\n"+
" @SuppressWarnings(\"preview\")\n"+
" public static int foo(int i) {\n"+
" int r = switch(i) {\n"+
" default ->0 + yield + 10;\n"+
" };\n"+
" return r;\n"+
" }\n"+
" public static void main(String[] args) {\n"+
" System.out.println(X.foo(0));\n"+
" }\n"+
"}\n"
);
IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
try {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
search("yield", FIELD, REFERENCES);
assertSearchResults("src/X.java int X.foo(int) [yield] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
public void testBug549413_014() throws CoreException {
//field yield - ternary operator
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n"+
" int yield = 100;\n"+
" @SuppressWarnings(\"preview\")\n"+
" public int foo(int i) {\n"+
" int r = switch(i) {\n"+
" case 0 : yield 100;\n"+
" case 1 : yield yield;\n"+
" default: yield 0;\n"+
" };\n"+
" return r > 100 ? yield + 1 : yield + 200;\n"+
" }\n"+
" public static void main(String[] args) {\n"+
" }\n"+
"}\n"
);
IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
try {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
search("yield", FIELD, REFERENCES);
assertSearchResults("src/X.java int X.foo(int) [yield] EXACT_MATCH\n" +
"src/X.java int X.foo(int) [yield] EXACT_MATCH\n" +
"src/X.java int X.foo(int) [yield] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
public void testBug549413_015() throws CoreException {
//field yield - another test case
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n"+
" int yield = 100;\n"+
" @SuppressWarnings(\"preview\")\n"+
" public int foo(int i) {\n"+
" int r = switch(i) {\n"+
" case 0 : yield 100;\n"+
" case 1 : yield yield;\n"+
" default: yield 0;\n"+
" };\n"+
" return r > 100 ? yield() + 1 : yield + 200;\n"+
" }\n"+
" public static void main(String[] args) {\n"+
" }\n"+
" public static int yield() {\n"+
" return 1;\n"+
" }\n"+
"}\n"
);
IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
try {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
search("yield", FIELD, REFERENCES);
assertSearchResults("src/X.java int X.foo(int) [yield] EXACT_MATCH\n" +
"src/X.java int X.foo(int) [yield] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
public void testBug549413_016() throws CoreException {
//method yield -method references
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n"+
" int yield = 100;\n"+
" @SuppressWarnings(\"preview\")\n"+
" public int foo(int i) {\n"+
" int r = switch(i) {\n"+
" case 0 : yield 100;\n"+
" case 1 : yield yield;\n"+
" default: yield 0;\n"+
" };\n"+
" return r > 100 ? yield() + 1 : yield + 200;\n"+
" }\n"+
" public static void main(String[] args) {\n"+
" }\n"+
" public static int yield() {\n"+
" return 1;\n"+
" }\n"+
"}\n"
);
IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
try {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
search("yield", METHOD, REFERENCES);
assertSearchResults("src/X.java int X.foo(int) [yield()] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
public void testBug549413_017() throws CoreException {
//select local variable and find the declaration
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n"+
"\n"+
" @SuppressWarnings(\"preview\")\n"+
" public static int foo(int i) {\n"+
" int yield = 100;\n"+
" int r = switch(i) {\n"+
" default -> {yield /* here*/ yield + yield + yield * yield;}\n"+
" };\n"+
" return r;\n"+
" }\n"+
" public static void main(String[] args) {\n"+
" System.out.println(X.foo(0));\n"+
" }\n"+
"}\n"
);
String str = this.workingCopies[0].getSource();
String selection = "/* here*/ yield";
int start = str.indexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.workingCopies[0].codeSelect(start, length);
ILocalVariable local = (ILocalVariable) elements[0];
search(local, DECLARATIONS, EXACT_RULE);
assertSearchResults(
"src/X.java int X.foo(int).yield [yield] EXACT_MATCH");
}
public void testBug549413_018() throws CoreException {
//select local variable and find the declaration
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n"+
" @SuppressWarnings(\"preview\")\n"+
" public static int foo(int i) {\n"+
" int localVar = 100;\n"+
" int r = switch(i) {\n"+
" default -> {yield /* here*/ localVar + localVar + localVar * localVar;}\n"+
" };\n"+
" return r;\n"+
" }\n"+
" public static void main(String[] args) {\n"+
" System.out.println(X.foo(0));\n"+
" }\n"+
"}\n"
);
String str = this.workingCopies[0].getSource();
String selection = "/* here*/ localVar";
int start = str.indexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.workingCopies[0].codeSelect(start, length);
ILocalVariable local = (ILocalVariable) elements[0];
search(local, DECLARATIONS, EXACT_RULE);
assertSearchResults(
"src/X.java int X.foo(int).localVar [localVar] EXACT_MATCH");
}
// add non-preview stuff involving yield field and method
public void testBug549413_019() throws CoreException {
//old style switch case without preview search for yield field.
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n"+
" static int yield;\n"+
" public static int yield() { \n"+
" return 7; \n"+
" } \n"+
" public static void main(String[] args) { \n"+
" int week = 1; \n"+
" switch (week) { \n"+
" case 1: \n"+
" yield = 88; \n"+
" break; \n"+
" case 2: \n"+
" yield = yield();\n"+
" break; \n"+
" default: \n"+
" yield = 88; \n"+
" break; \n" +
" } \n" +
" System.out.println(yield); \n"+
" }\n"+
"}\n"
);
try {
search("yield", FIELD, REFERENCES);
assertSearchResults("src/X.java void X.main(String[]) [yield] EXACT_MATCH\n" +
"src/X.java void X.main(String[]) [yield] EXACT_MATCH\n" +
"src/X.java void X.main(String[]) [yield] EXACT_MATCH\n" +
"src/X.java void X.main(String[]) [yield] EXACT_MATCH");
} finally {
}
}
public void testBug549413_020() throws CoreException {
//old style switch case without preview search for yield method.
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n"+
" static int yield;\n"+
" public static int yield() { \n"+
" return 7; \n"+
" } \n"+
" public static void main(String[] args) { \n"+
" int week = 1; \n"+
" switch (week) { \n"+
" case 1: \n"+
" yield = 88; \n"+
" break; \n"+
" case 2: \n"+
" yield = yield();\n"+
" break; \n"+
" default: \n"+
" yield = 88; \n"+
" break; \n" +
" } \n" +
" System.out.println(yield); \n"+
" }\n"+
"}\n"
);
try {
search("yield", METHOD, REFERENCES);
assertSearchResults("src/X.java void X.main(String[]) [yield()] EXACT_MATCH");
} finally {
}
}
}