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