| /******************************************************************************* |
| * Copyright (c) 2001, 2010 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 |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.jdt.core.tests.compiler.regression; |
| |
| import java.util.HashMap; |
| import java.util.Map; |
| |
| import org.eclipse.jdt.core.JavaCore; |
| import org.eclipse.jdt.core.compiler.CategorizedProblem; |
| import org.eclipse.jdt.internal.compiler.CompilationResult; |
| import org.eclipse.jdt.internal.compiler.ICompilerRequestor; |
| import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants; |
| import org.eclipse.jdt.internal.compiler.impl.CompilerOptions; |
| import junit.framework.Test; |
| |
| /* Collects potential programming problems tests that are not segregated in a |
| * dedicated test class (aka NullReferenceTest). */ |
| public class ProgrammingProblemsTest extends AbstractRegressionTest { |
| |
| public ProgrammingProblemsTest(String name) { |
| super(name); |
| } |
| |
| // Static initializer to specify tests subset using TESTS_* static variables |
| // All specified tests which does not belong to the class are skipped... |
| // Only the highest compliance level is run; add the VM argument |
| // -Dcompliance=1.4 (for example) to lower it if needed |
| static { |
| // TESTS_NAMES = new String[] { "test001" }; |
| // TESTS_NUMBERS = new int[] { 43 }; |
| // TESTS_RANGE = new int[] { 1, -1 }; |
| } |
| |
| public static Test suite() { |
| return buildAllCompliancesTestSuite(testClass()); |
| } |
| |
| public static Class testClass() { |
| return ProgrammingProblemsTest.class; |
| } |
| |
| void runTest( |
| String[] testFiles, |
| String[] errorOptions, |
| String[] warningOptions, |
| String[] ignoreOptions, |
| boolean expectingCompilerErrors, |
| String expectedCompilerLog, |
| String expectedOutputString, |
| boolean forceExecution, |
| String[] classLib, |
| boolean shouldFlushOutputDirectory, |
| String[] vmArguments, |
| Map customOptions, |
| ICompilerRequestor clientRequestor, |
| boolean skipJavac) { |
| Map compilerOptions = customOptions; |
| if (errorOptions != null || warningOptions != null || |
| ignoreOptions != null) { |
| if (compilerOptions == null) { |
| compilerOptions = new HashMap(); |
| } |
| if (errorOptions != null) { |
| for (int i = 0; i < errorOptions.length; i++) { |
| compilerOptions.put(errorOptions[i], CompilerOptions.ERROR); |
| } |
| } |
| if (warningOptions != null) { |
| for (int i = 0; i < warningOptions.length; i++) { |
| compilerOptions.put(warningOptions[i], CompilerOptions.WARNING); |
| } |
| } |
| if (ignoreOptions != null) { |
| for (int i = 0; i < ignoreOptions.length; i++) { |
| compilerOptions.put(ignoreOptions[i], CompilerOptions.IGNORE); |
| } |
| } |
| } |
| runTest(testFiles, |
| expectingCompilerErrors, |
| expectedCompilerLog, |
| expectedOutputString, |
| "" /* expectedErrorString */, |
| forceExecution, |
| classLib, |
| shouldFlushOutputDirectory, |
| vmArguments, |
| compilerOptions, |
| clientRequestor, |
| skipJavac); |
| } |
| |
| // default behavior upon unread parameters |
| public void test0001_unread_parameters() { |
| runTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public void foo(boolean b) {\n" + |
| " }\n" + |
| "}\n" |
| }, |
| null /* errorOptions */, |
| null /* warningOptions */, |
| null /* ignoreOptions */, |
| false /* expectingCompilerErrors */, |
| "" /* expectedCompilerLog */, |
| "" /* expectedOutputString */, |
| false /* forceExecution */, |
| null /* classLib */, |
| true /* shouldFlushOutputDirectory */, |
| null /* vmArguments */, |
| null /* customOptions */, |
| null /* clientRequestor */, |
| false /* skipJavac */); |
| } |
| |
| // reporting unread paramaters as warning |
| public void test0002_unread_parameters() { |
| runTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public void foo(boolean b) {\n" + |
| " }\n" + |
| "}\n" |
| }, |
| null /* errorOptions */, |
| new String[] { |
| CompilerOptions.OPTION_ReportUnusedParameter |
| } /* warningOptions */, |
| null /* ignoreOptions */, |
| false /* expectingCompilerErrors */, |
| "----------\n" + |
| "1. WARNING in X.java (at line 2)\r\n" + |
| " public void foo(boolean b) {\r\n" + |
| " ^\n" + |
| "The parameter b is never read\n" + |
| "----------\n" /* expectedCompilerLog */, |
| "" /* expectedOutputString */, |
| false /* forceExecution */, |
| null /* classLib */, |
| true /* shouldFlushOutputDirectory */, |
| null /* vmArguments */, |
| null /* customOptions */, |
| null /* clientRequestor */, |
| true /* skipJavac */); |
| } |
| |
| // disabling the reporting of unread parameters using the Javadoc |
| // @param disables by default |
| public void test0003_unread_parameters() { |
| Map customOptions = new HashMap(); |
| customOptions.put(CompilerOptions.OPTION_DocCommentSupport, |
| CompilerOptions.ENABLED); |
| runTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| "/** @param b mute warning **/\n" + |
| " public void foo(boolean b) {\n" + |
| " }\n" + |
| "}\n" |
| }, |
| null /* errorOptions */, |
| new String[] { |
| CompilerOptions.OPTION_ReportUnusedParameter |
| } /* warningOptions */, |
| null /* ignoreOptions */, |
| false /* expectingCompilerErrors */, |
| "" /* expectedCompilerLog */, |
| "" /* expectedOutputString */, |
| false /* forceExecution */, |
| null /* classLib */, |
| true /* shouldFlushOutputDirectory */, |
| null /* vmArguments */, |
| customOptions, |
| null /* clientRequestor */, |
| true /* skipJavac */); |
| } |
| |
| // disabling the reporting of unread parameters using the Javadoc |
| // @param disabling can be disabled |
| public void test0004_unread_parameters() { |
| Map customOptions = new HashMap(); |
| customOptions.put(CompilerOptions.OPTION_DocCommentSupport, |
| CompilerOptions.ENABLED); |
| customOptions.put(CompilerOptions.OPTION_ReportUnusedParameterIncludeDocCommentReference, |
| CompilerOptions.DISABLED); |
| runTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| "/** @param b mute warning **/\n" + |
| " public void foo(boolean b) {\n" + |
| " }\n" + |
| "}\n" |
| }, |
| null /* errorOptions */, |
| new String[] { |
| CompilerOptions.OPTION_ReportUnusedParameter |
| } /* warningOptions */, |
| null /* ignoreOptions */, |
| false /* expectingCompilerErrors */, |
| "----------\n" + |
| "1. WARNING in X.java (at line 3)\n" + |
| " public void foo(boolean b) {\n" + |
| " ^\n" + |
| "The parameter b is never read\n" + |
| "----------\n" /* expectedCompilerLog */, |
| "" /* expectedOutputString */, |
| false /* forceExecution */, |
| null /* classLib */, |
| true /* shouldFlushOutputDirectory */, |
| null /* vmArguments */, |
| customOptions, |
| null /* clientRequestor */, |
| true /* skipJavac */); |
| } |
| |
| // disabling the reporting of unread parameters using SuppressWarnings |
| public void test0005_unread_parameters() { |
| if (this.complianceLevel >= ClassFileConstants.JDK1_5) { |
| runTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| "@SuppressWarnings(\"unused\")\n" + // most specific token |
| " public void foo(boolean b) {\n" + |
| " }\n" + |
| "@SuppressWarnings(\"all\")\n" + // least specific token |
| " public void foo(int i) {\n" + |
| " }\n" + |
| "}\n" |
| }, |
| null /* errorOptions */, |
| new String[] { |
| CompilerOptions.OPTION_ReportUnusedParameter |
| } /* warningOptions */, |
| null /* ignoreOptions */, |
| false /* expectingCompilerErrors */, |
| "" /* expectedCompilerLog */, |
| "" /* expectedOutputString */, |
| false /* forceExecution */, |
| null /* classLib */, |
| true /* shouldFlushOutputDirectory */, |
| null /* vmArguments */, |
| null /* customOptions */, |
| null /* clientRequestor */, |
| true /* skipJavac */); |
| } |
| } |
| |
| // reporting unread paramaters as error |
| public void test0006_unread_parameters() { |
| runTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public void foo(boolean b) {\n" + |
| " }\n" + |
| "}\n" |
| }, |
| new String[] { |
| CompilerOptions.OPTION_ReportUnusedParameter |
| } /* errorOptions */, |
| null /* warningOptions */, |
| null /* ignoreOptions */, |
| true /* expectingCompilerErrors */, |
| "----------\n" + |
| "1. ERROR in X.java (at line 2)\r\n" + |
| " public void foo(boolean b) {\r\n" + |
| " ^\n" + |
| "The parameter b is never read\n" + |
| "----------\n" /* expectedCompilerLog */, |
| "" /* expectedOutputString */, |
| false /* forceExecution */, |
| null /* classLib */, |
| true /* shouldFlushOutputDirectory */, |
| null /* vmArguments */, |
| null /* customOptions */, |
| null /* clientRequestor */, |
| true /* skipJavac */); |
| } |
| |
| // default behavior upon unnecessary declaration of thrown checked exceptions |
| public void test0007_declared_thrown_checked_exceptions() { |
| runTest( |
| new String[] { |
| "X.java", |
| "import java.io.IOException;\n" + |
| "public class X {\n" + |
| " public void foo() throws IOException {\n" + |
| " }\n" + |
| "}\n" |
| }, |
| null /* errorOptions */, |
| null /* warningOptions */, |
| null /* ignoreOptions */, |
| false /* expectingCompilerErrors */, |
| "" /* expectedCompilerLog */, |
| "" /* expectedOutputString */, |
| false /* forceExecution */, |
| null /* classLib */, |
| true /* shouldFlushOutputDirectory */, |
| null /* vmArguments */, |
| null /* customOptions */, |
| null /* clientRequestor */, |
| false /* skipJavac */); |
| } |
| |
| // reporting unnecessary declaration of thrown checked exceptions as warning |
| public void test0008_declared_thrown_checked_exceptions() { |
| runTest( |
| new String[] { |
| "X.java", |
| "import java.io.IOException;\n" + |
| "public class X {\n" + |
| " public void foo() throws IOException {\n" + |
| " }\n" + |
| "}\n" |
| }, |
| null /* errorOptions */, |
| new String[] { |
| CompilerOptions.OPTION_ReportUnusedDeclaredThrownException |
| } /* warningOptions */, |
| null /* ignoreOptions */, |
| false /* expectingCompilerErrors */, |
| "----------\n" + |
| "1. WARNING in X.java (at line 3)\n" + |
| " public void foo() throws IOException {\n" + |
| " ^^^^^^^^^^^\n" + |
| "The declared exception IOException is not actually thrown by the method foo() from type X\n" + |
| "----------\n" /* expectedCompilerLog */, |
| "" /* expectedOutputString */, |
| false /* forceExecution */, |
| null /* classLib */, |
| true /* shouldFlushOutputDirectory */, |
| null /* vmArguments */, |
| null /* customOptions */, |
| null /* clientRequestor */, |
| true /* skipJavac */); |
| } |
| |
| // disabling the reporting of unnecessary declaration of thrown checked |
| // exceptions using the Javadoc |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=73244 |
| // @throws disables by default |
| public void test0009_declared_thrown_checked_exceptions() { |
| Map customOptions = new HashMap(); |
| customOptions.put(CompilerOptions.OPTION_DocCommentSupport, |
| CompilerOptions.ENABLED); |
| runTest( |
| new String[] { |
| "X.java", |
| "import java.io.IOException;\n" + |
| "public class X {\n" + |
| "/** @throws IOException mute warning **/\n" + |
| " public void foo() throws IOException {\n" + |
| " }\n" + |
| "}\n" |
| }, |
| null /* errorOptions */, |
| new String[] { |
| CompilerOptions.OPTION_ReportUnusedDeclaredThrownException |
| } /* warningOptions */, |
| null /* ignoreOptions */, |
| false /* expectingCompilerErrors */, |
| "" /* expectedCompilerLog */, |
| "" /* expectedOutputString */, |
| false /* forceExecution */, |
| null /* classLib */, |
| true /* shouldFlushOutputDirectory */, |
| null /* vmArguments */, |
| customOptions, |
| null /* clientRequestor */, |
| true /* skipJavac */); |
| } |
| |
| // disabling the reporting of unnecessary declaration of thrown checked |
| // exceptions using the Javadoc |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=73244 |
| // @throws disabling can be disabled |
| public void test0010_declared_thrown_checked_exceptions() { |
| Map customOptions = new HashMap(); |
| customOptions.put(CompilerOptions.OPTION_DocCommentSupport, |
| CompilerOptions.ENABLED); |
| customOptions.put(CompilerOptions.OPTION_ReportUnusedDeclaredThrownExceptionIncludeDocCommentReference, |
| CompilerOptions.DISABLED); |
| runTest( |
| new String[] { |
| "X.java", |
| "import java.io.IOException;\n" + |
| "public class X {\n" + |
| "/** @throws IOException mute warning **/\n" + |
| " public void foo() throws IOException {\n" + |
| " }\n" + |
| "}\n" |
| }, |
| null /* errorOptions */, |
| new String[] { |
| CompilerOptions.OPTION_ReportUnusedDeclaredThrownException |
| } /* warningOptions */, |
| null /* ignoreOptions */, |
| false /* expectingCompilerErrors */, |
| "----------\n" + |
| "1. WARNING in X.java (at line 4)\n" + |
| " public void foo() throws IOException {\n" + |
| " ^^^^^^^^^^^\n" + |
| "The declared exception IOException is not actually thrown by the method foo() from type X\n" + |
| "----------\n" /* expectedCompilerLog */, |
| "" /* expectedOutputString */, |
| false /* forceExecution */, |
| null /* classLib */, |
| true /* shouldFlushOutputDirectory */, |
| null /* vmArguments */, |
| customOptions, |
| null /* clientRequestor */, |
| true /* skipJavac */); |
| } |
| |
| // disabling the reporting of unnecessary declaration of thrown checked |
| // exceptions using SuppressWarnings |
| public void test0011_declared_thrown_checked_exceptions() { |
| if (this.complianceLevel >= ClassFileConstants.JDK1_5) { |
| runTest( |
| new String[] { |
| "X.java", |
| "import java.io.IOException;\n" + |
| "public class X {\n" + |
| "@SuppressWarnings(\"all\")\n" + // no specific token |
| " public void foo() throws IOException {\n" + |
| " }\n" + |
| "}\n" |
| }, |
| null /* errorOptions */, |
| new String[] { |
| CompilerOptions.OPTION_ReportUnusedDeclaredThrownException |
| } /* warningOptions */, |
| null /* ignoreOptions */, |
| false /* expectingCompilerErrors */, |
| "" /* expectedCompilerLog */, |
| "" /* expectedOutputString */, |
| false /* forceExecution */, |
| null /* classLib */, |
| true /* shouldFlushOutputDirectory */, |
| null /* vmArguments */, |
| null /* customOptions */, |
| null /* clientRequestor */, |
| true /* skipJavac */); |
| } |
| } |
| |
| // reporting unnecessary declaration of thrown checked exceptions as error |
| public void test0012_declared_thrown_checked_exceptions() { |
| runTest( |
| new String[] { |
| "X.java", |
| "import java.io.IOException;\n" + |
| "public class X {\n" + |
| " public void foo() throws IOException {\n" + |
| " }\n" + |
| "}\n" |
| }, |
| new String[] { |
| CompilerOptions.OPTION_ReportUnusedDeclaredThrownException |
| } /* errorOptions */, |
| null /* warningOptions */, |
| null /* ignoreOptions */, |
| true /* expectingCompilerErrors */, |
| "----------\n" + |
| "1. ERROR in X.java (at line 3)\n" + |
| " public void foo() throws IOException {\n" + |
| " ^^^^^^^^^^^\n" + |
| "The declared exception IOException is not actually thrown by the method foo() from type X\n" + |
| "----------\n" /* expectedCompilerLog */, |
| "" /* expectedOutputString */, |
| false /* forceExecution */, |
| null /* classLib */, |
| true /* shouldFlushOutputDirectory */, |
| null /* vmArguments */, |
| null /* customOptions */, |
| null /* clientRequestor */, |
| true /* skipJavac */); |
| } |
| |
| // disabling the reporting of unnecessary declaration of thrown checked |
| // exceptions using the Javadoc |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=73244 |
| // @throws disables by default, but only exact matches work |
| public void test0013_declared_thrown_checked_exceptions() { |
| Map customOptions = new HashMap(); |
| customOptions.put(CompilerOptions.OPTION_DocCommentSupport, |
| CompilerOptions.ENABLED); |
| runTest( |
| new String[] { |
| "X.java", |
| "import java.io.IOException;\n" + |
| "import java.io.EOFException;\n" + |
| "public class X {\n" + |
| "/** @throws EOFException does not mute warning for IOException **/\n" + |
| " public void foo() throws IOException {\n" + |
| " }\n" + |
| "}\n" |
| }, |
| null /* errorOptions */, |
| new String[] { |
| CompilerOptions.OPTION_ReportUnusedDeclaredThrownException |
| } /* warningOptions */, |
| null /* ignoreOptions */, |
| false /* expectingCompilerErrors */, |
| "----------\n" + |
| "1. WARNING in X.java (at line 5)\n" + |
| " public void foo() throws IOException {\n" + |
| " ^^^^^^^^^^^\n" + |
| "The declared exception IOException is not actually thrown by the method foo() from type X\n" + |
| "----------\n" /* expectedCompilerLog */, |
| "" /* expectedOutputString */, |
| false /* forceExecution */, |
| null /* classLib */, |
| true /* shouldFlushOutputDirectory */, |
| null /* vmArguments */, |
| customOptions, |
| null /* clientRequestor */, |
| true /* skipJavac */); |
| } |
| // interaction between errors and warnings |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=203721 |
| public void test0014_declared_thrown_checked_exceptions_unread_parameters() { |
| runTest( |
| new String[] { |
| "X.java", |
| "import java.io.IOException;\n" + |
| "public class X {\n" + |
| " void foo(int unused) throws IOException {}\n" + |
| "}\n" |
| }, |
| new String[] { |
| CompilerOptions.OPTION_ReportUnusedDeclaredThrownException |
| } /* errorOptions */, |
| new String[] { |
| CompilerOptions.OPTION_ReportUnusedParameter |
| } /* warningOptions */, |
| null /* ignoreOptions */, |
| true /* expectingCompilerErrors */, |
| "----------\n" + |
| "1. WARNING in X.java (at line 3)\n" + |
| " void foo(int unused) throws IOException {}\n" + |
| " ^^^^^^\n" + |
| "The parameter unused is never read\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 3)\n" + |
| " void foo(int unused) throws IOException {}\n" + |
| " ^^^^^^^^^^^\n" + |
| "The declared exception IOException is not actually thrown by the method foo(int) from type X\n" + |
| "----------\n" /* expectedCompilerLog */, |
| "" /* expectedOutputString */, |
| false /* forceExecution */, |
| null /* classLib */, |
| true /* shouldFlushOutputDirectory */, |
| null /* vmArguments */, |
| null /* customOptions */, |
| null /* clientRequestor */, |
| true /* skipJavac */); |
| } |
| // interaction between errors and warnings |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=203721 |
| // variant: both warnings show up |
| public void test0015_declared_thrown_checked_exceptions_unread_parameters() { |
| runTest( |
| new String[] { |
| "X.java", |
| "import java.io.IOException;\n" + |
| "public class X {\n" + |
| " void foo(int unused) throws IOException {}\n" + |
| "}\n" |
| }, |
| null /* errorOptions */, |
| new String[] { |
| CompilerOptions.OPTION_ReportUnusedDeclaredThrownException, |
| CompilerOptions.OPTION_ReportUnusedParameter |
| } /* warningOptions */, |
| null /* ignoreOptions */, |
| false /* expectingCompilerErrors */, |
| "----------\n" + |
| "1. WARNING in X.java (at line 3)\n" + |
| " void foo(int unused) throws IOException {}\n" + |
| " ^^^^^^\n" + |
| "The parameter unused is never read\n" + |
| "----------\n" + |
| "2. WARNING in X.java (at line 3)\n" + |
| " void foo(int unused) throws IOException {}\n" + |
| " ^^^^^^^^^^^\n" + |
| "The declared exception IOException is not actually thrown by the method foo(int) from type X\n" + |
| "----------\n" /* expectedCompilerLog */, |
| "" /* expectedOutputString */, |
| false /* forceExecution */, |
| null /* classLib */, |
| true /* shouldFlushOutputDirectory */, |
| null /* vmArguments */, |
| null /* customOptions */, |
| null /* clientRequestor */, |
| true /* skipJavac */); |
| } |
| |
| // reporting unread paramaters as error on a constructor |
| public void test0016_unread_parameters_constructor() { |
| runTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public X(boolean b) {\n" + |
| " }\n" + |
| "}\n" |
| }, |
| new String[] { |
| CompilerOptions.OPTION_ReportUnusedParameter |
| } /* errorOptions */, |
| null /* warningOptions */, |
| null /* ignoreOptions */, |
| true /* expectingCompilerErrors */, |
| "----------\n" + |
| "1. ERROR in X.java (at line 2)\n" + |
| " public X(boolean b) {\n" + |
| " ^\n" + |
| "The parameter b is never read\n" + |
| "----------\n" /* expectedCompilerLog */, |
| "" /* expectedOutputString */, |
| false /* forceExecution */, |
| null /* classLib */, |
| true /* shouldFlushOutputDirectory */, |
| null /* vmArguments */, |
| null /* customOptions */, |
| null /* clientRequestor */, |
| true /* skipJavac */); |
| } |
| |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=208001 |
| public void test0017_shadowing_package_visible_methods() { |
| runTest( |
| new String[] { |
| "p/X.java", |
| "package p;\n" + |
| "public class X {\n" + |
| " void foo() {\n" + |
| " }\n" + |
| "}\n", |
| "q/Y.java", |
| "package q;\n" + |
| "public class Y extends p.X {\n" + |
| " void foo() {\n" + |
| " }\n" + |
| "}\n", |
| }, |
| null /* errorOptions */, |
| new String[] { |
| CompilerOptions.OPTION_ReportOverridingPackageDefaultMethod |
| } /* warningOptions */, |
| null /* ignoreOptions */, |
| false /* expectingCompilerErrors */, |
| "----------\n" + |
| "1. WARNING in q\\Y.java (at line 3)\n" + |
| " void foo() {\n" + |
| " ^^^^^\n" + |
| "The method Y.foo() does not override the inherited method from X since it is private to a different package\n" + |
| "----------\n" /* expectedCompilerLog */, |
| "" /* expectedOutputString */, |
| false /* forceExecution */, |
| null /* classLib */, |
| true /* shouldFlushOutputDirectory */, |
| null /* vmArguments */, |
| null /* customOptions */, |
| new ICompilerRequestor() { |
| public void acceptResult(CompilationResult result) { |
| if (result.compilationUnit.getFileName()[0] == 'Y') { |
| assertEquals("unexpected problems count", 1, result.problemCount); |
| assertEquals("unexpected category", CategorizedProblem.CAT_NAME_SHADOWING_CONFLICT, result.problems[0].getCategoryID()); |
| } |
| } |
| } /* clientRequestor */, |
| true /* skipJavac */); |
| } |
| // default behavior upon unnecessary declaration of thrown unchecked exceptions |
| public void test0018_declared_thrown_unchecked_exceptions() { |
| runTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public void foo() throws ArithmeticException {\n" + |
| " }\n" + |
| "}\n" |
| }, |
| null /* errorOptions */, |
| null /* warningOptions */, |
| null /* ignoreOptions */, |
| false /* expectingCompilerErrors */, |
| "" /* expectedCompilerLog */, |
| "" /* expectedOutputString */, |
| false /* forceExecution */, |
| null /* classLib */, |
| true /* shouldFlushOutputDirectory */, |
| null /* vmArguments */, |
| null /* customOptions */, |
| null /* clientRequestor */, |
| true /* skipJavac */); |
| } |
| // default behavior upon unnecessary declaration of thrown unchecked exceptions |
| public void test0019_declared_thrown_unchecked_exceptions() { |
| runTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public void foo() throws RuntimeException {\n" + |
| " }\n" + |
| "}\n" |
| }, |
| null /* errorOptions */, |
| null /* warningOptions */, |
| null /* ignoreOptions */, |
| false /* expectingCompilerErrors */, |
| "" /* expectedCompilerLog */, |
| "" /* expectedOutputString */, |
| false /* forceExecution */, |
| null /* classLib */, |
| true /* shouldFlushOutputDirectory */, |
| null /* vmArguments */, |
| null /* customOptions */, |
| null /* clientRequestor */, |
| true /* skipJavac */); |
| } |
| // default behavior upon unnecessary declaration of Exception |
| public void test0020_declared_thrown_checked_exceptions() { |
| runTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public void foo() throws Exception {\n" + |
| " }\n" + |
| "}\n" |
| }, |
| null /* errorOptions */, |
| null /* warningOptions */, |
| null /* ignoreOptions */, |
| false /* expectingCompilerErrors */, |
| "" /* expectedCompilerLog */, |
| "" /* expectedOutputString */, |
| false /* forceExecution */, |
| null /* classLib */, |
| true /* shouldFlushOutputDirectory */, |
| null /* vmArguments */, |
| null /* customOptions */, |
| null /* clientRequestor */, |
| true /* skipJavac */); |
| } |
| // default behavior upon unnecessary declaration of Throwable |
| public void test0021_declared_thrown_checked_exceptions() { |
| runTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public void foo() throws Throwable {\n" + |
| " }\n" + |
| "}\n" |
| }, |
| null /* errorOptions */, |
| null /* warningOptions */, |
| null /* ignoreOptions */, |
| false /* expectingCompilerErrors */, |
| "" /* expectedCompilerLog */, |
| "" /* expectedOutputString */, |
| false /* forceExecution */, |
| null /* classLib */, |
| true /* shouldFlushOutputDirectory */, |
| null /* vmArguments */, |
| null /* customOptions */, |
| null /* clientRequestor */, |
| true /* skipJavac */); |
| } |
| |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=100278 |
| // reporting unnecessary declaration of thrown unchecked exceptions as warning |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=219461 |
| // suppressed the warning |
| public void test0022_declared_thrown_unchecked_exceptions() { |
| Map customOptions = new HashMap(); |
| customOptions.put(CompilerOptions.OPTION_ReportUnusedDeclaredThrownExceptionExemptExceptionAndThrowable, |
| CompilerOptions.DISABLED); |
| runTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public void foo() throws ArithmeticException {\n" + |
| " }\n" + |
| "}\n" |
| }, |
| null /* errorOptions */, |
| new String[] { |
| CompilerOptions.OPTION_ReportUnusedDeclaredThrownException |
| } /* warningOptions */, |
| null /* ignoreOptions */, |
| false /* expectingCompilerErrors */, |
| "" /* expectedCompilerLog */, |
| "" /* expectedOutputString */, |
| false /* forceExecution */, |
| null /* classLib */, |
| true /* shouldFlushOutputDirectory */, |
| null /* vmArguments */, |
| customOptions, |
| null /* clientRequestor */, |
| true /* skipJavac */); |
| } |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=100278 |
| // reporting unnecessary declaration of thrown unchecked exceptions as warning |
| // the external API uses another string literal - had it wrong in first attempt |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=219461 |
| // suppressed the warning for unchecked exceptions, using Exception instead |
| public void test0023_declared_thrown_unchecked_exceptions() { |
| Map customOptions = new HashMap(); |
| customOptions.put(JavaCore.COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_EXEMPT_EXCEPTION_AND_THROWABLE, |
| CompilerOptions.DISABLED); |
| runTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public void foo() throws Exception {\n" + |
| " }\n" + |
| "}\n" |
| }, |
| null /* errorOptions */, |
| new String[] { |
| CompilerOptions.OPTION_ReportUnusedDeclaredThrownException |
| } /* warningOptions */, |
| null /* ignoreOptions */, |
| false /* expectingCompilerErrors */, |
| "----------\n" + |
| "1. WARNING in X.java (at line 2)\n" + |
| " public void foo() throws Exception {\n" + |
| " ^^^^^^^^^\n" + |
| "The declared exception Exception is not actually thrown by the method foo() from type X\n" + |
| "----------\n" /* expectedCompilerLog */, |
| "" /* expectedOutputString */, |
| false /* forceExecution */, |
| null /* classLib */, |
| true /* shouldFlushOutputDirectory */, |
| null /* vmArguments */, |
| customOptions, |
| null /* clientRequestor */, |
| true /* skipJavac */); |
| } |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=100278 |
| // reporting unnecessary declaration of thrown unchecked exceptions as warning |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=219461 |
| // suppressed the warning |
| public void test0024_declared_thrown_unchecked_exceptions() { |
| Map customOptions = new HashMap(); |
| customOptions.put(CompilerOptions.OPTION_ReportUnusedDeclaredThrownExceptionExemptExceptionAndThrowable, |
| CompilerOptions.DISABLED); |
| runTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public void foo() throws RuntimeException {\n" + |
| " }\n" + |
| "}\n" |
| }, |
| null /* errorOptions */, |
| new String[] { |
| CompilerOptions.OPTION_ReportUnusedDeclaredThrownException |
| } /* warningOptions */, |
| null /* ignoreOptions */, |
| false /* expectingCompilerErrors */, |
| "" /* expectedCompilerLog */, |
| "" /* expectedOutputString */, |
| false /* forceExecution */, |
| null /* classLib */, |
| true /* shouldFlushOutputDirectory */, |
| null /* vmArguments */, |
| customOptions, |
| null /* clientRequestor */, |
| true /* skipJavac */); |
| } |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=100278 |
| // reporting unnecessary declaration of thrown unchecked exceptions as warning |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=219461 |
| // focused on Exception and Throwable, which are not unchecked but can catch |
| // unchecked exceptions |
| public void test0025_declared_thrown_checked_exceptions() { |
| Map customOptions = new HashMap(); |
| customOptions.put(CompilerOptions.OPTION_ReportUnusedDeclaredThrownExceptionExemptExceptionAndThrowable, |
| CompilerOptions.DISABLED); |
| runTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public void foo() throws Exception {\n" + |
| " }\n" + |
| "}\n" |
| }, |
| null /* errorOptions */, |
| new String[] { |
| CompilerOptions.OPTION_ReportUnusedDeclaredThrownException |
| } /* warningOptions */, |
| null /* ignoreOptions */, |
| false /* expectingCompilerErrors */, |
| "----------\n" + |
| "1. WARNING in X.java (at line 2)\n" + |
| " public void foo() throws Exception {\n" + |
| " ^^^^^^^^^\n" + |
| "The declared exception Exception is not actually thrown by the method foo() from type X\n" + |
| "----------\n" /* expectedCompilerLog */, |
| "" /* expectedOutputString */, |
| false /* forceExecution */, |
| null /* classLib */, |
| true /* shouldFlushOutputDirectory */, |
| null /* vmArguments */, |
| customOptions, |
| null /* clientRequestor */, |
| true /* skipJavac */); |
| } |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=100278 |
| // reporting unnecessary declaration of thrown unchecked exceptions as warning |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=219461 |
| // focused on Exception and Throwable, which are not unchecked but can catch |
| // unchecked exceptions |
| public void test0026_declared_thrown_checked_exceptions() { |
| Map customOptions = new HashMap(); |
| customOptions.put(CompilerOptions.OPTION_ReportUnusedDeclaredThrownExceptionExemptExceptionAndThrowable, |
| CompilerOptions.DISABLED); |
| runTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public void foo() throws Throwable {\n" + |
| " }\n" + |
| "}\n" |
| }, |
| null /* errorOptions */, |
| new String[] { |
| CompilerOptions.OPTION_ReportUnusedDeclaredThrownException |
| } /* warningOptions */, |
| null /* ignoreOptions */, |
| false /* expectingCompilerErrors */, |
| "----------\n" + |
| "1. WARNING in X.java (at line 2)\n" + |
| " public void foo() throws Throwable {\n" + |
| " ^^^^^^^^^\n" + |
| "The declared exception Throwable is not actually thrown by the method foo() from type X\n" + |
| "----------\n" /* expectedCompilerLog */, |
| "" /* expectedOutputString */, |
| false /* forceExecution */, |
| null /* classLib */, |
| true /* shouldFlushOutputDirectory */, |
| null /* vmArguments */, |
| customOptions, |
| null /* clientRequestor */, |
| true /* skipJavac */); |
| } |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=100278 |
| // disabling the reporting of unnecessary declaration of thrown unchecked |
| // exceptions using the Javadoc |
| // @throws disables by default |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=219461 |
| // suppressed the warning for unchecked exceptions, using Exception instead |
| public void test0027_declared_thrown_unchecked_exceptions() { |
| Map customOptions = new HashMap(); |
| customOptions.put(CompilerOptions.OPTION_DocCommentSupport, |
| CompilerOptions.ENABLED); |
| customOptions.put(CompilerOptions.OPTION_ReportUnusedDeclaredThrownExceptionExemptExceptionAndThrowable, |
| CompilerOptions.DISABLED); |
| runTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| "/** @throws Exception mute warning **/\n" + |
| " public void foo() throws Exception {\n" + |
| " }\n" + |
| "}\n" |
| }, |
| null /* errorOptions */, |
| new String[] { |
| CompilerOptions.OPTION_ReportUnusedDeclaredThrownException |
| } /* warningOptions */, |
| null /* ignoreOptions */, |
| false /* expectingCompilerErrors */, |
| "" /* expectedCompilerLog */, |
| "" /* expectedOutputString */, |
| false /* forceExecution */, |
| null /* classLib */, |
| true /* shouldFlushOutputDirectory */, |
| null /* vmArguments */, |
| customOptions, |
| null /* clientRequestor */, |
| true /* skipJavac */); |
| } |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=100278 |
| // disabling the reporting of unnecessary declaration of thrown unchecked |
| // exceptions using the Javadoc |
| // @throws disabling can be disabled |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=219461 |
| // suppressed the warning for unchecked exceptions, using Exception instead |
| public void test0028_declared_thrown_checked_exceptions() { |
| Map customOptions = new HashMap(); |
| customOptions.put(CompilerOptions.OPTION_DocCommentSupport, |
| CompilerOptions.ENABLED); |
| customOptions.put(CompilerOptions.OPTION_ReportUnusedDeclaredThrownExceptionIncludeDocCommentReference, |
| CompilerOptions.DISABLED); |
| customOptions.put(CompilerOptions.OPTION_ReportUnusedDeclaredThrownExceptionExemptExceptionAndThrowable, |
| CompilerOptions.DISABLED); |
| runTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| "/** @throws Exception mute warning **/\n" + |
| " public void foo() throws Exception {\n" + |
| " }\n" + |
| "}\n" |
| }, |
| null /* errorOptions */, |
| new String[] { |
| CompilerOptions.OPTION_ReportUnusedDeclaredThrownException |
| } /* warningOptions */, |
| null /* ignoreOptions */, |
| false /* expectingCompilerErrors */, |
| "----------\n" + |
| "1. WARNING in X.java (at line 3)\n" + |
| " public void foo() throws Exception {\n" + |
| " ^^^^^^^^^\n" + |
| "The declared exception Exception is not actually thrown by the method foo() from type X\n" + |
| "----------\n" /* expectedCompilerLog */, |
| "" /* expectedOutputString */, |
| false /* forceExecution */, |
| null /* classLib */, |
| true /* shouldFlushOutputDirectory */, |
| null /* vmArguments */, |
| customOptions, |
| null /* clientRequestor */, |
| true /* skipJavac */); |
| } |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=100278 |
| // disabling the reporting of unnecessary declaration of thrown unchecked |
| // exceptions using SuppressWarnings |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=219461 |
| // suppressed the warning for unchecked exceptions, using Exception instead |
| public void test0029_declared_thrown_checked_exceptions() { |
| if (this.complianceLevel >= ClassFileConstants.JDK1_5) { |
| Map customOptions = new HashMap(); |
| customOptions.put(CompilerOptions.OPTION_ReportUnusedDeclaredThrownExceptionExemptExceptionAndThrowable, |
| CompilerOptions.DISABLED); |
| runTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| "@SuppressWarnings(\"all\")\n" + // no specific token |
| " public void foo() throws Exception {\n" + |
| " }\n" + |
| "}\n" |
| }, |
| null /* errorOptions */, |
| new String[] { |
| CompilerOptions.OPTION_ReportUnusedDeclaredThrownException |
| } /* warningOptions */, |
| null /* ignoreOptions */, |
| false /* expectingCompilerErrors */, |
| "" /* expectedCompilerLog */, |
| "" /* expectedOutputString */, |
| false /* forceExecution */, |
| null /* classLib */, |
| true /* shouldFlushOutputDirectory */, |
| null /* vmArguments */, |
| customOptions, |
| null /* clientRequestor */, |
| true /* skipJavac */); |
| } |
| } |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=100278 |
| // reporting unnecessary declaration of thrown unchecked exceptions as error |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=219461 |
| // suppressed the error for unchecked exceptions, using Exception instead |
| public void test0030_declared_thrown_checked_exceptions() { |
| Map customOptions = new HashMap(); |
| customOptions.put(CompilerOptions.OPTION_ReportUnusedDeclaredThrownExceptionExemptExceptionAndThrowable, |
| CompilerOptions.DISABLED); |
| runTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public void foo() throws Exception {\n" + |
| " }\n" + |
| "}\n" |
| }, |
| new String[] { |
| CompilerOptions.OPTION_ReportUnusedDeclaredThrownException |
| } /* errorOptions */, |
| null /* warningOptions */, |
| null /* ignoreOptions */, |
| true /* expectingCompilerErrors */, |
| "----------\n" + |
| "1. ERROR in X.java (at line 2)\n" + |
| " public void foo() throws Exception {\n" + |
| " ^^^^^^^^^\n" + |
| "The declared exception Exception is not actually thrown by the method foo() from type X\n" + |
| "----------\n" /* expectedCompilerLog */, |
| "" /* expectedOutputString */, |
| false /* forceExecution */, |
| null /* classLib */, |
| true /* shouldFlushOutputDirectory */, |
| null /* vmArguments */, |
| customOptions, |
| null /* clientRequestor */, |
| true /* skipJavac */); |
| } |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=100278 |
| // disabling the reporting of unnecessary declaration of thrown unchecked |
| // exceptions using the Javadoc |
| // @throws disables by default, but only exact matches work |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=219461 |
| // suppressed the warning for unchecked exceptions, using Exception instead |
| public void test0031_declared_thrown_checked_exceptions() { |
| Map customOptions = new HashMap(); |
| customOptions.put(CompilerOptions.OPTION_DocCommentSupport, |
| CompilerOptions.ENABLED); |
| customOptions.put(CompilerOptions.OPTION_ReportUnusedDeclaredThrownExceptionExemptExceptionAndThrowable, |
| CompilerOptions.DISABLED); |
| runTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| "/** @throws Throwable does not mute warning for Exception **/\n" + |
| " public void foo() throws Exception {\n" + |
| " }\n" + |
| "}\n" |
| }, |
| null /* errorOptions */, |
| new String[] { |
| CompilerOptions.OPTION_ReportUnusedDeclaredThrownException |
| } /* warningOptions */, |
| null /* ignoreOptions */, |
| false /* expectingCompilerErrors */, |
| "----------\n" + |
| "1. WARNING in X.java (at line 3)\n" + |
| " public void foo() throws Exception {\n" + |
| " ^^^^^^^^^\n" + |
| "The declared exception Exception is not actually thrown by the method foo() from type X\n" + |
| "----------\n" /* expectedCompilerLog */, |
| "" /* expectedOutputString */, |
| false /* forceExecution */, |
| null /* classLib */, |
| true /* shouldFlushOutputDirectory */, |
| null /* vmArguments */, |
| customOptions, |
| null /* clientRequestor */, |
| true /* skipJavac */); |
| } |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=100278 |
| // reporting unnecessary declaration of thrown unchecked exceptions as warning |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=219461 |
| // suppressed the warning for unchecked exceptions |
| public void test0032_declared_thrown_checked_exceptions() { |
| Map customOptions = new HashMap(); |
| customOptions.put(CompilerOptions.OPTION_ReportUnusedDeclaredThrownExceptionExemptExceptionAndThrowable, |
| CompilerOptions.DISABLED); |
| runTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public void foo() throws Error {\n" + |
| " }\n" + |
| "}\n" |
| }, |
| null /* errorOptions */, |
| new String[] { |
| CompilerOptions.OPTION_ReportUnusedDeclaredThrownException |
| } /* warningOptions */, |
| null /* ignoreOptions */, |
| false /* expectingCompilerErrors */, |
| "" /* expectedCompilerLog */, |
| "" /* expectedOutputString */, |
| false /* forceExecution */, |
| null /* classLib */, |
| true /* shouldFlushOutputDirectory */, |
| null /* vmArguments */, |
| customOptions, |
| null /* clientRequestor */, |
| true /* skipJavac */); |
| } |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=100278 |
| // reporting unnecessary declaration of thrown unchecked exceptions as warning |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=219461 |
| // suppressed the warning for unchecked exceptions, using Exception instead |
| public void test0033_declared_thrown_checked_exceptions() { |
| Map customOptions = new HashMap(); |
| customOptions.put(CompilerOptions.OPTION_ReportUnusedDeclaredThrownExceptionExemptExceptionAndThrowable, |
| CompilerOptions.DISABLED); |
| runTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public void foo() throws Exception {\n" + |
| " if (bar()) {\n" + |
| " throw new Exception();\n" + |
| " }\n" + |
| " }\n" + |
| " boolean bar() {\n" + |
| " return true;\n" + |
| " }\n" + |
| "}\n" |
| }, |
| null /* errorOptions */, |
| new String[] { |
| CompilerOptions.OPTION_ReportUnusedDeclaredThrownException |
| } /* warningOptions */, |
| null /* ignoreOptions */, |
| false /* expectingCompilerErrors */, |
| "" /* expectedCompilerLog */, |
| "" /* expectedOutputString */, |
| false /* forceExecution */, |
| null /* classLib */, |
| true /* shouldFlushOutputDirectory */, |
| null /* vmArguments */, |
| customOptions, |
| null /* clientRequestor */, |
| true /* skipJavac */); |
| } |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=216897 |
| // reporting unnecessary declaration of thrown unchecked exceptions as warning |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=219461 |
| public void test0034_declared_thrown_checked_exceptions() { |
| Map customOptions = new HashMap(); |
| customOptions.put(CompilerOptions.OPTION_ReportUnusedDeclaredThrownExceptionExemptExceptionAndThrowable, |
| CompilerOptions.DISABLED); |
| runTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static final class MyError extends Error {\n" + |
| " private static final long serialVersionUID = 1L;\n" + |
| " }\n" + |
| " public void foo() throws Throwable {\n" + |
| " try {\n" + |
| " bar();\n" + |
| " } catch (MyError e) {\n" + |
| " }\n" + |
| " }\n" + |
| " private void bar() {}\n" + |
| "}" |
| }, |
| null /* errorOptions */, |
| new String[] { |
| CompilerOptions.OPTION_ReportUnusedDeclaredThrownException |
| } /* warningOptions */, |
| null /* ignoreOptions */, |
| false /* expectingCompilerErrors */, |
| "----------\n" + |
| "1. WARNING in X.java (at line 5)\n" + |
| " public void foo() throws Throwable {\n" + |
| " ^^^^^^^^^\n" + |
| "The declared exception Throwable is not actually thrown by the method foo() from type X\n" + |
| "----------\n" /* expectedCompilerLog */, |
| "" /* expectedOutputString */, |
| false /* forceExecution */, |
| null /* classLib */, |
| true /* shouldFlushOutputDirectory */, |
| null /* vmArguments */, |
| customOptions, |
| null /* clientRequestor */, |
| true /* skipJavac */); |
| } |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=219461 |
| public void test0035_declared_thrown_checked_exceptions() { |
| Map customOptions = new HashMap(); |
| customOptions.put(CompilerOptions.OPTION_ReportUnusedDeclaredThrownExceptionExemptExceptionAndThrowable, |
| CompilerOptions.DISABLED); |
| runTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static final class MyError extends Error {\n" + |
| " private static final long serialVersionUID = 1L;\n" + |
| " }\n" + |
| " public void foo() throws Throwable {\n" + |
| " throw new MyError();\n" + |
| " }\n" + |
| "}" |
| }, |
| null /* errorOptions */, |
| new String[] { |
| CompilerOptions.OPTION_ReportUnusedDeclaredThrownException |
| } /* warningOptions */, |
| null /* ignoreOptions */, |
| false /* expectingCompilerErrors */, |
| "" /* expectedCompilerLog */, |
| "" /* expectedOutputString */, |
| false /* forceExecution */, |
| null /* classLib */, |
| true /* shouldFlushOutputDirectory */, |
| null /* vmArguments */, |
| customOptions, |
| null /* clientRequestor */, |
| true /* skipJavac */); |
| } |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=219461 |
| public void test0036_declared_thrown_checked_exceptions() { |
| runTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static class E1 extends Exception {\n" + |
| " private static final long serialVersionUID = 1L;\n" + |
| " }\n" + |
| " public static class E2 extends E1 {\n" + |
| " private static final long serialVersionUID = 1L;\n" + |
| " }\n" + |
| " public void foo() throws E1 {\n" + |
| " throw new E2();\n" + |
| " }\n" + |
| "}" |
| }, |
| null /* errorOptions */, |
| new String[] { |
| CompilerOptions.OPTION_ReportUnusedDeclaredThrownException |
| } /* warningOptions */, |
| null /* ignoreOptions */, |
| false /* expectingCompilerErrors */, |
| "" /* expectedCompilerLog */, |
| "" /* expectedOutputString */, |
| false /* forceExecution */, |
| null /* classLib */, |
| true /* shouldFlushOutputDirectory */, |
| null /* vmArguments */, |
| null /* customOptions */, |
| null /* clientRequestor */, |
| true /* skipJavac */); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=115814 |
| public void test0037() { |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " boolean b1 = args == args;\n" + |
| " boolean b2 = args != args;\n" + |
| " boolean b3 = b1 == b1;\n" + |
| " boolean b4 = b1 != b1;\n" + |
| " boolean b5 = b1 && b1;\n" + |
| " boolean b6 = b1 || b1;\n" + |
| " \n" + |
| " boolean b7 = foo() == foo();\n" + |
| " boolean b8 = foo() != foo();\n" + |
| " boolean b9 = foo() && foo();\n" + |
| " boolean b10 = foo() || foo();\n" + |
| " }\n" + |
| " static boolean foo() { return true; }\n" + |
| " Zork z;\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. WARNING in X.java (at line 3)\n" + |
| " boolean b1 = args == args;\n" + |
| " ^^^^^^^^^^^^\n" + |
| "Comparing identical expressions\n" + |
| "----------\n" + |
| "2. WARNING in X.java (at line 4)\n" + |
| " boolean b2 = args != args;\n" + |
| " ^^^^^^^^^^^^\n" + |
| "Comparing identical expressions\n" + |
| "----------\n" + |
| "3. WARNING in X.java (at line 5)\n" + |
| " boolean b3 = b1 == b1;\n" + |
| " ^^^^^^^^\n" + |
| "Comparing identical expressions\n" + |
| "----------\n" + |
| "4. WARNING in X.java (at line 6)\n" + |
| " boolean b4 = b1 != b1;\n" + |
| " ^^^^^^^^\n" + |
| "Comparing identical expressions\n" + |
| "----------\n" + |
| "5. WARNING in X.java (at line 7)\n" + |
| " boolean b5 = b1 && b1;\n" + |
| " ^^^^^^^^\n" + |
| "Comparing identical expressions\n" + |
| "----------\n" + |
| "6. WARNING in X.java (at line 8)\n" + |
| " boolean b6 = b1 || b1;\n" + |
| " ^^^^^^^^\n" + |
| "Comparing identical expressions\n" + |
| "----------\n" + |
| "7. ERROR in X.java (at line 16)\n" + |
| " Zork z;\n" + |
| " ^^^^\n" + |
| "Zork cannot be resolved to a type\n" + |
| "----------\n"); |
| } |
| |
| /** |
| * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=276740" |
| */ |
| public void test0038() { |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " boolean b1 = 1 == 1;\n" + |
| " boolean b2 = 1 != 1;\n" + |
| " boolean b3 = 1 == 1.0;\n" + |
| " boolean b4 = 1 != 1.0;\n" + |
| " boolean b5 = 1 == 2;\n" + |
| " boolean b6 = 1 != 2;\n" + |
| " boolean b7 = 1 == 2.0;\n" + |
| " boolean b8 = 1 != 2.0;\n" + |
| " final short s1 = 1;\n" + |
| " final short s2 = 2;\n" + |
| " boolean b9 = 1 == s1;\n" + |
| " boolean b10 = 1 == s2;\n" + |
| " boolean b91 = 1 != s1;\n" + |
| " boolean b101 = 1 != s2;\n" + |
| " final long l1 = 1;\n" + |
| " final long l2 = 2;\n" + |
| " boolean b11 = 1 == l1;\n" + |
| " boolean b12 = 1 == l2;\n" + |
| " boolean b111 = 1 != l1;\n" + |
| " boolean b121 = 1 != l2;\n" + |
| " boolean b13 = s1 == l1;\n" + |
| " boolean b14 = s1 == l2;\n" + |
| " boolean b15 = s1 != l1;\n" + |
| " boolean b16 = s1 != l2;\n" + |
| " }\n" + |
| " Zork z;\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. WARNING in X.java (at line 3)\n" + |
| " boolean b1 = 1 == 1;\n" + |
| " ^^^^^^\n" + |
| "Comparing identical expressions\n" + |
| "----------\n" + |
| "2. WARNING in X.java (at line 4)\n" + |
| " boolean b2 = 1 != 1;\n" + |
| " ^^^^^^\n" + |
| "Comparing identical expressions\n" + |
| "----------\n" + |
| "3. WARNING in X.java (at line 5)\n" + |
| " boolean b3 = 1 == 1.0;\n" + |
| " ^^^^^^^^\n" + |
| "Comparing identical expressions\n" + |
| "----------\n" + |
| "4. WARNING in X.java (at line 6)\n" + |
| " boolean b4 = 1 != 1.0;\n" + |
| " ^^^^^^^^\n" + |
| "Comparing identical expressions\n" + |
| "----------\n" + |
| "5. WARNING in X.java (at line 13)\n" + |
| " boolean b9 = 1 == s1;\n" + |
| " ^^^^^^^\n" + |
| "Comparing identical expressions\n" + |
| "----------\n" + |
| "6. WARNING in X.java (at line 15)\n" + |
| " boolean b91 = 1 != s1;\n" + |
| " ^^^^^^^\n" + |
| "Comparing identical expressions\n" + |
| "----------\n" + |
| "7. WARNING in X.java (at line 19)\n" + |
| " boolean b11 = 1 == l1;\n" + |
| " ^^^^^^^\n" + |
| "Comparing identical expressions\n" + |
| "----------\n" + |
| "8. WARNING in X.java (at line 21)\n" + |
| " boolean b111 = 1 != l1;\n" + |
| " ^^^^^^^\n" + |
| "Comparing identical expressions\n" + |
| "----------\n" + |
| "9. WARNING in X.java (at line 23)\n" + |
| " boolean b13 = s1 == l1;\n" + |
| " ^^^^^^^^\n" + |
| "Comparing identical expressions\n" + |
| "----------\n" + |
| "10. WARNING in X.java (at line 25)\n" + |
| " boolean b15 = s1 != l1;\n" + |
| " ^^^^^^^^\n" + |
| "Comparing identical expressions\n" + |
| "----------\n" + |
| "11. ERROR in X.java (at line 28)\n" + |
| " Zork z;\n" + |
| " ^^^^\n" + |
| "Zork cannot be resolved to a type\n" + |
| "----------\n"); |
| } |
| |
| /** |
| * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=276741" |
| */ |
| public void test0039() { |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public void gain(String[] args) {\n" + |
| " boolean b1 = this == this;\n" + |
| " boolean b2 = this != this;\n" + |
| " boolean b3 = this != new X();\n" + |
| " boolean b4 = this == new X();\n" + |
| " }\n" + |
| " Zork z;\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. WARNING in X.java (at line 3)\n" + |
| " boolean b1 = this == this;\n" + |
| " ^^^^^^^^^^^^\n" + |
| "Comparing identical expressions\n" + |
| "----------\n" + |
| "2. WARNING in X.java (at line 4)\n" + |
| " boolean b2 = this != this;\n" + |
| " ^^^^^^^^^^^^\n" + |
| "Comparing identical expressions\n" + |
| "----------\n" + |
| "3. ERROR in X.java (at line 8)\n" + |
| " Zork z;\n" + |
| " ^^^^\n" + |
| "Zork cannot be resolved to a type\n" + |
| "----------\n"); |
| } |
| /** |
| * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=281776" |
| * We now tolerate comparison of float and double entities against |
| * themselves as a legitimate idiom for NaN checking. |
| */ |
| public void test0040() { |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " double var = Double.NaN;\n" + |
| " if(var != var) {\n" + |
| " System.out.println(\"NaN\");\n" + |
| " }\n" + |
| " float varf = 10;\n" + |
| " if(varf != varf) {\n" + |
| " System.out.println(\"NaN\");\n" + |
| " }\n" + |
| " }\n" + |
| " Zork z;\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 12)\n" + |
| " Zork z;\n" + |
| " ^^^^\n" + |
| "Zork cannot be resolved to a type\n" + |
| "----------\n"); |
| } |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=251227 |
| public void test0041() { |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " System.out.println(1.0 == 1.0);\n" + |
| " System.out.println(1.0f == 1.0f);\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. WARNING in X.java (at line 3)\n" + |
| " System.out.println(1.0 == 1.0);\n" + |
| " ^^^^^^^^^^\n" + |
| "Comparing identical expressions\n" + |
| "----------\n" + |
| "2. WARNING in X.java (at line 4)\n" + |
| " System.out.println(1.0f == 1.0f);\n" + |
| " ^^^^^^^^^^^^\n" + |
| "Comparing identical expressions\n" + |
| "----------\n"); |
| } |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=248897 |
| public void test0042() { |
| if (this.complianceLevel < ClassFileConstants.JDK1_5) { |
| return; |
| } |
| runTest( |
| new String[] { |
| "Test.java", |
| "public class Test {\n" + |
| " public static void main(String[] args) {\n" + |
| " final String var = \"Hello\";\n" + |
| " final int local = 10;\n" + |
| " @ZAnn(var + local)\n" + |
| " class X {}\n" + |
| " new X();\n" + |
| " }\n" + |
| "}\n" + |
| "@interface ZAnn {\n" + |
| " String value();\n" + |
| "}\n" |
| }, |
| null /* errorOptions */, |
| new String[] { |
| CompilerOptions.OPTION_ReportUnusedLocal |
| } /* warningOptions */, |
| null /* ignoreOptions */, |
| false /* expectingCompilerErrors */, |
| "" /* expectedCompilerLog */, |
| "" /* expectedOutputString */, |
| false /* forceExecution */, |
| null /* classLib */, |
| true /* shouldFlushOutputDirectory */, |
| null /* vmArguments */, |
| null /* customOptions */, |
| null /* clientRequestor */, |
| true /* skipJavac */); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=313825 |
| public void test0043() { |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "class X {\n" + |
| " void foo(int i) {\n" + |
| " foo((a));\n" + |
| " }\n" + |
| "}" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 3)\n" + |
| " foo((a));\n" + |
| " ^\n" + |
| "a cannot be resolved to a variable\n" + |
| "----------\n"); |
| } |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=310264 |
| public void test0044() { |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "class X {\n" + |
| " volatile int x;\n" + |
| " int nvx;\n" + |
| " void foo(int i) {\n" + |
| " x = x;\n" + |
| " nvx = nvx;\n" + |
| " }\n" + |
| "}" |
| }, |
| "----------\n" + |
| "1. WARNING in X.java (at line 6)\n" + |
| " nvx = nvx;\n" + |
| " ^^^^^^^^^\n" + |
| "The assignment to variable nvx has no effect\n" + |
| "----------\n"); |
| } |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=310264 |
| public void test0045() { |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "class X {\n" + |
| " volatile int x = this.x;\n" + |
| " int nvx = this.nvx;\n" + |
| " void foo(int i) {\n" + |
| " }\n" + |
| "}" |
| }, |
| "----------\n" + |
| "1. WARNING in X.java (at line 2)\n" + |
| " volatile int x = this.x;\n" + |
| " ^^^^^^^^^^\n" + |
| "The assignment to variable x has no effect\n" + |
| "----------\n" + |
| "2. WARNING in X.java (at line 3)\n" + |
| " int nvx = this.nvx;\n" + |
| " ^^^^^^^^^^^^^^\n" + |
| "The assignment to variable nvx has no effect\n" + |
| "----------\n"); |
| } |
| } |