| /******************************************************************************* |
| * Copyright (c) 2005, 2014 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.compiler.regression; |
| |
| import java.util.Map; |
| |
| import junit.framework.Test; |
| |
| import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants; |
| import org.eclipse.jdt.internal.compiler.impl.CompilerOptions; |
| |
| @SuppressWarnings({ "unchecked", "rawtypes" }) |
| public class FieldAccessTest extends AbstractRegressionTest { |
| static { |
| // TESTS_NAMES = new String[] { "test000" }; |
| // TESTS_NUMBERS = new int[] { 22 }; |
| // TESTS_RANGE = new int[] { 21, 50 }; |
| } |
| |
| public FieldAccessTest(String name) { |
| super(name); |
| } |
| public static Test suite() { |
| return buildAllCompliancesTestSuite(testClass()); |
| } |
| @Override |
| protected Map getCompilerOptions() { |
| Map options = super.getCompilerOptions(); |
| options.put(CompilerOptions.OPTION_ReportIndirectStaticAccess, CompilerOptions.ERROR); |
| return options; |
| } |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=149004 |
| public void test001() { |
| this.runConformTest( |
| new String[] { |
| "foo/BaseFoo.java", |
| "package foo;\n" + |
| "class BaseFoo {\n" + |
| " public static final int VAL = 0;\n" + |
| "}", |
| "foo/NextFoo.java", |
| "package foo;\n" + |
| "public class NextFoo extends BaseFoo {\n" + |
| "}", |
| "bar/Bar.java", |
| "package bar;\n" + |
| "public class Bar {\n" + |
| " int v = foo.NextFoo.VAL;\n" + |
| "}" |
| }, |
| ""); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=149004 |
| public void test002() { |
| this.runNegativeTest( |
| new String[] { |
| "foo/BaseFoo.java", |
| "package foo;\n" + |
| "public class BaseFoo {\n" + |
| " public static final int VAL = 0;\n" + |
| "}", |
| "foo/NextFoo.java", |
| "package foo;\n" + |
| "public class NextFoo extends BaseFoo {\n" + |
| "}", |
| "bar/Bar.java", |
| "package bar;\n" + |
| "public class Bar {\n" + |
| " int v = foo.NextFoo.VAL;\n" + |
| "}" |
| }, |
| "----------\n" + |
| "1. ERROR in bar\\Bar.java (at line 3)\n" + |
| " int v = foo.NextFoo.VAL;\n" + |
| " ^^^\n" + |
| "The static field BaseFoo.VAL should be accessed directly\n" + |
| "----------\n", |
| JavacTestOptions.Excuse.EclipseWarningConfiguredAsError); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=149004 |
| public void test003() { |
| Map options = getCompilerOptions(); |
| options.put(CompilerOptions.OPTION_ReportNonStaticAccessToStatic, CompilerOptions.IGNORE); |
| this.runConformTest( |
| new String[] { |
| "foo/BaseFoo.java", |
| "package foo;\n" + |
| "class BaseFoo {\n" + |
| " public static final int VAL = 0;\n" + |
| "}", |
| "foo/NextFoo.java", |
| "package foo;\n" + |
| "public class NextFoo extends BaseFoo {\n" + |
| "}", |
| "bar/Bar.java", |
| "package bar;\n" + |
| "import foo.NextFoo;\n" + |
| "public class Bar {\n" + |
| " NextFoo[] tab = new NextFoo[] { new NextFoo() };\n" + |
| " int v = tab[0].VAL;\n" + |
| "}" |
| }, |
| "", |
| null, |
| true, |
| null, |
| options, |
| null); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=149004 |
| public void test004() { |
| Map options = getCompilerOptions(); |
| options.put(CompilerOptions.OPTION_ReportNonStaticAccessToStatic, CompilerOptions.IGNORE); |
| this.runNegativeTest( |
| true, |
| new String[] { |
| "foo/BaseFoo.java", |
| "package foo;\n" + |
| "public class BaseFoo {\n" + |
| " public static final int VAL = 0;\n" + |
| "}", |
| "foo/NextFoo.java", |
| "package foo;\n" + |
| "public class NextFoo extends BaseFoo {\n" + |
| "}", |
| "bar/Bar.java", |
| "package bar;\n" + |
| "import foo.NextFoo;\n" + |
| "public class Bar {\n" + |
| " NextFoo[] tab = new NextFoo[] { new NextFoo() };\n" + |
| " int v = tab[0].VAL;\n" + |
| "}" |
| }, |
| null, |
| options, |
| "----------\n" + |
| "1. ERROR in bar\\Bar.java (at line 5)\n" + |
| " int v = tab[0].VAL;\n" + |
| " ^^^\n" + |
| "The static field BaseFoo.VAL should be accessed directly\n" + |
| "----------\n", |
| JavacTestOptions.Excuse.EclipseWarningConfiguredAsError); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=142234 |
| public void test005() { |
| Map options = getCompilerOptions(); |
| options.put(CompilerOptions.OPTION_ReportUnqualifiedFieldAccess, CompilerOptions.ERROR); |
| this.runNegativeTest( |
| true, |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " private String memberVariable;\n" + |
| " public String getMemberVariable() {\n" + |
| " return (memberVariable);\n" + |
| " }\n" + |
| "}" |
| }, |
| null, |
| options, |
| "----------\n" + |
| "1. ERROR in X.java (at line 4)\n" + |
| " return (memberVariable);\n" + |
| " ^^^^^^^^^^^^^^\n" + |
| "Unqualified access to the field X.memberVariable \n" + |
| "----------\n", |
| JavacTestOptions.Excuse.EclipseWarningConfiguredAsError); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=142234 |
| public void test006() { |
| Map options = getCompilerOptions(); |
| options.put(CompilerOptions.OPTION_ReportUnqualifiedFieldAccess, CompilerOptions.ERROR); |
| this.runNegativeTest( |
| true, |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " private String memberVariable;\n" + |
| " public String getMemberVariable() {\n" + |
| " return \\u0028memberVariable\\u0029;\n" + |
| " }\n" + |
| "}" |
| }, |
| null, |
| options, |
| "----------\n" + |
| "1. ERROR in X.java (at line 4)\n" + |
| " return \\u0028memberVariable\\u0029;\n" + |
| " ^^^^^^^^^^^^^^\n" + |
| "Unqualified access to the field X.memberVariable \n" + |
| "----------\n", |
| JavacTestOptions.Excuse.EclipseWarningConfiguredAsError); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=179056 |
| public void test007() { |
| Map options = getCompilerOptions(); |
| options.put(CompilerOptions.OPTION_ReportUnusedPrivateMember, CompilerOptions.IGNORE); |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " private void foo() {\n" + |
| " new A().a2.a.test = 8;\n" + |
| " }\n" + |
| "}", |
| "A.java", |
| "class A {\n" + |
| " private int test;\n" + |
| " A a2;\n" + |
| " A a = new A();\n" + |
| "}\n" + |
| "\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 3)\n" + |
| " new A().a2.a.test = 8;\n" + |
| " ^^^^\n" + |
| "The field A.test is not visible\n" + |
| "----------\n", |
| null, |
| true, |
| options); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=179056 |
| public void test008() { |
| Map options = getCompilerOptions(); |
| options.put(CompilerOptions.OPTION_ReportUnusedPrivateMember, CompilerOptions.IGNORE); |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " private void foo() {\n" + |
| " new A().a2.a.test = 8;\n" + |
| " }\n" + |
| "}", |
| "A.java", |
| "class A {\n" + |
| " int test;\n" + |
| " private A a2;\n" + |
| " A a = new A();\n" + |
| "}\n" + |
| "\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 3)\n" + |
| " new A().a2.a.test = 8;\n" + |
| " ^^\n" + |
| "The field A.a2 is not visible\n" + |
| "----------\n", |
| null, |
| true, |
| options); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=179056 |
| public void test009() { |
| Map options = getCompilerOptions(); |
| options.put(CompilerOptions.OPTION_ReportUnusedPrivateMember, CompilerOptions.IGNORE); |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " private void foo() {\n" + |
| " new A().a2.a.test = 8;\n" + |
| " }\n" + |
| "}", |
| "A.java", |
| "class A {\n" + |
| " int test;\n" + |
| " A a2;\n" + |
| " private A a = new A();\n" + |
| "}\n" + |
| "\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 3)\n" + |
| " new A().a2.a.test = 8;\n" + |
| " ^\n" + |
| "The field A.a is not visible\n" + |
| "----------\n", |
| null, |
| true, |
| options); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=179056 |
| public void test010() { |
| Map options = getCompilerOptions(); |
| options.put(CompilerOptions.OPTION_ReportUnusedPrivateMember, CompilerOptions.IGNORE); |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " private void foo() {\n" + |
| " A.a2.a.test = 8;\n" + |
| " }\n" + |
| "}", |
| "A.java", |
| "class A {\n" + |
| " static int test;\n" + |
| " static A a2;\n" + |
| " static private A a = new A();\n" + |
| "}\n" + |
| "\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 3)\n" + |
| " A.a2.a.test = 8;\n" + |
| " ^\n" + |
| "The field A.a is not visible\n" + |
| "----------\n", |
| null, |
| true, |
| options); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=179056 |
| public void test011() { |
| Map options = getCompilerOptions(); |
| options.put(CompilerOptions.OPTION_ReportUnusedPrivateMember, CompilerOptions.IGNORE); |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " private void foo() {\n" + |
| " A.a2.a.test = 8;\n" + |
| " }\n" + |
| "}", |
| "A.java", |
| "class A {\n" + |
| " static int test;\n" + |
| " static private A a2;\n" + |
| " static A a = new A();\n" + |
| "}\n" + |
| "\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 3)\n" + |
| " A.a2.a.test = 8;\n" + |
| " ^^\n" + |
| "The field A.a2 is not visible\n" + |
| "----------\n", |
| null, |
| true, |
| options); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=179056 |
| public void test012() { |
| Map options = getCompilerOptions(); |
| options.put(CompilerOptions.OPTION_ReportUnusedPrivateMember, CompilerOptions.IGNORE); |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " private void foo() {\n" + |
| " A.a2.a.test = 8;\n" + |
| " }\n" + |
| "}", |
| "A.java", |
| "class A {\n" + |
| " private static int test;\n" + |
| " static A a2;\n" + |
| " A a = new A();\n" + |
| "}\n" + |
| "\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 3)\n" + |
| " A.a2.a.test = 8;\n" + |
| " ^^^^\n" + |
| "The field A.test is not visible\n" + |
| "----------\n", |
| null, |
| true, |
| options); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=179056 |
| public void test013() { |
| Map options = getCompilerOptions(); |
| options.put(CompilerOptions.OPTION_ReportUnusedPrivateMember, CompilerOptions.IGNORE); |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X extends A {\n" + |
| " private void foo() {\n" + |
| " test = 8;\n" + |
| " }\n" + |
| "}", |
| "A.java", |
| "class A {\n" + |
| " private int test;\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 3)\n" + |
| " test = 8;\n" + |
| " ^^^^\n" + |
| "The field A.test is not visible\n" + |
| "----------\n", |
| null, |
| true, |
| options); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=179056 |
| public void test014() { |
| Map options = getCompilerOptions(); |
| options.put(CompilerOptions.OPTION_ReportUnusedPrivateMember, CompilerOptions.IGNORE); |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X extends A {\n" + |
| " private void foo() {\n" + |
| " this.test = 8;\n" + |
| " }\n" + |
| "}", |
| "A.java", |
| "class A {\n" + |
| " private int test;\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 3)\n" + |
| " this.test = 8;\n" + |
| " ^^^^\n" + |
| "The field A.test is not visible\n" + |
| "----------\n", |
| null, |
| true, |
| options); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=179056 |
| public void test015() { |
| Map options = getCompilerOptions(); |
| options.put(CompilerOptions.OPTION_ReportUnusedPrivateMember, CompilerOptions.IGNORE); |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X extends A {\n" + |
| " private void foo() {\n" + |
| " MyA.test = 8;\n" + |
| " }\n" + |
| "}", |
| "A.java", |
| "class A {\n" + |
| " private static A MyA;\n" + |
| " static int test;\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 3)\n" + |
| " MyA.test = 8;\n" + |
| " ^^^\n" + |
| "The field A.MyA is not visible\n" + |
| "----------\n", |
| null, |
| true, |
| options); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=179056 |
| public void test016() { |
| Map options = getCompilerOptions(); |
| options.put(CompilerOptions.OPTION_ReportUnusedPrivateMember, CompilerOptions.IGNORE); |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X extends A {\n" + |
| " private void foo() {\n" + |
| " MyA2.MyA.test = 8;\n" + |
| " }\n" + |
| "}", |
| "A.java", |
| "class A {\n" + |
| " private static A MyA;\n" + |
| " static A MyA2;\n" + |
| " static int test;\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 3)\n" + |
| " MyA2.MyA.test = 8;\n" + |
| " ^^^\n" + |
| "The field A.MyA is not visible\n" + |
| "----------\n", |
| null, |
| true, |
| options); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=222534 |
| public void test017() { |
| Map options = getCompilerOptions(); |
| options.put(CompilerOptions.OPTION_ReportFieldHiding, CompilerOptions.WARNING); |
| |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " Zork z;\n" + |
| " private static class Inner1 {\n" + |
| " private int field;\n" + |
| " }\n" + |
| " private static class Inner2 extends Inner1 {\n" + |
| " private int field;\n" + |
| " public void bar() {System.out.println(field);}\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 2)\n" + |
| " Zork z;\n" + |
| " ^^^^\n" + |
| "Zork cannot be resolved to a type\n" + |
| "----------\n", |
| null, |
| true, |
| options); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=222534 - variation |
| public void test018() { |
| Map options = getCompilerOptions(); |
| options.put(CompilerOptions.OPTION_ReportFieldHiding, CompilerOptions.WARNING); |
| |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " Zork z;\n" + |
| " public static int field;\n" + |
| " private static class Inner1 {\n" + |
| " private int field;\n" + |
| " }\n" + |
| " private static class Inner2 extends Inner1 {\n" + |
| " private int field;\n" + |
| " public void bar() {System.out.println(field);}\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 2)\n" + |
| " Zork z;\n" + |
| " ^^^^\n" + |
| "Zork cannot be resolved to a type\n" + |
| "----------\n" + |
| "2. WARNING in X.java (at line 5)\n" + |
| " private int field;\n" + |
| " ^^^^^\n" + |
| "The field X.Inner1.field is hiding a field from type X\n" + |
| "----------\n" + |
| "3. WARNING in X.java (at line 8)\n" + |
| " private int field;\n" + |
| " ^^^^^\n" + |
| "The field X.Inner2.field is hiding a field from type X\n" + |
| "----------\n", |
| null, |
| true, |
| options); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=222534 - variation |
| public void test019() { |
| Map options = getCompilerOptions(); |
| options.put(CompilerOptions.OPTION_ReportLocalVariableHiding, CompilerOptions.WARNING); |
| |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " Zork z;\n" + |
| " private static class Inner1 {\n" + |
| " private int field;\n" + |
| " }\n" + |
| " private static class Inner2 extends Inner1 {\n" + |
| " public void bar(int field) {System.out.println(field);}\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 2)\n" + |
| " Zork z;\n" + |
| " ^^^^\n" + |
| "Zork cannot be resolved to a type\n" + |
| "----------\n", |
| null, |
| true, |
| options); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=222534 - variation |
| public void test020() { |
| Map options = getCompilerOptions(); |
| options.put(CompilerOptions.OPTION_ReportLocalVariableHiding, CompilerOptions.WARNING); |
| |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " Zork z;\n" + |
| " public static int field;\n" + |
| " private static class Inner1 {\n" + |
| " private int field;\n" + |
| " }\n" + |
| " private static class Inner2 extends Inner1 {\n" + |
| " public void bar(int field) {System.out.println(field);}\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 2)\n" + |
| " Zork z;\n" + |
| " ^^^^\n" + |
| "Zork cannot be resolved to a type\n" + |
| "----------\n" + |
| "2. WARNING in X.java (at line 5)\n" + |
| " private int field;\n" + |
| " ^^^^^\n" + |
| "The field X.Inner1.field is hiding a field from type X\n" + |
| "----------\n" + |
| "3. WARNING in X.java (at line 8)\n" + |
| " public void bar(int field) {System.out.println(field);}\n" + |
| " ^^^^^\n" + |
| "The parameter field is hiding a field from type X\n" + |
| "----------\n", |
| null, |
| true, |
| options); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=303830 |
| public void test021() { |
| Map options = getCompilerOptions(); |
| options.put(CompilerOptions.OPTION_ReportRawTypeReference, CompilerOptions.IGNORE); |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "import java.util.ArrayList;\n" + |
| "\n" + |
| "public class X {\n" + |
| " public void bar() {\n" + |
| " ArrayList myList = new ArrayList();\n" + |
| " int len = myList.length;\n" + |
| " }\n" + |
| "}" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 6)\n" + |
| " int len = myList.length;\n" + |
| " ^^^^^^\n" + |
| "length cannot be resolved or is not a field\n" + |
| "----------\n", |
| null, |
| true, |
| options); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=303830 |
| public void test022() { |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " static int NEW_FIELD;\n" + |
| "}", |
| "Y.java", |
| "public class Y {\n" + |
| " void foo() {\n" + |
| " int i = X.OLD_FIELD;\n" + |
| " }\n" + |
| " void bar() {\n" + |
| " int j = X.OLD_FIELD;\n" + |
| " }\n" + |
| "}" |
| }, |
| "----------\n" + |
| "1. ERROR in Y.java (at line 3)\n" + |
| " int i = X.OLD_FIELD;\n" + |
| " ^^^^^^^^^\n" + |
| "OLD_FIELD cannot be resolved or is not a field\n" + |
| "----------\n" + |
| "2. ERROR in Y.java (at line 6)\n" + |
| " int j = X.OLD_FIELD;\n" + |
| " ^^^^^^^^^\n" + |
| "OLD_FIELD cannot be resolved or is not a field\n" + |
| "----------\n"); |
| } |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=318171 |
| public void test023() { |
| this.runNegativeTest( |
| new String[] { |
| "p1/A.java", |
| "package p1;\n" + |
| "public abstract class A {\n" + |
| " protected int field;\n" + |
| "}\n", |
| "p2/B.java", |
| "package p2;\n" + |
| "import p1.A;\n" + |
| "public abstract class B extends A {\n" + |
| " protected int field;\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. WARNING in p2\\B.java (at line 4)\n" + |
| " protected int field;\n" + |
| " ^^^^^\n" + |
| "The field B.field is hiding a field from type A\n" + |
| "----------\n"); |
| } |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=318171 |
| public void test024() { |
| this.runNegativeTest( |
| new String[] { |
| "p1/A.java", |
| "package p1;\n" + |
| "public abstract class A extends Super {\n" + |
| "}\n", |
| "p1/Super.java", |
| "package p1;\n" + |
| "public abstract class Super extends SuperSuper {\n" + |
| "}\n", |
| "p1/SuperSuper.java", |
| "package p1;\n" + |
| "public abstract class SuperSuper {\n" + |
| " protected int field;\n" + |
| "}\n", |
| "p2/B.java", |
| "package p2;\n" + |
| "import p1.A;\n" + |
| "public abstract class B extends A {\n" + |
| " protected int field;\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. WARNING in p2\\B.java (at line 4)\n" + |
| " protected int field;\n" + |
| " ^^^^^\n" + |
| "The field B.field is hiding a field from type SuperSuper\n" + |
| "----------\n"); |
| } |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=318171 |
| public void test025() { |
| this.runNegativeTest( |
| new String[] { |
| "p1/A.java", |
| "package p1;\n" + |
| "public abstract class A extends Super {\n" + |
| "}\n", |
| "p1/Super.java", |
| "package p1;\n" + |
| "public abstract class Super extends SuperSuper {\n" + |
| "}\n", |
| "p1/SuperSuper.java", |
| "package p1;\n" + |
| "public abstract class SuperSuper implements Interface{\n" + |
| "}\n", |
| "p1/Interface.java", |
| "package p1;\n" + |
| "public interface Interface{\n" + |
| " int field = 123;\n" + |
| "}\n", |
| "p2/B.java", |
| "package p2;\n" + |
| "import p1.A;\n" + |
| "public abstract class B extends A {\n" + |
| " protected int field;\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. WARNING in p2\\B.java (at line 4)\n" + |
| " protected int field;\n" + |
| " ^^^^^\n" + |
| "The field B.field is hiding a field from type Interface\n" + |
| "----------\n"); |
| } |
| public void testBug361039() { |
| if (this.complianceLevel < ClassFileConstants.JDK1_5) return; // to leverage autounboxing |
| runNegativeTest( |
| new String[] { |
| "Bug361039.java", |
| "public class Bug361039 {\n" + |
| " public Bug361039(boolean b) {\n" + |
| " }\n" + |
| " private Object foo() {\n" + |
| " return new Bug361039(!((Boolean)this.f));\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in Bug361039.java (at line 5)\n" + |
| " return new Bug361039(!((Boolean)this.f));\n" + |
| " ^\n" + |
| "f cannot be resolved or is not a field\n" + |
| "----------\n"); |
| } |
| public void testBug568959_001() { |
| if (this.complianceLevel < ClassFileConstants.JDK1_8) return; // lambda |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n"+ |
| " public void foo(Object o) {\n"+ |
| " I i = () -> {\n"+ |
| " while (o.eq) {\n"+ |
| " // nothing\n"+ |
| " }\n"+ |
| " };\n"+ |
| " }\n"+ |
| "}\n"+ |
| "interface I { \n"+ |
| " public abstract void run();\n"+ |
| "}" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 4)\n" + |
| " while (o.eq) {\n" + |
| " ^^\n" + |
| "eq cannot be resolved or is not a field\n" + |
| "----------\n"); |
| } |
| public static Class testClass() { |
| return FieldAccessTest.class; |
| } |
| } |
| |