update jdt.core & tests to I20130911-2000
diff --git a/org.eclipse.jdt.core.tests.compiler/META-INF/MANIFEST.MF b/org.eclipse.jdt.core.tests.compiler/META-INF/MANIFEST.MF
index 50ad2b4..6253b9d 100644
--- a/org.eclipse.jdt.core.tests.compiler/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.core.tests.compiler/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.jdt.core.tests.compiler
-Bundle-Version: 3.8.3
+Bundle-Version: 3.9.0
Bundle-ClassPath: jdtcoretestscompiler.jar
Bundle-Vendor: %providerName
Bundle-Localization: plugin
diff --git a/org.eclipse.jdt.core.tests.compiler/pom.xml b/org.eclipse.jdt.core.tests.compiler/pom.xml
index 9b3bc2f..d36391b 100644
--- a/org.eclipse.jdt.core.tests.compiler/pom.xml
+++ b/org.eclipse.jdt.core.tests.compiler/pom.xml
@@ -12,12 +12,18 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
- <artifactId>eclipse.jdt.core</artifactId>
+ <artifactId>tests-pom</artifactId>
<groupId>eclipse.jdt.core</groupId>
<version>4.4.0-SNAPSHOT</version>
+ <relativePath>../tests-pom/</relativePath>
</parent>
<groupId>org.eclipse.jdt</groupId>
<artifactId>org.eclipse.jdt.core.tests.compiler</artifactId>
- <version>3.8.3-SNAPSHOT</version>
- <packaging>eclipse-plugin</packaging>
+ <version>3.9.0-SNAPSHOT</version>
+ <packaging>eclipse-test-plugin</packaging>
+
+ <properties>
+ <defaultSigning-excludeInnerJars>true</defaultSigning-excludeInnerJars>
+ </properties>
+
</project>
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest.java
index bcc0eb7..a10fc72 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest.java
@@ -14,6 +14,7 @@
* bug 405706 - Eclipse compiler fails to give compiler error when return type is a inferred generic
* Bug 408441 - Type mismatch using Arrays.asList with 3 or more implementations of an interface with the interface type as the last parameter
* Bug 413958 - Function override returning inherited Generic Type
+ * Bug 415734 - Eclipse gives compilation error calling method with an inferred generic return type
*******************************************************************************/
package org.eclipse.jdt.core.tests.compiler.regression;
@@ -3266,4 +3267,29 @@
"Type mismatch: cannot convert from ReadOnlyWrapper<TestA,TestB> to WritableWrapper<TestA2,TestB>\n" +
"----------\n");
}
+public void testBug415734() {
+ runNegativeTest(
+ new String[] {
+ "Compile.java",
+ "import java.util.ArrayList;\n" +
+ "import java.util.List;\n" +
+ "\n" +
+ "public class Compile {\n" +
+ "\n" +
+ " public <T, Exp extends List<T>> Exp typedNull() {\n" +
+ " return null;\n" +
+ " }\n" +
+ "\n" +
+ " public void call() {\n" +
+ " ArrayList<String> list = typedNull();\n" +
+ " }\n" +
+ "}\n"
+ },
+ "----------\n" +
+ "1. ERROR in Compile.java (at line 11)\n" +
+ " ArrayList<String> list = typedNull();\n" +
+ " ^^^^^^^^^^^\n" +
+ "Type mismatch: cannot convert from List<Object> to ArrayList<String>\n" +
+ "----------\n");
+}
}
\ No newline at end of file
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/MethodVerifyTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/MethodVerifyTest.java
index b8ad03f..c1d7514 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/MethodVerifyTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/MethodVerifyTest.java
@@ -11,6 +11,7 @@
* bug 388795 - [compiler] detection of name clash depends on order of super interfaces
* bug 395681 - [compiler] Improve simulation of javac6 behavior from bug 317719 after fixing bug 388795
* bug 409473 - [compiler] JDT cannot compile against JRE 1.8
+ * Bug 410325 - [1.7][compiler] Generified method override different between javac and eclipse compiler
* Andy Clement - Contribution for
* bug 406928 - computation of inherited methods seems damaged (affecting @Overrides)
*******************************************************************************/
@@ -13839,4 +13840,94 @@
"public abstract class Foo<E> implements java.util.List<E> { } "
});
}
+// https://bugs.eclipse.org/410325 - [1.7][compiler] Generified method override different between javac and eclipse compiler
+public void testBug410325() {
+ runConformTest(
+ new String[] {
+ "Main.java",
+ "public class Main {\n" +
+ " public static void main(String[] args) {\n" +
+ " F3 f3 = new F3();\n" +
+ " SubSub sub = new SubSub();\n" +
+ " sub.foo(f3);\n" +
+ "\n" +
+ " Sub<F3> sub2 = sub;\n" +
+ " Base<F3> base = sub;\n" +
+ " sub2.foo(f3);\n" +
+ " base.foo(f3);\n" +
+ "\n" +
+ " F2 f2 = new F2();\n" +
+ " sub2.foo(f2);\n" +
+ " }\n" +
+ "\n" +
+ " public static class F1 {\n" +
+ " }\n" +
+ "\n" +
+ " public static class F2 extends F1 {\n" +
+ " }\n" +
+ "\n" +
+ " public static class F3 extends F2 {\n" +
+ " public void bar() {\n" +
+ " System.out.println(\"bar in F3\");\n" +
+ " }\n" +
+ " }\n" +
+ "\n" +
+ " public static abstract class Base<T extends F1> {\n" +
+ " public abstract void foo(T bar);\n" +
+ " }\n" +
+ "\n" +
+ " public static abstract class Sub<T extends F2> extends Base<T> {\n" +
+ " @Override\n" +
+ " public void foo(F2 bar) {\n" +
+ " System.out.println(getClass().getSimpleName() + \": F2 + \"\n" +
+ " + bar.getClass().getSimpleName());\n" +
+ " }\n" +
+ " }\n" +
+ "\n" +
+ " public static class SubSub extends Sub<F3> {\n" +
+ " }\n" +
+ "}"
+ });
+}
+// https://bugs.eclipse.org/410325 - [1.7][compiler] Generified method override different between javac and eclipse compiler
+// test from duplicate bug 411811
+public void testBug411811() {
+ runConformTest(
+ new String[] {
+ "FaultyType.java",
+ " class ParamType {}\n" +
+ "\n" +
+ " abstract class AbstractType<T extends ParamType> {\n" +
+ " public abstract void foo(T t);\n" +
+ " }\n" +
+ "\n" +
+ " abstract class SubAbstractType<T extends ParamType> extends AbstractType<T> {\n" +
+ " @Override public void foo(ParamType t) {}\n" +
+ " }\n" +
+ "\n" +
+ " class SubParamType extends ParamType {}\n" +
+ " \n" +
+ "public class FaultyType extends SubAbstractType<SubParamType> {}"
+ });
+}
+// https://bugs.eclipse.org/410325 - [1.7][compiler] Generified method override different between javac and eclipse compiler
+// test from duplicate bug 415600
+public void testBug415600() {
+ runConformTest(
+ new String[] {
+ "A.java",
+ "import java.io.Reader;\n" +
+ "import java.io.StringReader;\n" +
+ "\n" +
+ "public abstract class A<E extends Reader> {\n" +
+ " protected abstract void create(E element);\n" +
+ "}\n" +
+ "\n" +
+ "abstract class B<T extends Reader> extends A<T> {\n" +
+ " public void create(Reader element) { }\n" +
+ "}\n" +
+ "\n" +
+ "class C extends B<StringReader> { }\n"
+ });
+}
}
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/NullAnnotationTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/NullAnnotationTest.java
index d0f020c..2b58996 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/NullAnnotationTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/NullAnnotationTest.java
@@ -7,6 +7,9 @@
*
* Contributors:
* Stephan Herrmann - initial API and implementation
+ * Till Brychcy <register.eclipse@brychcy.de> - Contribution for
+ * Bug 415413 - [compiler][null] NullpointerException in Null Analysis caused by interaction of LoopingFlowContext and FinallyFlowContext
+ * Bug 415269 - [compiler][null] NonNullByDefault is not always inherited to nested classes
*******************************************************************************/
package org.eclipse.jdt.core.tests.compiler.regression;
@@ -6229,4 +6232,221 @@
options,
"");
}
+
+public void testBug413460() {
+ runConformTestWithLibs(
+ new String[] {
+ "Class2.java",
+ "\n" +
+ "@org.eclipse.jdt.annotation.NonNullByDefault\n" +
+ "public class Class2 {\n" +
+ " public class Class3 {\n" +
+ " public Class3(String nonNullArg) {\n" +
+ " assert nonNullArg != null;\n" +
+ " }\n" +
+ " }\n" +
+ "\n" +
+ " public Class2(String nonNullArg) {\n" +
+ " assert nonNullArg != null;\n" +
+ " }\n" +
+ "\n" +
+ " public static Class2 create(String nonNullArg) {\n" +
+ " return new Class2(nonNullArg);\n" +
+ " }\n" +
+ "}\n"
+ },
+ getCompilerOptions(),
+ "");
+ runNegativeTestWithLibs(false,
+ new String[] {
+ "Class1.java",
+ "public class Class1 {\n" +
+ " public static Class2 works() {\n" +
+ " return Class2.create(null);\n" +
+ " }\n" +
+ "\n" +
+ " public static Class2 bug() {\n" +
+ " return new Class2(null);\n" +
+ " }\n" +
+ "\n" +
+ " public static Class2.Class3 qualifiedbug() {\n" +
+ " return new Class2(\"\").new Class3(null);\n" +
+ " }\n" +
+ "}\n"
+ },
+ getCompilerOptions(),
+ "----------\n" +
+ "1. ERROR in Class1.java (at line 3)\n" +
+ " return Class2.create(null);\n" +
+ " ^^^^\n" +
+ "Null type mismatch: required \'@NonNull String\' but the provided value is null\n" +
+ "----------\n" +
+ "2. ERROR in Class1.java (at line 7)\n" +
+ " return new Class2(null);\n" +
+ " ^^^^\n" +
+ "Null type mismatch: required \'@NonNull String\' but the provided value is null\n" +
+ "----------\n" +
+ "3. ERROR in Class1.java (at line 11)\n" +
+ " return new Class2(\"\").new Class3(null);\n" +
+ " ^^^^\n" +
+ "Null type mismatch: required \'@NonNull String\' but the provided value is null\n" +
+ "----------\n");
+}
+// Bug 415413 - [compiler][null] NullpointerException in Null Analysis caused by interaction of LoopingFlowContext and FinallyFlowContext
+public void testBug415413() {
+ Map options = getCompilerOptions();
+ runNegativeTestWithLibs(
+ new String[]{
+ "ClassF.java",
+ "import org.eclipse.jdt.annotation.NonNull;\n" +
+ "public class ClassF {\n" +
+ " public static void needNonNull(@NonNull Object o) {\n" +
+ " o.hashCode();\n" +
+ " }\n" +
+ " public void method() {\n" +
+ " for (int j = 0; j < 1; j++) {\n" +
+ " try {\n" +
+ " this.hashCode();\n" +
+ " } finally {\n" +
+ " for (int i = 0; i < 1; i++) {\n" +
+ " Object o = null;\n" +
+ " needNonNull(o);\n" +
+ " }\n" +
+ " }\n" +
+ " }\n" +
+ " }\n" +
+ "}\n"
+ },
+ options,
+ "----------\n" +
+ "1. ERROR in ClassF.java (at line 13)\n" +
+ " needNonNull(o);\n" +
+ " ^\n" +
+ "Null type mismatch: required \'@NonNull Object\' but the provided value is inferred as @Nullable\n" +
+ "----------\n");
+}
+// Bug 415413 - [compiler][null] NullpointerException in Null Analysis caused by interaction of LoopingFlowContext and FinallyFlowContext
+// Variant: non-null before the loop and at the end of the loop body
+public void testBug415413a() {
+ Map options = getCompilerOptions();
+ runConformTestWithLibs(
+ new String[]{
+ "ClassF.java",
+ "import org.eclipse.jdt.annotation.NonNull;\n" +
+ "public class ClassF {\n" +
+ " public static void needNonNull(@NonNull Object o) {\n" +
+ " o.hashCode();\n" +
+ " }\n" +
+ " public void method() {\n" +
+ " for (int j = 0; j < 1; j++) {\n" +
+ " try {\n" +
+ " this.hashCode();\n" +
+ " } finally {\n" +
+ " Object o = new Object();\n" +
+ " for (int i = 0; i < 1; i++) {\n" +
+ " needNonNull(o);\n" +
+ " o = new Object();\n" +
+ " }\n" +
+ " }\n" +
+ " }\n" +
+ " }\n" +
+ "}\n"
+ },
+ options,
+ "");
+}
+// Bug 415413 - [compiler][null] NullpointerException in Null Analysis caused by interaction of LoopingFlowContext and FinallyFlowContext
+// Variant: null before the loop and non-null at the end of the loop body
+public void testBug415413b() {
+ Map options = getCompilerOptions();
+ runNegativeTestWithLibs(
+ new String[]{
+ "ClassF.java",
+ "import org.eclipse.jdt.annotation.NonNull;\n" +
+ "public class ClassF {\n" +
+ " public static void needNonNull(@NonNull Object o) {\n" +
+ " o.hashCode();\n" +
+ " }\n" +
+ " public void method() {\n" +
+ " for (int j = 0; j < 1; j++) {\n" +
+ " try {\n" +
+ " this.hashCode();\n" +
+ " } finally {\n" +
+ " Object o = null;\n" +
+ " for (int i = 0; i < 1; i++) {\n" +
+ " needNonNull(o);\n" +
+ " o = new Object();\n" +
+ " }\n" +
+ " }\n" +
+ " }\n" +
+ " }\n" +
+ "}\n"
+ },
+ options,
+ "----------\n" +
+ "1. ERROR in ClassF.java (at line 13)\n" +
+ " needNonNull(o);\n" +
+ " ^\n" +
+ "Null type mismatch: required \'@NonNull Object\' but the provided value is inferred as @Nullable\n" +
+ "----------\n");
+}
+// Bug 415413 - [compiler][null] NullpointerException in Null Analysis caused by interaction of LoopingFlowContext and FinallyFlowContext
+// Variant: non-null before the loop and null at the end of the loop body
+public void testBug415413c() {
+ Map options = getCompilerOptions();
+ runNegativeTestWithLibs(
+ new String[]{
+ "ClassF.java",
+ "import org.eclipse.jdt.annotation.NonNull;\n" +
+ "public class ClassF {\n" +
+ " public static void needNonNull(@NonNull Object o) {\n" +
+ " o.hashCode();\n" +
+ " }\n" +
+ " public void method() {\n" +
+ " for (int j = 0; j < 1; j++) {\n" +
+ " try {\n" +
+ " this.hashCode();\n" +
+ " } finally {\n" +
+ " Object o = new Object();\n" +
+ " for (int i = 0; i < 1; i++) {\n" +
+ " needNonNull(o);\n" +
+ " o = null;\n" +
+ " }\n" +
+ " }\n" +
+ " }\n" +
+ " }\n" +
+ "}\n"
+ },
+ options,
+ "----------\n" +
+ "1. ERROR in ClassF.java (at line 13)\n" +
+ " needNonNull(o);\n" +
+ " ^\n" +
+ "Null type mismatch: required \'@NonNull Object\' but the provided value is inferred as @Nullable\n" +
+ "----------\n");
+}
+public void testBug_415269() {
+ Map options = getCompilerOptions();
+ runConformTestWithLibs(
+ new String[]{
+ "Y.java",
+ "import org.eclipse.jdt.annotation.NonNull;\n"+
+ "public class Y {\n"+
+ " public static class C implements X.I {\n"+
+ " public void method(@NonNull Object arg) {\n"+
+ " }\n"+
+ " }\n"+
+ "}\n",
+ "X.java",
+ "import org.eclipse.jdt.annotation.NonNullByDefault;\n"+
+ "@NonNullByDefault\n"+
+ "public class X {\n"+
+ " public interface I {\n"+
+ " public void method(Object arg);\n"+
+ " }\n"+
+ "}\n"
+ },
+ options,
+ "");
+}
}
diff --git a/org.eclipse.jdt.core.tests.model/META-INF/MANIFEST.MF b/org.eclipse.jdt.core.tests.model/META-INF/MANIFEST.MF
index 44bc1c7..3ced8ea 100644
--- a/org.eclipse.jdt.core.tests.model/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.core.tests.model/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.jdt.core.tests.model;singleton:=true
-Bundle-Version: 3.8.3
+Bundle-Version: 3.9.0
Bundle-ClassPath: jdtcoretestsmodel.jar
Bundle-Vendor: %providerName
Bundle-Localization: plugin
diff --git a/org.eclipse.jdt.core.tests.model/pom.xml b/org.eclipse.jdt.core.tests.model/pom.xml
index d893db6..611a963 100644
--- a/org.eclipse.jdt.core.tests.model/pom.xml
+++ b/org.eclipse.jdt.core.tests.model/pom.xml
@@ -12,14 +12,19 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
- <artifactId>eclipse.jdt.core</artifactId>
+ <artifactId>tests-pom</artifactId>
<groupId>eclipse.jdt.core</groupId>
<version>4.4.0-SNAPSHOT</version>
+ <relativePath>../tests-pom/</relativePath>
</parent>
<groupId>org.eclipse.jdt</groupId>
<artifactId>org.eclipse.jdt.core.tests.model</artifactId>
- <version>3.8.3-SNAPSHOT</version>
- <packaging>eclipse-plugin</packaging>
+ <version>3.9.0-SNAPSHOT</version>
+ <packaging>eclipse-test-plugin</packaging>
+
+ <properties>
+ <defaultSigning-excludeInnerJars>true</defaultSigning-excludeInnerJars>
+ </properties>
<build>
<plugins>
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/AllocationExpression.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/AllocationExpression.java
index 3c90929..8159393 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/AllocationExpression.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/AllocationExpression.java
@@ -22,6 +22,8 @@
* bug 403147 - [compiler][null] FUP of bug 400761: consolidate interaction between unboxing, NPE, and deferred checking
* Jesper S Moller <jesper@selskabet.org> - Contributions for
* bug 378674 - "The method can be declared as static" is wrong
+ * Till Brychcy - Contributions for
+ * bug 413460 - NonNullByDefault is not inherited to Constructors when accessed via Class File
*******************************************************************************/
package org.eclipse.jdt.internal.compiler.ast;
@@ -30,6 +32,7 @@
import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
import org.eclipse.jdt.internal.compiler.codegen.*;
import org.eclipse.jdt.internal.compiler.flow.*;
+import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
import org.eclipse.jdt.internal.compiler.impl.Constant;
import org.eclipse.jdt.internal.compiler.lookup.*;
import org.eclipse.jdt.internal.compiler.problem.ProblemReporter;
@@ -535,6 +538,16 @@
if (!isDiamond && this.resolvedType.isParameterizedTypeWithActualArguments()) {
checkTypeArgumentRedundancy((ParameterizedTypeBinding) this.resolvedType, null, argumentTypes, scope);
}
+ final CompilerOptions compilerOptions = scope.compilerOptions();
+ if (compilerOptions.isAnnotationBasedNullAnalysisEnabled && (this.binding.tagBits & TagBits.IsNullnessKnown) == 0) {
+//{ObjectTeams: added 2nd arg:
+/* orig:
+ new ImplicitNullAnnotationVerifier(compilerOptions.inheritNullAnnotations)
+ :giro */
+ new ImplicitNullAnnotationVerifier(compilerOptions.inheritNullAnnotations, scope.environment())
+// SH}
+ .checkImplicitNullAnnotations(this.binding, null/*srcMethod*/, false, scope);
+ }
//{ObjectTeams: may need to wrap the resolved type
this.resolvedType = allocationType =
(ReferenceBinding)RoleTypeCreator.maybeWrapUnqualifiedRoleType(allocationType, scope, this);
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedAllocationExpression.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedAllocationExpression.java
index e999aa0..caf490e 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedAllocationExpression.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedAllocationExpression.java
@@ -21,6 +21,8 @@
* bug 403147 - [compiler][null] FUP of bug 400761: consolidate interaction between unboxing, NPE, and deferred checking
* Jesper S Moller <jesper@selskabet.org> - Contributions for
* bug 378674 - "The method can be declared as static" is wrong
+ * Till Brychcy - Contributions for
+ * bug 413460 - NonNullByDefault is not inherited to Constructors when accessed via Class File
******************************************************************************/
package org.eclipse.jdt.internal.compiler.ast;
@@ -30,10 +32,12 @@
import org.eclipse.jdt.internal.compiler.codegen.Opcodes;
import org.eclipse.jdt.internal.compiler.flow.FlowContext;
import org.eclipse.jdt.internal.compiler.flow.FlowInfo;
+import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
import org.eclipse.jdt.internal.compiler.impl.Constant;
import org.eclipse.jdt.internal.compiler.lookup.Binding;
import org.eclipse.jdt.internal.compiler.lookup.BlockScope;
import org.eclipse.jdt.internal.compiler.lookup.ExtraCompilerModifiers;
+import org.eclipse.jdt.internal.compiler.lookup.ImplicitNullAnnotationVerifier;
import org.eclipse.jdt.internal.compiler.lookup.LocalTypeBinding;
import org.eclipse.jdt.internal.compiler.lookup.MethodBinding;
import org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding;
@@ -337,7 +341,23 @@
if (this.anonymousType == null && this.enclosingInstance == null) {
return super.resolveType(scope);
}
-
+ TypeBinding result=resolveTypeForQualifiedAllocationExpression(scope);
+ if(result != null) {
+ final CompilerOptions compilerOptions = scope.compilerOptions();
+ if (compilerOptions.isAnnotationBasedNullAnalysisEnabled && (this.binding.tagBits & TagBits.IsNullnessKnown) == 0) {
+//{ObjectTeams: added 2nd arg:
+/* orig:
+ new ImplicitNullAnnotationVerifier(compilerOptions.inheritNullAnnotations)
+ :giro */
+ new ImplicitNullAnnotationVerifier(compilerOptions.inheritNullAnnotations, scope.environment())
+// SH}
+ .checkImplicitNullAnnotations(this.binding, null/*srcMethod*/, false, scope);
+ }
+ }
+ return result;
+ }
+
+ private TypeBinding resolveTypeForQualifiedAllocationExpression(BlockScope scope) {
// Propagate the type checking to the arguments, and checks if the constructor is defined.
// ClassInstanceCreationExpression ::= Primary '.' 'new' SimpleName '(' ArgumentListopt ')' ClassBodyopt
// ClassInstanceCreationExpression ::= Name '.' 'new' SimpleName '(' ArgumentListopt ')' ClassBodyopt
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/LoopingFlowContext.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/LoopingFlowContext.java
index 2befb45..22cf760 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/LoopingFlowContext.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/LoopingFlowContext.java
@@ -18,6 +18,7 @@
* bug 376263 - Bogus "Potential null pointer access" warning
* bug 403147 - [compiler][null] FUP of bug 400761: consolidate interaction between unboxing, NPE, and deferred checking
* bug 406384 - Internal error with I20130413
+ * Bug 415413 - [compiler][null] NullpointerException in Null Analysis caused by interaction of LoopingFlowContext and FinallyFlowContext
*******************************************************************************/
package org.eclipse.jdt.internal.compiler.flow;
@@ -262,7 +263,7 @@
if (nullStatus != FlowInfo.NON_NULL) {
this.parent.recordNullityMismatch(scope, (Expression)location, this.providedExpectedTypes[i][0], this.providedExpectedTypes[i][1], nullStatus);
}
- break;
+ continue; // no more delegation to parent
case EXIT_RESOURCE:
FakedTrackingVariable trackingVar = local.closeTracker;
if (trackingVar != null) {
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier15.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier15.java
index 3e5ddfd..4e70de2 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier15.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier15.java
@@ -17,6 +17,7 @@
* bug 395002 - Self bound generic class doesn't resolve bounds properly for wildcards for certain parametrisation.
* bug 395681 - [compiler] Improve simulation of javac6 behavior from bug 317719 after fixing bug 388795
* bug 409473 - [compiler] JDT cannot compile against JRE 1.8
+ * Bug 410325 - [1.7][compiler] Generified method override different between javac and eclipse compiler
*******************************************************************************/
package org.eclipse.jdt.internal.compiler.lookup;
@@ -302,6 +303,23 @@
boolean isAbstract = methods[i].isAbstract() || methods[i].declaringClass.isInterface();
if (!isAbstract) {
if (concreteMethod != null) {
+ // https://bugs.eclipse.org/195802 with https://bugs.eclipse.org/410325
+ // If a replace method (from findReplacedMethod()) is the rawified version of another
+ // don't count this as duplicates:
+ // (Not asking ParameterizedGenericMethodBinding.isRawMethod(),
+ // because that is true only for methods of a RawTypeBinding,
+ // but here we look for rawness regarding the method's type variables).
+ if (concreteMethod.declaringClass == methods[i].declaringClass
+ && concreteMethod.typeVariables.length != methods[i].typeVariables.length)
+ {
+ if (concreteMethod.typeVariables == Binding.NO_TYPE_VARIABLES
+ && concreteMethod.original() == methods[i])
+ continue;
+ if (methods[i].typeVariables == Binding.NO_TYPE_VARIABLES
+ && methods[i].original() == concreteMethod)
+ continue;
+ }
+
problemReporter().duplicateInheritedMethods(this.type, concreteMethod, methods[i]);
continueInvestigation = false;
}
@@ -639,6 +657,8 @@
* mark as isOverridden
* - any skippable method as defined above iff it is actually overridden by the specific method (disregarding visibility etc.)
* Note, that 'idx' corresponds to the position of 'general' in the arrays 'skip' and 'isOverridden'
+ * TODO(stephan) currently (as of Bug 410325), the boarder between skip and isOverridden is blurred,
+ * should reassess after more experience with this patch.
*/
boolean isSkippableOrOverridden(MethodBinding specific, MethodBinding general, boolean[] skip, boolean[] isOverridden, int idx) {
boolean specificIsInterface = specific.declaringClass.isInterface();
@@ -649,10 +669,10 @@
isOverridden[idx] = true;
return true;
}
- } else if (specificIsInterface == generalIsInterface) {
- if (isParameterSubsignature(specific, general)) {
+ } else if (specificIsInterface == generalIsInterface) {
+ if (specific.declaringClass.isCompatibleWith(general.declaringClass) && isMethodSubsignature(specific, general)) {
skip[idx] = true;
- isOverridden[idx] = specific.declaringClass.isCompatibleWith(general.declaringClass);
+ isOverridden[idx] = true;
return true;
}
}
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.java
index ad49a2d..16f1292 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.java
@@ -23,6 +23,8 @@
* bug 388281 - [compiler][null] inheritance of null annotations as an option
* bug 331649 - [compiler][null] consider null annotations for fields
* bug 380896 - [compiler][null] Enum constants not recognised as being NonNull.
+ * Till Brychcy - Contributions for
+ * bug 415269 - NonNullByDefault is not always inherited to nested classes
*******************************************************************************/
package org.eclipse.jdt.internal.compiler.lookup;
@@ -1663,7 +1665,7 @@
this.scope.buildMethods();
}
-private void initializeNullDefault() {
+private int getNullDefault() {
// ensure nullness defaults are initialized at all enclosing levels:
switch (this.nullnessDefaultInitialized) {
case 0:
@@ -1673,6 +1675,7 @@
getPackage().isViewedAsDeprecated(); // initialize annotations
this.nullnessDefaultInitialized = 2;
}
+ return this.defaultNullness;
}
/**
@@ -2034,7 +2037,6 @@
// enum constants neither have a type declaration nor can they be null
field.tagBits |= TagBits.AnnotationNonNull;
} else {
- initializeNullDefault();
if (hasNonNullDefault()) {
field.fillInDefaultNonNullness(fieldDecl, initializationScope);
}
@@ -2393,7 +2395,7 @@
return method;
}
private void createArgumentBindings(MethodBinding method, CompilerOptions compilerOptions) {
- initializeNullDefault();
+ getNullDefault(); // ensure initialized
AbstractMethodDeclaration methodDecl = method.sourceMethod();
if (methodDecl != null) {
// while creating argument bindings we also collect explicit null annotations:
@@ -2465,7 +2467,7 @@
// return: should caller continue searching?
protected boolean checkRedundantNullnessDefaultOne(ASTNode location, Annotation[] annotations, long annotationTagBits) {
- int thisDefault = this.defaultNullness;
+ int thisDefault = getNullDefault();
if (thisDefault == NONNULL_BY_DEFAULT) {
if ((annotationTagBits & TagBits.AnnotationNonNullByDefault) != 0) {
this.scope.problemReporter().nullDefaultAnnotationIsRedundant(location, annotations, this);
@@ -2495,7 +2497,7 @@
case Scope.CLASS_SCOPE:
currentType = ((ClassScope)currentScope).referenceContext.binding;
if (currentType != null) {
- int foundDefaultNullness = currentType.defaultNullness;
+ int foundDefaultNullness = currentType.getNullDefault();
if (foundDefaultNullness != NO_NULL_DEFAULT) {
return foundDefaultNullness == NONNULL_BY_DEFAULT;
}
diff --git a/org.eclipse.jdt.core/forceQualifierUpdate.txt b/org.eclipse.jdt.core/forceQualifierUpdate.txt
index 13bf69d..6c3cdbf 100644
--- a/org.eclipse.jdt.core/forceQualifierUpdate.txt
+++ b/org.eclipse.jdt.core/forceQualifierUpdate.txt
@@ -3,3 +3,4 @@
Bug 407853 - ECJ download misses legal file (about.html)
Bug 407852 - ECJ source download is not correct
Bug 408447 - compiler (log message) needs updating for copyright and bundle_qualifier
+Several bundles changed and need to be touched
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/core/JavaCore.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/core/JavaCore.java
index 8ded8c2..5c794ea 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/core/JavaCore.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/core/JavaCore.java
@@ -940,9 +940,10 @@
*/
public static final String COMPILER_PB_RAW_TYPE_REFERENCE = PLUGIN_ID + ".compiler.problem.rawTypeReference"; //$NON-NLS-1$
/**
- * Compiler option ID: Reporting of Unavoidable Generic Type Problems.
- * <p> When enabled, the compiler will issue an error or warning even when it detects a generic type problem
- * that could not have been avoided by the programmer. As an example, a type may be forced to use raw types
+ * Compiler option ID: Reporting of Unavoidable Generic Type Problems due to raw APIs.
+ * <p> When enabled, the compiler will issue an error or warning even when it detects a generics-related type problem
+ * that could not have been avoided by the programmer, because a referenced API already contains raw types.
+ * As an example, a type may be forced to use raw types
* in its method signatures and return types because the methods it overrides from a super type are declared to
* use raw types in the first place.</p>
* <dl>
diff --git a/org.eclipse.jdt.core/pom.xml b/org.eclipse.jdt.core/pom.xml
index 4e908bf..1cd2b9c 100644
--- a/org.eclipse.jdt.core/pom.xml
+++ b/org.eclipse.jdt.core/pom.xml
@@ -21,6 +21,10 @@
<version>3.10.0-SNAPSHOT</version>
<packaging>eclipse-plugin</packaging>
+ <properties>
+ <defaultSigning-excludeInnerJars>true</defaultSigning-excludeInnerJars>
+ </properties>
+
<build>
<plugins>
<plugin>
diff --git a/releng/build-scripts/build/test.properties.in b/releng/build-scripts/build/test.properties.in
index bf7fb8b..876e372 100644
--- a/releng/build-scripts/build/test.properties.in
+++ b/releng/build-scripts/build/test.properties.in
@@ -9,8 +9,8 @@
# ----
# tests referenced without version qualifier:
-org.eclipse.jdt.core.tests.compiler=org.eclipse.jdt.core.tests.compiler_3.8.3
-org.eclipse.jdt.core.tests.model=org.eclipse.jdt.core.tests.model_3.8.3
+org.eclipse.jdt.core.tests.compiler=org.eclipse.jdt.core.tests.compiler_3.9.0
+org.eclipse.jdt.core.tests.model=org.eclipse.jdt.core.tests.model_3.9.0
org.eclipse.objectteams.otdt.tests=org.eclipse.objectteams.otdt.tests_2.0.0
org.eclipse.objectteams.otdt.ui.tests=org.eclipse.objectteams.otdt.ui.tests_2.0.0