blob: f37f336e1e68bf494b9e0e8fa96743ce76ef04ef [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2019, 2020 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.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.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.core.WorkingCopyOwner;
import junit.framework.Test;
public class ResolveTests12To15 extends AbstractJavaModelTests {
ICompilationUnit wc = null;
static {
// TESTS_NAMES = new String[] { "test018" };
// TESTS_NUMBERS = new int[] { 124 };
// TESTS_RANGE = new int[] { 16, -1 };
}
public static Test suite() {
return buildModelTestSuite(ResolveTests12To15.class);
}
public ResolveTests12To15(String name) {
super(name);
}
@Override
public ICompilationUnit getWorkingCopy(String path, String source) throws JavaModelException {
return super.getWorkingCopy(path, source, this.wcOwner);
}
@Override
public void setUpSuite() throws Exception {
super.setUpSuite();
setUpJavaProject("Resolve", "12", false);
setUpJavaProject("Resolve15", "15", false);
waitUntilIndexesReady();
}
@Override
protected void setUp() throws Exception {
super.setUp();
this.wcOwner = new WorkingCopyOwner(){};
}
@Override
public void tearDownSuite() throws Exception {
deleteProject("Resolve");
deleteProject("Resolve15");
super.tearDownSuite();
}
@Override
protected void tearDown() throws Exception {
if (this.wc != null) {
this.wc.discardWorkingCopy();
}
super.tearDown();
}
/*
* Multi constant case statement with ':', selection node is the string constant
*/
public void test001() throws JavaModelException {
this.wc = getWorkingCopy("/Resolve/src/X.java","public class X {\n" +
"static final String ONE=\"One\", TWO = \"Two\", THREE=\"Three\";\n" +
" public static void foo(String num) {\n" +
" switch (num) {\n" +
" case ONE, TWO, THREE:\n" +
" System.out.println(num);\n" +
" break;\n" +
" }" +
" }\n" +
"}\n");
String str = this.wc.getSource();
String selection = "ONE";
int start = str.lastIndexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.wc.codeSelect(start, length);
assertElementsEqual(
"Unexpected elements",
"ONE [in X [in [Working copy] X.java [in <default> [in src [in Resolve]]]]]",
elements
);
}
/*
* Multi constant case statement with ':', selection node is the first enum constant
*/
public void test002() throws JavaModelException {
this.wc = getWorkingCopy("/Resolve/src/X.java","public class X {\n" +
" public static void foo(Num num) {\n" +
" switch (num) {\n" +
" case ONE, TWO, THREE:\n" +
" System.out.println(num);\n" +
" break;\n" +
" }" +
" }\n" +
" enum Num { ONE, TWO, THREE;}\n" +
"}\n");
String str = this.wc.getSource();
String selection = "ONE";
int start = str.lastIndexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.wc.codeSelect(start, length);
assertElementsEqual(
"Unexpected elements",
"ONE [in Num [in X [in [Working copy] X.java [in <default> [in src [in Resolve]]]]]]",
elements
);
}
/*
* Multi constant case statement with ':', selection node is the second string constant
*/
public void test003() throws JavaModelException {
this.wc = getWorkingCopy("/Resolve/src/X.java","public class X {\n" +
"static final String ONE=\"One\", TWO = \"Two\", THREE=\"Three\";\n" +
" public static void foo(String num) {\n" +
" switch (num) {\n" +
" case ONE, TWO, THREE:\n" +
" System.out.println(num);\n" +
" break;\n" +
" }" +
" }\n" +
"}\n");
String str = this.wc.getSource();
String selection = "TWO";
int start = str.lastIndexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.wc.codeSelect(start, length);
assertElementsEqual(
"Unexpected elements",
"TWO [in X [in [Working copy] X.java [in <default> [in src [in Resolve]]]]]",
elements
);
}
/*
* Multi constant case statement with ':', selection node is the second enum constant
*/
public void test004() throws JavaModelException {
this.wc = getWorkingCopy("/Resolve/src/X.java","public class X {\n" +
" public static void foo(Num num) {\n" +
" switch (num) {\n" +
" case ONE, TWO, THREE:\n" +
" System.out.println(num);\n" +
" break;\n" +
" }" +
" }\n" +
" enum Num { ONE, TWO, THREE;}\n" +
"}\n");
String str = this.wc.getSource();
String selection = "TWO";
int start = str.lastIndexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.wc.codeSelect(start, length);
assertElementsEqual(
"Unexpected elements",
"TWO [in Num [in X [in [Working copy] X.java [in <default> [in src [in Resolve]]]]]]",
elements
);
}
/*
* Multi constant case statement with '->', selection node is the string constant
*/
public void test005() throws JavaModelException {
this.wc = getWorkingCopy("/Resolve/src/X.java","public class X {\n" +
"static final String ONE=\"One\", TWO = \"Two\", THREE=\"Three\";\n" +
" public static void foo(String num) {\n" +
" switch (num) {\n" +
" case ONE, TWO, THREE ->\n" +
" System.out.println(num);\n" +
" }" +
" }\n" +
"}\n");
String str = this.wc.getSource();
String selection = "ONE";
int start = str.lastIndexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.wc.codeSelect(start, length);
assertElementsEqual(
"Unexpected elements",
"ONE [in X [in [Working copy] X.java [in <default> [in src [in Resolve]]]]]",
elements
);
}
/*
* Multi constant case statement with '->', selection node is the first enum constant
*/
public void test006() throws JavaModelException {
this.wc = getWorkingCopy("/Resolve/src/X.java","public class X {\n" +
" public static void foo(Num num) {\n" +
" switch (num) {\n" +
" case ONE, TWO, THREE ->\n" +
" System.out.println(num);\n" +
" break; // illegal, but should be ignored and shouldn't matter\n" +
" }" +
" }\n" +
" enum Num { ONE, TWO, THREE;}\n" +
"}\n");
String str = this.wc.getSource();
String selection = "ONE";
int start = str.lastIndexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.wc.codeSelect(start, length);
assertElementsEqual(
"Unexpected elements",
"ONE [in Num [in X [in [Working copy] X.java [in <default> [in src [in Resolve]]]]]]",
elements
);
}
/*
* Multi constant case statement with '->', selection node is the second string constant
*/
public void test007() throws JavaModelException {
this.wc = getWorkingCopy("/Resolve/src/X.java","public class X {\n" +
"static final String ONE=\"One\", TWO = \"Two\", THREE=\"Three\";\n" +
" public static void foo(String num) {\n" +
" switch (num) {\n" +
" case ONE, TWO, THREE ->\n" +
" System.out.println(num);\n" +
" break;\n" +
" }" +
" }\n" +
"}\n");
String str = this.wc.getSource();
String selection = "TWO";
int start = str.lastIndexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.wc.codeSelect(start, length);
assertElementsEqual(
"Unexpected elements",
"TWO [in X [in [Working copy] X.java [in <default> [in src [in Resolve]]]]]",
elements
);
}
/*
* Multi constant case statement with '->', selection node is the second enum constant
*/
public void test008() throws JavaModelException {
this.wc = getWorkingCopy("/Resolve/src/X.java","public class X {\n" +
" public static void foo(Num num) {\n" +
" switch (num) {\n" +
" case ONE, TWO, THREE ->\n" +
" System.out.println(num);\n" +
" break;\n" +
" }" +
" }\n" +
" enum Num { ONE, TWO, THREE;}\n" +
"}\n");
String str = this.wc.getSource();
String selection = "TWO";
int start = str.lastIndexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.wc.codeSelect(start, length);
assertElementsEqual(
"Unexpected elements",
"TWO [in Num [in X [in [Working copy] X.java [in <default> [in src [in Resolve]]]]]]",
elements
);
}
/*
* Multi constant case statement with '->', selection is a reference in the case block
* which same as the switch's expression
*/
public void test009() throws JavaModelException {
this.wc = getWorkingCopy("/Resolve/src/X.java","public class X {\n" +
" public static void foo(Num num_) {\n" +
" switch (num_) {\n" +
" case ONE, TWO, THREE ->\n" +
" System.out.println(num_);\n" +
" break;\n" +
" }" +
" }\n" +
" enum Num { ONE, TWO, THREE;}\n" +
"}\n");
String str = this.wc.getSource();
String selection = "num_";
int start = str.lastIndexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.wc.codeSelect(start, length);
assertElementsEqual(
"Unexpected elements",
"num_ [in foo(Num) [in X [in [Working copy] X.java [in <default> [in src [in Resolve]]]]]]",
elements
);
}
/*
* Multi constant case statement with '->', selection is a reference in the case block
* which is referencing a local variable defined in the case block
*/
public void test010() throws JavaModelException {
this.wc = getWorkingCopy("/Resolve/src/X.java","public class X {\n" +
" public static void foo(Num num_) {\n" +
" switch (num_) {\n" +
" case ONE, TWO, THREE -> {\n" +
" int i_j = 0;" +
" System.out.println(i_j);\n" +
" break;" +
" }\n" +
" }" +
" }\n" +
" enum Num { ONE, TWO, THREE;}\n" +
"}\n");
String str = this.wc.getSource();
String selection = "i_j";
int start = str.lastIndexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.wc.codeSelect(start, length);
assertElementsEqual(
"Unexpected elements",
"i_j [in foo(Num) [in X [in [Working copy] X.java [in <default> [in src [in Resolve]]]]]]",
elements
);
}
/*
* Multi constant case statement with '->', selection is a referenced name of type enum in switch expression
*/
public void test011() throws JavaModelException {
this.wc = getWorkingCopy("/Resolve/src/X.java","public class X {\n" +
" public static void foo(Num num_) {\n" +
" switch (num_) {\n" +
" case ONE, TWO, THREE -> {\n" +
" break;" +
" }\n" +
" }" +
" }\n" +
" enum Num { ONE, TWO, THREE;}\n" +
"}\n");
String str = this.wc.getSource();
String selection = "num_";
int start = str.lastIndexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.wc.codeSelect(start, length);
assertElementsEqual(
"Unexpected elements",
"num_ [in foo(Num) [in X [in [Working copy] X.java [in <default> [in src [in Resolve]]]]]]",
elements
);
}
/*
* Multi constant case statement with '->', selection is a referenced name of type int in switch expression
*/
public void test012() throws JavaModelException {
this.wc = getWorkingCopy("/Resolve/src/X.java","public class X {\n" +
" public static void foo(int num_) {\n" +
" switch (num_ + 1) {\n" +
" case 1, 2, 3 -> {\n" +
" break;" +
" }\n" +
" }" +
" }\n" +
"}\n");
String str = this.wc.getSource();
String selection = "num_";
int start = str.lastIndexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.wc.codeSelect(start, length);
assertElementsEqual(
"Unexpected elements",
"num_ [in foo(int) [in X [in [Working copy] X.java [in <default> [in src [in Resolve]]]]]]",
elements
);
}
/*
* Multi constant case statement with '->', selection is a referenced name of type int in switch expression
*/
public void test013() throws JavaModelException {
this.wc = getWorkingCopy("/Resolve/src/X.java","public class X {\n" +
" public static void foo(int num_) {\n" +
" int i = switch (num_) {\n" +
" case 1, 2, 3 -> (num_ + 1);\n" +
" default -> 0;\n" +
" }" +
" }\n" +
"}\n");
String str = this.wc.getSource();
String selection = "num_";
int start = str.lastIndexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.wc.codeSelect(start, length);
assertElementsEqual(
"Unexpected elements",
"num_ [in foo(int) [in X [in [Working copy] X.java [in <default> [in src [in Resolve]]]]]]",
elements
);
}
/*
* Multi constant case statement with '->', selection is a referenced name of type int in switch expression
*/
public void test014() throws JavaModelException {
this.wc = getWorkingCopy("/Resolve/src/X.java","public class X {\n" +
" public static void foo(int num_) {\n" +
" int i = switch (num_) {\n" +
" case 1, 2, 3 -> 0;\n" +
" default -> (num_ + 1);\n" +
" }" +
" }\n" +
"}\n");
String str = this.wc.getSource();
String selection = "num_";
int start = str.lastIndexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.wc.codeSelect(start, length);
assertElementsEqual(
"Unexpected elements",
"num_ [in foo(int) [in X [in [Working copy] X.java [in <default> [in src [in Resolve]]]]]]",
elements
);
}
/*
* Multi constant case statement with '->', selection is a referenced name of type int in switch expression
*/
public void test015() throws JavaModelException {
this.wc = getWorkingCopy("/Resolve/src/X.java","public class X {\n" +
" public static void foo(int num_) {\n" +
" int i = switch (num_) {\n" +
" case 1, 2, 3 -> 0;\n" +
" default -> (num_ + 1);\n" +
" }" +
" }\n" +
"}\n");
String str = this.wc.getSource();
String selection = "num_";
int start = str.lastIndexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.wc.codeSelect(start, length);
assertElementsEqual(
"Unexpected elements",
"num_ [in foo(int) [in X [in [Working copy] X.java [in <default> [in src [in Resolve]]]]]]",
elements
);
}
/*
* Multi constant case statement with '->', selection is a referenced name of type int in switch expression
*/
public void test016() throws JavaModelException {
this.wc = getWorkingCopy("/Resolve/src/X.java","public class X {\n" +
" public void bar(int s) {\n" +
" int i_j = switch (s) {\n" +
" case 1, 2, 3 -> (s+1);\n" +
" default -> i_j;\n" +
" };\n" +
" }\n" +
"}\n");
String str = this.wc.getSource();
String selection = "i_j";
int start = str.lastIndexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.wc.codeSelect(start, length);
assertElementsEqual(
"Unexpected elements",
"i_j [in bar(int) [in X [in [Working copy] X.java [in <default> [in src [in Resolve]]]]]]",
elements
);
}
public void test017() throws JavaModelException {
this.wc = getWorkingCopy("/Resolve/src/X.java","public class X {\n" +
" public void bar(int s) {\n" +
" int i_j = switch (s) {\n" +
" case 1, 2, 3 -> (s+1);\n" +
" default -> (1+i_j);\n" +
" };\n" +
" }\n" +
"}\n");
String str = this.wc.getSource();
String selection = "i_j";
int start = str.lastIndexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.wc.codeSelect(start, length);
assertElementsEqual(
"Unexpected elements",
"i_j [in bar(int) [in X [in [Working copy] X.java [in <default> [in src [in Resolve]]]]]]",
elements
);
}
public void test018() throws JavaModelException {
this.wc = getWorkingCopy("/Resolve/src/X.java",
"import java.util.function.*;\n" +
"interface IN0 {} \n" +
"interface IN1 extends IN0 {} \n" +
"interface IN2 extends IN0 {}\n" +
"public class X {\n" +
" IN1 n_1() { return new IN1() {}; } \n" +
" IN2 n_2() { return null; } \n" +
" <M> void m( Supplier< M> m2) { } \n" +
" void testSw(int i) { \n" +
" m(switch(i) { \n" +
" case 1 -> this::n_1; \n" +
" default -> this::n_2; }); \n" +
" }\n" +
"}\n");
String str = this.wc.getSource();
String selection = "n_1";
int start = str.lastIndexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.wc.codeSelect(start, length);
assertElementsEqual(
"Unexpected elements",
"n_1() [in X [in [Working copy] X.java [in <default> [in src [in Resolve]]]]]",
elements
);
}
public void test019() throws JavaModelException {
this.wc = getWorkingCopy("/Resolve/src/X.java",
"import java.util.function.*;\n" +
"interface IN0 {} \n" +
"interface IN1 extends IN0 {} \n" +
"interface IN2 extends IN0 {}\n" +
"public class X {\n" +
" IN1 n_1() { return new IN1() {}; } \n" +
" IN2 n_2() { return null; } \n" +
" <M> void m( Supplier< M> m2) { } \n" +
" void testSw(int i) { \n" +
" m(switch(i) { \n" +
" case 2 -> () -> n_1(); \n" +
" default -> this::n_2; }); \n" +
" }\n" +
"}\n");
String str = this.wc.getSource();
String selection = "n_1";
int start = str.lastIndexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.wc.codeSelect(start, length);
assertElementsEqual(
"Unexpected elements",
"n_1() [in X [in [Working copy] X.java [in <default> [in src [in Resolve]]]]]",
elements
);
}
public void test020() throws JavaModelException {
this.wc = getWorkingCopy("/Resolve/src/X.java",
"import java.util.function.*;\n" +
"interface IN0 {} \n" +
"interface IN1 extends IN0 {} \n" +
"interface IN2 extends IN0 {}\n" +
"public class X {\n" +
" IN1 n_1() { return new IN1() {}; } \n" +
" IN2 n_2() { return null; } \n" +
" <M> void m( Supplier< M> m2) { } \n" +
" void testSw(int i) { \n" +
" m(switch(i) { \n" +
" default -> this::n_2; }); \n" +
" }\n" +
"}\n");
String str = this.wc.getSource();
String selection = "n_2";
int start = str.lastIndexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.wc.codeSelect(start, length);
assertElementsEqual(
"Unexpected elements",
"n_2() [in X [in [Working copy] X.java [in <default> [in src [in Resolve]]]]]",
elements
);
}
public void test021() throws JavaModelException {
this.wc = getWorkingCopy("/Resolve/src/X.java",
"import java.util.function.*;\n" +
"interface IN0 {} \n" +
"interface IN1 extends IN0 {} \n" +
"interface IN2 extends IN0 {}\n" +
"public class X {\n" +
" IN1 n_1(int ijk) { return new IN1() {}; } \n" +
" IN2 n_2() { return null; } \n" +
" <M> void m( Supplier< M> m2) { } \n" +
" void testSw(int ijk) { \n" +
" m(switch(ijk) { \n" +
" default -> () -> n_1(ijk); }); \n" +
" }\n" +
"}\n");
String str = this.wc.getSource();
String selection = "n_1";
int start = str.lastIndexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.wc.codeSelect(start, length);
assertElementsEqual(
"Unexpected elements",
"n_1(int) [in X [in [Working copy] X.java [in <default> [in src [in Resolve]]]]]",
elements
);
}
public void test022() throws JavaModelException {
this.wc = getWorkingCopy("/Resolve/src/X.java",
"import java.util.function.*;\n" +
"interface IN0 {} \n" +
"interface IN1 extends IN0 {} \n" +
"interface IN2 extends IN0 {}\n" +
"public class X {\n" +
" IN1 n_1(int ijk) { return new IN1() {}; } \n" +
" IN2 n_2() { return null; } \n" +
" <M> void m( Supplier< M> m2) { } \n" +
" void testSw(int ijk) { \n" +
" m(switch(ijk) { \n" +
" default -> () -> n_1(ijk); }); \n" +
" }\n" +
"}\n");
String str = this.wc.getSource();
String selection = "ijk";
int start = str.lastIndexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.wc.codeSelect(start, length);
assertElementsEqual(
"Unexpected elements",
"ijk [in testSw(int) [in X [in [Working copy] X.java [in <default> [in src [in Resolve]]]]]]",
elements
);
}
public void testBug553149_1() throws JavaModelException {
this.wc = getWorkingCopy("/Resolve15/src/X.java",
"public class X {\n"
+ " protected Object x_ = \"FIELD X\";\n"
+ " @SuppressWarnings(\"preview\")\n"
+ " public void f(Object obj, boolean b) {\n"
+ " if ((x_ instanceof String y) && y.length() > 0) {\n"
+ " System.out.println(y.toLowerCase());\n"
+ " }\n"
+ " }\n"
+ "}");
String str = this.wc.getSource();
String selection = "x_";
int start = str.lastIndexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.wc.codeSelect(start, length);
assertElementsEqual(
"Unexpected elements",
"x_ [in X [in [Working copy] X.java [in <default> [in src [in Resolve15]]]]]",
elements
);
}
public void testBug553149_2() throws JavaModelException {
this.wc = getWorkingCopy("/Resolve15/src/X.java",
"public class X {\n"
+ " protected Object x_ = \"FIELD X\";\n"
+ " @SuppressWarnings(\"preview\")\n"
+ " public void f(Object obj, boolean b) {\n"
+ " if ((x_ instanceof String y_) && y_.length() > 0) {\n"
+ " System.out.println(y.toLowerCase());\n"
+ " }\n"
+ " }\n"
+ "}");
String str = this.wc.getSource();
String selection = "y_";
int start = str.lastIndexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.wc.codeSelect(start, length);
assertElementsEqual(
"Unexpected elements",
"y_ [in f(Object, boolean) [in X [in [Working copy] X.java [in <default> [in src [in Resolve15]]]]]]",
elements
);
}
public void testBug553149_3() throws JavaModelException {
this.wc = getWorkingCopy("/Resolve15/src/X.java",
"public class X {\n"
+ " protected Object x_ = \"FIELD X\";\n"
+ " @SuppressWarnings(\"preview\")\n"
+ " public void f(Object obj, boolean b) {\n"
+ " if ((x_ instanceof String x_) && x_.length() > 0) {\n"
+ " System.out.println(y.toLowerCase());\n"
+ " }\n"
+ " }\n"
+ "}");
String str = this.wc.getSource();
String selection = "x_";
int start = str.lastIndexOf(selection);
int length = selection.length();
IJavaElement[] elements = this.wc.codeSelect(start, length);
assertElementsEqual(
"Unexpected elements",
"x_ [in f(Object, boolean) [in X [in [Working copy] X.java [in <default> [in src [in Resolve15]]]]]]",
elements
);
}
public void _testBug553149_4() throws JavaModelException {
this.wc = getWorkingCopy("/Resolve15/src/X.java",
"public class X {\n"
+ " protected Object x_ = \"FIELD X\";\n"
+ " @SuppressWarnings(\"preview\")\n"
+ " public void f(Object obj, boolean b) {\n"
+ " if ((x_ instanceof String x_) && x_.length() > 0) {\n"
+ " System.out.println(x_.toLowerCase());\n"
+ " }\n"
+ " }\n"
+ "}");
String str = this.wc.getSource();
String selection = "x_ instanceof";
int start = str.lastIndexOf(selection);
int length = "x_".length();
IJavaElement[] elements = this.wc.codeSelect(start, length);
assertElementsEqual(
"Unexpected elements",
"x_ [in X [in [Working copy] X.java [in <default> [in src [in Resolve15]]]]]",
elements
);
}
public void _testBug553149_5() throws JavaModelException {
this.wc = getWorkingCopy("/Resolve15/src/X.java",
"public class X {\n"
+ " protected Object x_ = \"FIELD X\";\n"
+ " @SuppressWarnings(\"preview\")\n"
+ " public void f(Object obj, boolean b) {\n"
+ " if ((x_ instanceof String x_) && x_.length() > 0) {\n"
+ " System.out.println(x_.toLowerCase());\n"
+ " }\n"
+ " System.out.println(x_.toLowerCase());\n"
+ " }\n"
+ "}");
String str = this.wc.getSource();
String selection = "x_";
int start = str.lastIndexOf(selection);
int length = "x_".length();
IJavaElement[] elements = this.wc.codeSelect(start, length);
assertElementsEqual(
"Unexpected elements",
"x_ [in X [in [Working copy] X.java [in <default> [in src [in Resolve15]]]]]",
elements
);
}
public void testBug553149_6() throws JavaModelException {
this.wc = getWorkingCopy("/Resolve15/src/X.java",
"public class X {\n"
+ " @SuppressWarnings(\"preview\")\n"
+ " public void f(Object obj, boolean b) {\n"
+ " if ((y instanceof String /*not selecting */x_) && /* selecting*/x_.length() > 0) {\n"
+ " System.out.println(x_.toLowerCase());\n"
+ " }\n"
+ " }\n"
+ "}");
String str = this.wc.getSource();
String selection = "x_";
int start = str.indexOf(selection);
int length = "x_".length();
IJavaElement[] elements = this.wc.codeSelect(start, length);
assertElementsEqual(
"Unexpected elements",
"x_ [in f(Object, boolean) [in X [in [Working copy] X.java [in <default> [in src [in Resolve15]]]]]]",
elements
);
}
public void testBug574697() throws JavaModelException {
this.workingCopies = new ICompilationUnit[2];
this.workingCopies[0] = getWorkingCopy(
"/Resolve/src/Test2.java",
"import java.util.List;\n" +
"import java.util.ArrayList;\n" +
"public class Test2 {\n" +
" public String getGreeting() {\n" +
" return \"foo\";\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" List<Integer> foo = new List<>() {\n" +
" private void test() {\n" +
" new Test2().getGreeting();\n" +
" }\n" +
" };\n" +
" }\n" +
"}\n");
String str = this.workingCopies[0].getSource();
String selectAt = "getGreeting()";
String selection = "getGreeting";
int start = str.lastIndexOf(selectAt);
int length = selection.length();
IJavaElement[] elements = this.workingCopies[0].codeSelect(start, length, this.wcOwner);
assertElementsEqual(
"Unexpected elements",
"getGreeting() [in Test2 [in [Working copy] Test2.java [in <default> [in src [in Resolve]]]]]",
elements);
}
public void testBugDiamond() throws JavaModelException {
this.workingCopies = new ICompilationUnit[2];
this.workingCopies[0] = getWorkingCopy(
"/Resolve/src/Test2.java",
"import java.util.List;\n" +
"public class Test2 {\n" +
" public static void test() {\n" +
" List<Integer> foo = new List<>() {"
+ " String s2;\n" +
" private void test() {\n" +
" System.out.println(s2);\n" +
" }\n" +
" };\n" +
" }\n" +
"}\n");
String str = this.workingCopies[0].getSource();
String selectAt = "s2";
String selection = "s2";
int start = str.lastIndexOf(selectAt);
int length = selection.length();
IJavaElement[] elements = this.workingCopies[0].codeSelect(start, length, this.wcOwner);
assertElementsEqual(
"Unexpected elements",
"s2 [in <anonymous #1> [in test() [in Test2 [in [Working copy] Test2.java [in <default> [in src [in Resolve]]]]]]]",
elements);
}
}