blob: 8ebf7b29b299bec02e4940d3fe0ce1f535a68b2b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2021 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 java.io.IOException;
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.IJavaSearchConstants;
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.SearchPattern;
import org.eclipse.jdt.core.search.TypeReferenceMatch;
import org.eclipse.jdt.internal.core.LocalVariable;
import org.eclipse.jdt.internal.core.SourceField;
import junit.framework.Test;
public class JavaSearchBugs17Tests 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 JavaSearchBugs17Tests(String name) {
super(name);
this.endChar = "";
}
public static Test suite() {
return buildModelTestSuite(JavaSearchBugs17Tests.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(']');
}
}
}
protected IJavaProject setUpJavaProject(final String projectName, String compliance, boolean useFullJCL)
throws CoreException, IOException {
// copy files in project from source workspace to target workspace
IJavaProject setUpJavaProject = super.setUpJavaProject(projectName, compliance, useFullJCL);
return setUpJavaProject;
}
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", "17");
}
public void tearDownSuite() throws Exception {
deleteProject("JavaSearchBugs");
super.tearDownSuite();
}
protected void setUp() throws Exception {
super.setUp();
this.resultCollector = new TestCollector();
this.resultCollector.showAccuracy(true);
}
// switch pattern search - test reference of an object in case statement
public void testBug573943_001() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n" +
"public static void main(String[] args) {\n" +
"foo(Integer.valueOf(5));\n" +
"foo(new Object());\n" +
"}\n" +
"private static void foo(Object o) {\n" +
" switch (o) {\n" +
" case Integer i -> System.out.println(\"Integer:\" + i);\n" +
" case String /*here*/s -> System.out.println(\"String:\" + s + s);\n" +
" default -> System.out.println(\"Object\" + o);\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);
String str = this.workingCopies[0].getSource();
String selection = "/*here*/s";
int start = str.indexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.workingCopies[0].codeSelect(start, length);
ILocalVariable local = (ILocalVariable) elements[0];
search(local, REFERENCES, EXACT_RULE);
assertSearchResults("src/X.java void X.foo(Object) [s] EXACT_MATCH\n"
+ "src/X.java void X.foo(Object) [s] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
// find reference on a field in switch pattern
public void testBug573943_002() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n" +
"public static int /*here*/field \n" +
"public static void main(String[] args) {\n" +
"foo(Integer.valueOf(5));\n" +
"foo(new Object());\n" +
"}\n" +
"private static void foo(Object o) {\n" +
" switch (o) {\n" +
" case Integer i -> System.out.println(\"Integer:\" + i);\n" +
" case String s -> System.out.println(\"String:\" + s + field);\n" +
" default -> System.out.println(\"Object\" + o);\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);
String str = this.workingCopies[0].getSource();
String selection = "/*here*/field";
int start = str.indexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.workingCopies[0].codeSelect(start, length);
SourceField field = (SourceField) elements[0];
search(field, REFERENCES, EXACT_RULE);
assertSearchResults("src/X.java void X.foo(Object) [field] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
// find all occurrence of a field in switch pattern
public void testBug573943_003() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n" +
"public static int /*here*/field \n" +
"public static void main(String[] args) {\n" +
"foo(Integer.valueOf(5));\n" +
"foo(new Object());\n" +
"}\n" +
"private static void foo(Object o) {\n" +
" switch (o) {\n" +
" case Integer i -> System.out.println(\"Integer:\" + i);\n" +
" case String s -> System.out.println(\"String:\" + s + field);\n" +
" default -> System.out.println(\"Object\" + o);\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);
String str = this.workingCopies[0].getSource();
String selection = "/*here*/field";
int start = str.indexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.workingCopies[0].codeSelect(start, length);
SourceField field = (SourceField) elements[0];
search(field, ALL_OCCURRENCES, EXACT_RULE);
assertSearchResults("src/X.java X.field [field] EXACT_MATCH\n"
+ "src/X.java void X.foo(Object) [field] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
// find all reference of a local variable in switch pattern
public void testBug573943_004() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n" +
"public static int /*here*/field \n" +
"public static void main(String[] args) {\n" +
"foo(Integer.valueOf(5));\n" +
"foo(new Object());\n" +
"}\n" +
"private static void foo(Object o) {\n" +
" int /*here*/local=0" +
" switch (o) {\n" +
" case Integer i -> System.out.println(\"Integer:\" + i);\n" +
" case String s -> System.out.println(\"String:\" + s + local);\n" +
" default -> System.out.println(\"Object\" + o);\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);
String str = this.workingCopies[0].getSource();
String selection = "/*here*/local";
int start = str.indexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.workingCopies[0].codeSelect(start, length);
ILocalVariable field = (ILocalVariable) elements[0];
search(field, REFERENCES, EXACT_RULE);
assertSearchResults("src/X.java void X.foo(Object) [local] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
// find all reference of a local variable in switch pattern
public void testBug573943_005() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n" +
"public static int /*here*/field \n" +
"public static void main(String[] args) {\n" +
"foo(Integer.valueOf(5));\n" +
"foo(new Object());\n" +
"}\n" +
"private static void foo(Object o) {\n" +
" int /*here*/local=0" +
" switch (o) {\n" +
" case Integer i -> System.out.println(\"Integer:\" + i +local);\n" +
" case String s -> System.out.println(\"String:\" + s + local);\n" +
" default -> System.out.println(\"Object\" + o);\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);
String str = this.workingCopies[0].getSource();
String selection = "/*here*/local";
int start = str.indexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.workingCopies[0].codeSelect(start, length);
ILocalVariable field = (ILocalVariable) elements[0];
search(field, ALL_OCCURRENCES, EXACT_RULE);
assertSearchResults("src/X.java void X.foo(Object).local [local] EXACT_MATCH\n"
+ "src/X.java void X.foo(Object) [local] EXACT_MATCH\n"
+ "src/X.java void X.foo(Object) [local] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
// find all occurrence of a field in switch case statement and switch expression
public void testBug573943_006() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n" +
"public static int /*here*/field \n" +
"public static void main(String[] args) {\n" +
"foo(Integer.valueOf(5));\n" +
"foo(new Object());\n" +
"}\n" +
"private static void foo(Object o) {\n" +
" switch (o) {\n" +
" case Integer i && field > 0 -> System.out.println(\"Integer:\" + i);\n" +
" case String s -> System.out.println(\"String:\" + s + field);\n" +
" default -> System.out.println(\"Object\" + o);\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);
String str = this.workingCopies[0].getSource();
String selection = "/*here*/field";
int start = str.indexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.workingCopies[0].codeSelect(start, length);
SourceField field = (SourceField) elements[0];
search(field, ALL_OCCURRENCES, EXACT_RULE);
assertSearchResults("src/X.java X.field [field] EXACT_MATCH\n"
+ "src/X.java void X.foo(Object) [field] EXACT_MATCH\n"
+ "src/X.java void X.foo(Object) [field] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
// find all reference of a local variable in switch pattern amd case statements
public void testBug573943_007() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n" +
"public static int /*here*/field \n" +
"public static void main(String[] args) {\n" +
"foo(Integer.valueOf(5));\n" +
"foo(new Object());\n" +
"}\n" +
"private static void foo(Object o) {\n" +
" int /*here*/local=0" +
" switch (o) {\n" +
" case Integer i && local >9 -> System.out.println(\"Integer:\" + i +local);\n" +
" case String s -> System.out.println(\"String:\" + s + local);\n" +
" default -> System.out.println(\"Object\" + o);\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);
String str = this.workingCopies[0].getSource();
String selection = "/*here*/local";
int start = str.indexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.workingCopies[0].codeSelect(start, length);
ILocalVariable field = (ILocalVariable) elements[0];
search(field, ALL_OCCURRENCES, EXACT_RULE);
assertSearchResults("src/X.java void X.foo(Object).local [local] EXACT_MATCH\n"
+ "src/X.java void X.foo(Object) [local] EXACT_MATCH\n"
+ "src/X.java void X.foo(Object) [local] EXACT_MATCH\n"
+ "src/X.java void X.foo(Object) [local] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
// switch pattern search - test reference of an object in case statement as well as switch expression
public void testBug573943_008() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n" +
"public static void main(String[] args) {\n" +
"foo(Integer.valueOf(5));\n" +
"foo(new Object());\n" +
"}\n" +
"private static void foo(Object o) {\n" +
" switch (o) {\n" +
" case Integer i -> System.out.println(\"Integer:\" + i);\n" +
" case String /*here*/s && s.hashCode()>0 -> System.out.println(\"String:\" );\n" +
" default -> System.out.println(\"Object\" + o);\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);
String str = this.workingCopies[0].getSource();
String selection = "/*here*/s";
int start = str.indexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.workingCopies[0].codeSelect(start, length);
ILocalVariable local = (ILocalVariable) elements[0];
search(local, REFERENCES, EXACT_RULE);
assertSearchResults("src/X.java void X.foo(Object) [s] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
// switch pattern search - test reference of an custom class object in case statement
public void testBug573943_009() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"sealed interface I permits A, B {}\n" +
"final class A implements S {}\n" +
"final class B implements S {}\n" +
"public class X {\n" +
"public static void main(String[] args) {\n" +
"foo(new A());\n" +
"}\n" +
"private static void foo(S o) {\n" +
" switch (o) {\n" +
" case A /*here*/a : System.out.println(\"A:\" + a +a); break;\n" +
" case B b : System.out.println(\"B:\" + b);\n" +
" default : System.out.println(\"Object\" + o);\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);
String str = this.workingCopies[0].getSource();
String selection = "/*here*/a";
int start = str.indexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.workingCopies[0].codeSelect(start, length);
ILocalVariable local = (ILocalVariable) elements[0];
search(local, REFERENCES, EXACT_RULE);
assertSearchResults("src/X.java void X.foo(S) [a] EXACT_MATCH\n"
+ "src/X.java void X.foo(S) [a] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
// switch pattern search - test reference of an custom class object in case statement amd switch statement
public void testBug573943_010() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"sealed interface I permits A, B {}\n" +
"final class A implements S {}\n" +
"final class B implements S {}\n" +
"public class X {\n" +
"public static void main(String[] args) {\n" +
"foo(new A());\n" +
"}\n" +
"private static void foo(S o) {\n" +
" switch (o) {\n" +
" case A /*here*/a && a.hashCode()> 0 : System.out.println(\"A:\" + a +a); break;\n" +
" case B b : System.out.println(\"B:\" + b);\n" +
" default : System.out.println(\"Object\" + o);\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);
String str = this.workingCopies[0].getSource();
String selection = "/*here*/a";
int start = str.indexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.workingCopies[0].codeSelect(start, length);
ILocalVariable local = (ILocalVariable) elements[0];
search(local, REFERENCES, EXACT_RULE);
assertSearchResults("src/X.java void X.foo(S) [a] EXACT_MATCH\n"
+ "src/X.java void X.foo(S) [a] EXACT_MATCH\n"
+ "src/X.java void X.foo(S) [a] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
// switch pattern search - test reference of an custom record object in case statement
public void testBug573943_011() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"sealed interface I permits A, B {}\n" +
"record A (int i) implements S {}\n" +
"record B (int i) implements S {}\n" +
"public class X {\n" +
"public static void main(String[] args) {\n" +
"foo(new A());\n" +
"}\n" +
"private static void foo(S o) {\n" +
" switch (o) {\n" +
" case A /*here*/a : System.out.println(\"A:\" + a +a); break;\n" +
" case B b : System.out.println(\"B:\" + b);break;\n" +
" default : System.out.println(\"Object\" + o);\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);
String str = this.workingCopies[0].getSource();
String selection = "/*here*/a";
int start = str.indexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.workingCopies[0].codeSelect(start, length);
ILocalVariable local = (ILocalVariable) elements[0];
search(local, REFERENCES, EXACT_RULE);
assertSearchResults("src/X.java void X.foo(S) [a] EXACT_MATCH\n"
+ "src/X.java void X.foo(S) [a] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
// switch pattern search - test reference of an custom record object in case statement and switch statement
public void testBug573943_012() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"sealed interface I permits A, B {}\n" +
"record A (int i) implements S {}\n" +
"record B (int i) implements S {}\n" +
"public class X {\n" +
"public static void main(String[] args) {\n" +
"foo(new A());\n" +
"}\n" +
"private static void foo(S o) {\n" +
" switch (o) {\n" +
" case A /*here*/a && a.hashCode() : System.out.println(\"A:\" + a +a); break;\n" +
" case B b : System.out.println(\"B:\" + b);\n" +
" default : System.out.println(\"Object\" + o);\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);
String str = this.workingCopies[0].getSource();
String selection = "/*here*/a";
int start = str.indexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.workingCopies[0].codeSelect(start, length);
ILocalVariable local = (ILocalVariable) elements[0];
search(local, REFERENCES, EXACT_RULE);
assertSearchResults("src/X.java void X.foo(S) [a] EXACT_MATCH\n"
+ "src/X.java void X.foo(S) [a] EXACT_MATCH\n"
+ "src/X.java void X.foo(S) [a] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
// switch pattern search - test reference of an custom class object in case statement and switch expression
public void testBug573943_013() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"sealed interface I permits A, B {}\n" +
"final class A implements S {}\n" +
"final class B implements S {}\n" +
"public class X {\n" +
"public static void main(String[] args) {\n" +
"foo(new A());\n" +
"}\n" +
"private static int foo(S o) {\n" +
" switch (o) {\n" +
" case A /*here*/a && a.hashCode()> 0 -> 1;\n" +
" case B b ->2;\n" +
" default -> 3;\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);
String str = this.workingCopies[0].getSource();
String selection = "/*here*/a";
int start = str.indexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.workingCopies[0].codeSelect(start, length);
ILocalVariable local = (ILocalVariable) elements[0];
search(local, REFERENCES, EXACT_RULE);
assertSearchResults("src/X.java int X.foo(S) [a] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
// switch pattern search - test reference of an object in case statement as well as switch pattern
public void testBug573943_014() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n" +
"public static void main(String[] args) {\n" +
"foo(Integer.valueOf(5));\n" +
"foo(new Object());\n" +
"}\n" +
"private static void foo(Object o) {\n" +
" switch (o) {\n" +
" case Integer i : System.out.println(\"Integer:\" + i);break;\n" +
" case String /*here*/s : System.out.println(\"String:\" + s + s);break;\n" +
" default : System.out.println(\"Object\" + o);\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);
String str = this.workingCopies[0].getSource();
System.out.println(str);
String selection = "/*here*/s";
int start = str.indexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.workingCopies[0].codeSelect(start, length);
ILocalVariable local = (ILocalVariable) elements[0];
search(local, REFERENCES, EXACT_RULE);
assertSearchResults("src/X.java void X.foo(Object) [s] EXACT_MATCH\n"
+ "src/X.java void X.foo(Object) [s] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
// switch pattern search - test reference of an object in case statement as well as switch pattern
public void testBug573943_015() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n" +
"public static void main(String[] args) {\n" +
"foo(Integer.valueOf(5));\n" +
"foo(new Object());\n" +
"}\n" +
"private static void foo(Object o) {\n" +
" switch (o) {\n" +
" case Integer i : System.out.println(\"Integer:\" + i);break;\n" +
" case String /*here*/s && s.hashCode()>0 : System.out.println(\"String:\" );break;\n" +
" default : System.out.println(\"Object\" + o);\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);
String str = this.workingCopies[0].getSource();
String selection = "/*here*/s";
int start = str.indexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.workingCopies[0].codeSelect(start, length);
ILocalVariable local = (ILocalVariable) elements[0];
search(local, REFERENCES, EXACT_RULE);
assertSearchResults("src/X.java void X.foo(Object) [s] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
// type reference with a switch expression pattern
// see testBug573943_012 for switch pattern and type reference
public void testBug573943_016() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"sealed interface I permits A, B {}\n" +
"final class A implements S {}\n" +
"final class B implements S {}\n" +
"public class X {\n" +
"public static void main(String[] args) {\n" +
"foo(new A());\n" +
"}\n" +
"private static void foo(S o) {\n" +
" switch (o) {\n" +
" case A /*here*/a -> System.out.println(\"A:\" + a +a); \n" +
" case B b -> System.out.println(\"B:\" + b);\n" +
" default -> System.out.println(\"Object\" + o);\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);
String str = this.workingCopies[0].getSource();
String selection = "/*here*/a";
int start = str.indexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.workingCopies[0].codeSelect(start, length);
ILocalVariable local = (ILocalVariable) elements[0];
search(local, REFERENCES, EXACT_RULE);
assertSearchResults("src/X.java void X.foo(S) [a] EXACT_MATCH\n"
+ "src/X.java void X.foo(S) [a] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
// type reference with a switch expression pattern
public void testBug573943_017() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"sealed interface I permits A, B {}\n" +
"final class A implements S {}\n" +
"final class B implements S {}\n" +
"public class X {\n" +
"public static void main(String[] args) {\n" +
"foo(new A());\n" +
"}\n" +
"private static void foo(S o) {\n" +
" switch (o) {\n" +
" case A /*here*/a && a.toString().length()>2 -> System.out.println(\"A:\" + a +a); \n" +
" case B b -> System.out.println(\"B:\" + b);\n" +
" default -> System.out.println(\"Object\" + o);\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);
String str = this.workingCopies[0].getSource();
String selection = "/*here*/a";
int start = str.indexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.workingCopies[0].codeSelect(start, length);
ILocalVariable local = (ILocalVariable) elements[0];
search(local, REFERENCES, EXACT_RULE);
assertSearchResults("src/X.java void X.foo(S) [a] EXACT_MATCH\n"
+"src/X.java void X.foo(S) [a] EXACT_MATCH\n"
+ "src/X.java void X.foo(S) [a] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
// selection of pattern variable in case statement and verify that it is local variable
public void testBug573943_018() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n" +
"public static void main(String[] args) {\n" +
"foo(Integer.valueOf(5));\n" +
"foo(new Object());\n" +
"}\n" +
"private static void foo(Object o) {\n" +
" switch (o) {\n" +
" case Integer i -> System.out.println(\"Integer:\" + i);\n" +
" case String s -> System.out.println(\"String:\" + /*here*/s + s);\n" +
" default -> System.out.println(\"Object\" + o);\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);
String str = this.workingCopies[0].getSource();
String selection = "/*here*/s";
int start = str.indexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.workingCopies[0].codeSelect(start, length);
assertTrue(elements[0] instanceof LocalVariable);
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
// selection of pattern variable in case statement and search for declaration
public void testBug573943_019() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n" +
"public static void main(String[] args) {\n" +
"foo(Integer.valueOf(5));\n" +
"foo(new Object());\n" +
"}\n" +
"private static void foo(Object o) {\n" +
" switch (o) {\n" +
" case Integer i -> System.out.println(\"Integer:\" + i);\n" +
" case String s -> System.out.println(\"String:\" + /*here*/s + s);\n" +
" default -> System.out.println(\"Object\" + o);\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);
String str = this.workingCopies[0].getSource();
String selection = "/*here*/s";
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 void X.foo(Object).s [s] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
// selection of guarded pattern variable in case statement and verify that it is local variable
public void testBug573943_020() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n" +
"public static void main(String[] args) {\n" +
"foo(Integer.valueOf(5));\n" +
"foo(new Object());\n" +
"}\n" +
"private static void foo(Object o) {\n" +
" final int a=0; \n" +
" switch (o) {\n" +
" case Integer i && a > 5 -> System.out.println(\"Integer:\" + /*here*/i);\n" +
" case String s -> System.out.println(\"String:\" + s + s);\n" +
" default -> System.out.println(\"Object\" + o);\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);
String str = this.workingCopies[0].getSource();
String selection = "/*here*/i";
int start = str.indexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.workingCopies[0].codeSelect(start, length);
assertTrue(elements[0] instanceof LocalVariable);
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
// selection of pattern variable in case statement and search for declaration
public void testBug573943_021() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n" +
"public static void main(String[] args) {\n" +
"foo(Integer.valueOf(5));\n" +
"foo(new Object());\n" +
"}\n" +
"private static void foo(Object o) {\n" +
" final int a=0; \n" +
" switch (o) {\n" +
" case Integer i && a > 5 -> System.out.println(\"Integer:\" + /*here*/i);\n" +
" case String s -> System.out.println(\"String:\" + s + s);\n" +
" default -> System.out.println(\"Object\" + o);\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);
String str = this.workingCopies[0].getSource();
String selection = "/*here*/i";
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 void X.foo(Object).i [i] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
//not a working copy test
public void testBug573943_022() throws Exception {
try {
IJavaProject project = createJavaProject("first", new String[] {"src"}, new String[] {"JCL17_LIB"}, "bin", "17");
project.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
project.open(null);
createFolder("/first/src/p1");
createFile("/first/src/p1/BClass.java",
"package p1;\n" +
"public class BClass {\n" +
"}\n"
);
createFile("/first/src/p1/X.java",
"package p1;\n" +
"public class X {\n" +
"public static void main(String[] args) {\n" +
"foo(Integer.valueOf(5));\n" +
"foo(new Object());\n" +
"}\n" +
"private static void foo(Object o) {\n" +
" switch (o) {\n" +
" case BClass i -> System.out.println(\"Integer:\" + i);\n" +
" default -> System.out.println(\"Object\" + o);\n" +
" }\n" +
"}\n" +
"}\n"
);
project.close();
project.open(null);
waitUntilIndexesReady();
SearchPattern pattern = SearchPattern.createPattern("BClass", IJavaSearchConstants.TYPE, REFERENCES, SearchPattern.R_EXACT_MATCH);
IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaProject[]
{project});
search(pattern, scope, this.resultCollector);
assertSearchResults(
"src/p1/X.java void p1.X.foo(Object) [BClass] EXACT_MATCH",
this.resultCollector);
}
finally {
deleteProject("first");
}
}
// find reference on a field in switch pattern - without select
public void testBug573943_023() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n" +
"public static int /*here*/fieldj17 \n" +
"public static void main(String[] args) {\n" +
"foo(Integer.valueOf(5));\n" +
"foo(new Object());\n" +
"}\n" +
"private static void foo(Object o) {\n" +
" switch (o) {\n" +
" case Integer i -> System.out.println(\"Integer:\" + i);\n" +
" case String s -> System.out.println(\"String:\" + s + fieldj17 +fieldj17);\n" +
" default -> System.out.println(\"Object\" + o);\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("fieldj17", FIELD, REFERENCES);
assertSearchResults("src/X.java void X.foo(Object) [fieldj17] EXACT_MATCH\n"
+ "src/X.java void X.foo(Object) [fieldj17] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
// find all occurrence on a field in switch pattern - without select
public void testBug573943_024() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n" +
"public static int /*here*/fieldj17 \n" +
"public static void main(String[] args) {\n" +
"foo(Integer.valueOf(5));\n" +
"foo(new Object());\n" +
"}\n" +
"private static void foo(Object o) {\n" +
" switch (o) {\n" +
" case Integer i -> System.out.println(\"Integer:\" + i);\n" +
" case String s -> System.out.println(\"String:\" + s + fieldj17 +fieldj17);\n" +
" default -> System.out.println(\"Object\" + o);\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("fieldj17", FIELD, ALL_OCCURRENCES);
assertSearchResults("src/X.java X.fieldj17 [fieldj17] EXACT_MATCH\n"+
"src/X.java void X.foo(Object) [fieldj17] EXACT_MATCH\n"
+ "src/X.java void X.foo(Object) [fieldj17] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
// find all occurrence on a class in switch pattern - without select ( switch statement)
public void testBug573943_026() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"sealed interface I permits A17, B {}\n" +
"final class AJ17 implements S {}\n" +
"final class B implements S {}\n" +
"public class X {\n" +
"public static void main(String[] args) {\n" +
"foo(new A());\n" +
"}\n" +
"private static void foo(S o) {\n" +
" switch (o) {\n" +
" case AJ17 /*here*/a : System.out.println(); break;\n" +
" case B b : System.out.println(\"B:\" + b);\n" +
" default : System.out.println(\"Object\" + o);\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("AJ17", CLASS, ALL_OCCURRENCES);
assertSearchResults("src/X.java AJ17 [AJ17] EXACT_MATCH\n"
+ "src/X.java void X.foo(S) [AJ17] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
// find all reference on a class in switch pattern - without select ( Switch Statement)
public void testBug573943_027() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"sealed interface I permits A17, B {}\n" +
"final class AJ17 implements S {}\n" +
"final class B implements S {}\n" +
"public class X {\n" +
"public static void main(String[] args) {\n" +
"foo(new A());\n" +
"}\n" +
"private static void foo(S o) {\n" +
" switch (o) {\n" +
" case AJ17 /*here*/a : System.out.println(); break;\n" +
" case B b : System.out.println(\"B:\" + b);\n" +
" default : System.out.println(\"Object\" + o);\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("AJ17", CLASS, REFERENCES);
assertSearchResults("src/X.java void X.foo(S) [AJ17] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
// find all reference on a class in switch pattern - without select
public void testBug573943_028() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"sealed interface I permits A17, B {}\n" +
"final class AJ17 implements S {}\n" +
"final class B implements S {}\n" +
"public class X {\n" +
"public static void main(String[] args) {\n" +
"foo(new A());\n" +
"}\n" +
"private static void foo(S o) {\n" +
" switch (o) {\n" +
" case AJ17 /*here*/a -> System.out.println(); \n" +
" case B b -> System.out.println(\"B:\" + b);\n" +
" default -> System.out.println(\"Object\" + o);\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("AJ17", CLASS, REFERENCES);
assertSearchResults("src/X.java void X.foo(S) [AJ17] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
// find all occurrence on a class in switch pattern - without select
public void testBug573943_029() throws Exception {
try {
IJavaProject project = createJavaProject("first", new String[] {"src"}, new String[] {"JCL17_LIB"}, "bin", "17");
project.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
project.open(null);
createFolder("/first/src/p1");
createFile("/first/src/p1/BClass.java",
"package p1;\n" +
"public class BClass {\n" +
"}\n"
);
createFile("/first/src/p1/X.java",
"package p1;\n" +
"public class X {\n" +
" public int field_j17; "+
"public static void main(String[] args) {\n" +
"foo(Integer.valueOf(5));\n" +
"foo(new Object());\n" +
"}\n" +
"private static void foo(Object o) {\n" +
" switch (o) {\n" +
" case BClass i && field_j17>0 -> System.out.println(\"Integer:\" + i);\n" +
" default -> System.out.println(\"Object\" + o);\n" +
" }\n" +
"}\n" +
"}\n"
);
project.close();
project.open(null);
waitUntilIndexesReady();
SearchPattern pattern = SearchPattern.createPattern("field_j17", IJavaSearchConstants.FIELD, ALL_OCCURRENCES, SearchPattern.R_EXACT_MATCH);
IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaProject[]
{project});
search(pattern, scope, this.resultCollector);
assertSearchResults(
"src/p1/X.java p1.X.field_j17 [field_j17] EXACT_MATCH\n"
+ "src/p1/X.java void p1.X.foo(Object) [field_j17] EXACT_MATCH",
this.resultCollector);
}
finally {
deleteProject("first");
}
}
// find all references on a class in switch pattern - without select
public void testBug573943_030() throws Exception {
try {
IJavaProject project = createJavaProject("first", new String[] {"src"}, new String[] {"JCL17_LIB"}, "bin", "17");
project.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
project.open(null);
createFolder("/first/src/p1");
createFile("/first/src/p1/BClass.java",
"package p1;\n" +
"public class BClass {\n" +
"}\n"
);
createFile("/first/src/p1/X.java",
"package p1;\n" +
"public class X {\n" +
" public int field_j17; "+
"public static void main(String[] args) {\n" +
"foo(Integer.valueOf(5));\n" +
"foo(new Object());\n" +
"}\n" +
"private static void foo(Object o) {\n" +
" switch (o) {\n" +
" case BClass i && field_j17>0 -> System.out.println(\"Integer:\" + i);\n" +
" default -> System.out.println(\"Object\" + o);\n" +
" }\n" +
"}\n" +
"}\n"
);
project.close();
project.open(null);
waitUntilIndexesReady();
SearchPattern pattern = SearchPattern.createPattern("field_j17", IJavaSearchConstants.FIELD, REFERENCES, SearchPattern.R_EXACT_MATCH);
IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaProject[]
{project});
search(pattern, scope, this.resultCollector);
assertSearchResults(
"src/p1/X.java void p1.X.foo(Object) [field_j17] EXACT_MATCH",
this.resultCollector);
}
finally {
deleteProject("first");
}
}
public void testBug573943_031() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n" +
"public static void main(String[] args) {\n" +
"foo(Integer.valueOf(5));\n" +
"foo(new Object());\n" +
"}\n" +
"private static void foo(Object o) {\n" +
" switch (o) {\n" +
" case Integer i -> System.out.println(\"Integer:\" + i);\n" +
" case String s && /*here*/s.hashCode()>0 -> System.out.println(\"String:\" );\n" +
" default -> System.out.println(\"Object\" + o);\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);
String str = this.workingCopies[0].getSource();
String selection = "/*here*/s";
int start = str.indexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.workingCopies[0].codeSelect(start, length);
assertTrue(elements.length ==1);
assertTrue(elements[0] instanceof ILocalVariable);
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
public void testBug573943_032() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n" +
"public static void main(String[] args) {\n" +
"foo(Integer.valueOf(5));\n" +
"foo(new Object());\n" +
"}\n" +
"private static void foo(Object o) {\n" +
" String myVar= new String();" +
" switch (o) {\n" +
" case Integer i -> System.out.println(\"Integer:\" + i);\n" +
" case String s1 && s1 != myVar && 0 < /*here*/s1.length() -> System.out.println(s1 );\n" +
" default -> {\n" +
" String s1 = new String();\n" +
" System.out.println(s1);\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);
String str = this.workingCopies[0].getSource();
String selection = "/*here*/s1";
int start = str.indexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.workingCopies[0].codeSelect(start, length);
assertTrue(elements.length ==1);
assertTrue(elements[0] instanceof ILocalVariable);
search(elements[0], REFERENCES, EXACT_RULE);
assertSearchResults("src/X.java void X.foo(Object) [s1] EXACT_MATCH\n"
+ "src/X.java void X.foo(Object) [s1] EXACT_MATCH\n"
+ "src/X.java void X.foo(Object) [s1] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
public void testBug573943_033() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n" +
"public static void main(String[] args) {\n" +
"foo(Integer.valueOf(5));\n" +
"foo(new Object());\n" +
"}\n" +
"private static void foo(Object o) {\n" +
" String myVar= new String();" +
" switch (o) {\n" +
" case Integer i -> System.out.println(\"Integer:\" + i);\n" +
" case String s1 && /*here*/s1 != myVar && 0 < s1.length() -> System.out.println(s1 );\n" +
" default -> {\n" +
" String s1 = new String();\n" +
" System.out.println(s1);\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);
String str = this.workingCopies[0].getSource();
String selection = "/*here*/s1";
int start = str.indexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.workingCopies[0].codeSelect(start, length);
assertTrue(elements.length ==1);
assertTrue(elements[0] instanceof ILocalVariable);
search(elements[0], REFERENCES, EXACT_RULE);
assertSearchResults("src/X.java void X.foo(Object) [s1] EXACT_MATCH\n"
+ "src/X.java void X.foo(Object) [s1] EXACT_MATCH\n"
+ "src/X.java void X.foo(Object) [s1] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
public void testBug573943_034() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n" +
"public static void main(String[] args) {\n" +
"foo(Integer.valueOf(5));\n" +
"foo(new Object());\n" +
"}\n" +
"private static void foo(Object o) {\n" +
" String myVar= new String();" +
" switch (o) {\n" +
" case Integer i -> System.out.println(\"Integer:\" + i);\n" +
" case String s1 && s1 != myVar && 0 < s1.length() -> System.out.println(s1 );\n" +
" default -> {\n" +
" String s1 = new String();\n" +
" System.out.println(/*here*/s1);\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);
String str = this.workingCopies[0].getSource();
String selection = "/*here*/s1";
int start = str.indexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.workingCopies[0].codeSelect(start, length);
assertTrue(elements.length ==1);
assertTrue(elements[0] instanceof ILocalVariable);
search(elements[0], REFERENCES, EXACT_RULE);
assertSearchResults("src/X.java void X.foo(Object) [s1] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
// selection of guarded pattern variable along with instance of expression in case statement and verify that it is local variable
public void testBug575718_035() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n" +
"public static void main(String[] args) {\n" +
"foo(Integer.valueOf(5));\n" +
"foo(new Object());\n" +
"}\n" +
"private static int foo(Object o) {\n" +
" return switch (o) {\n" +
" case String strGP && (o instanceof String c3 && c3.length() > 0) -> 0;\n" +
" default -> 0;\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);
String str = this.workingCopies[0].getSource();
String selection = "strGP";
int start = str.indexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.workingCopies[0].codeSelect(start, length);
assertTrue(elements[0] instanceof LocalVariable);
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
// selection of guarded pattern variable in case statement along with instanceof expression and verify it gets all references
public void testBug575718_036() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n" +
"public static void main(String[] args) {\n" +
"foo(Integer.valueOf(5));\n" +
"foo(new Object());\n" +
"}\n" +
"private static int foo(Object o) {\n" +
" return switch (o) {\n" +
" case String strGP && (o instanceof String c3 && c3.length() > 0) && strGP.length() > 0 -> 0;\n" +
" default -> 0;\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);
String str = this.workingCopies[0].getSource();
String selection = "strGP";
int start = str.indexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.workingCopies[0].codeSelect(start, length);
assertTrue(elements[0] instanceof LocalVariable);
search(elements[0], REFERENCES, EXACT_RULE);
assertSearchResults(
"src/X.java int X.foo(Object) [strGP] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
// selection of guarded pattern variable in case statement along with instanceof expression and verify that it gets all occurences
public void testBug575718_037() throws CoreException {
this.workingCopies = new ICompilationUnit[1];
this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
"public class X {\n" +
"public static void main(String[] args) {\n" +
"foo(Integer.valueOf(5));\n" +
"foo(new Object());\n" +
"}\n" +
"private static int foo(Object o) {\n" +
" return switch (o) {\n" +
" case String strGP && (o instanceof String c3 && c3.length() > 0) && strGP.length() > 0 -> 0;\n" +
" default -> 0;\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);
String str = this.workingCopies[0].getSource();
String selection = "strGP";
int start = str.indexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.workingCopies[0].codeSelect(start, length);
assertTrue(elements[0] instanceof LocalVariable);
search(elements[0], ALL_OCCURRENCES, EXACT_RULE);
assertSearchResults(
"src/X.java int X.foo(Object).strGP [strGP] EXACT_MATCH\n"
+ "src/X.java int X.foo(Object) [strGP] EXACT_MATCH");
} finally {
javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
}
}
}