Bug 427496 - [1.8] Support lambda expressions
Add tag and annotation tests

Change-Id: I20ad85c74744299f5ab55a68edb4349b744d16c4
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/annotations/AnnotationTest.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/annotations/AnnotationTest.java
index 9be90f3..972bc28 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/annotations/AnnotationTest.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/annotations/AnnotationTest.java
@@ -12,6 +12,7 @@
 
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import java.util.ArrayList;
 
 import junit.framework.Test;
 import junit.framework.TestSuite;
@@ -25,6 +26,7 @@
 import org.eclipse.pde.api.tools.builder.tests.ApiProblem;
 import org.eclipse.pde.api.tools.builder.tests.ApiTestingEnvironment;
 import org.eclipse.pde.api.tools.model.tests.TestSuiteHelper;
+import org.eclipse.pde.api.tools.tests.util.ProjectUtils;
 
 /**
  * Root test for annotation tests
@@ -66,18 +68,24 @@
 	 * @return all of the child test classes of this class
 	 */
 	private static Class<?>[] getAllTestClasses() {
-		Class<?>[] classes = new Class[] {
-				InvalidAnnotationAnnotationsTests.class,
-				ValidAnnotationAnnotationsTests.class,
-				InvalidClassAnnotationsTests.class,
-				ValidClassAnnotationsTests.class,
-				InvalidInterfaceAnnotationTests.class,
-				ValidInterfaceAnnotationTests.class,
-				InvalidDuplicateAnnotationTests.class,
-				InvalidEnumAnnotationsTests.class,
-				ValidEnumAnnotationsTests.class, FieldAnnotationTest.class,
-				MethodAnnotationTest.class};
-		return classes;
+		ArrayList<Class<?>> classes = new ArrayList<Class<?>>();
+		classes.add(InvalidAnnotationAnnotationsTests.class);
+		classes.add(ValidAnnotationAnnotationsTests.class);
+		classes.add(InvalidClassAnnotationsTests.class);
+		classes.add(ValidClassAnnotationsTests.class);
+		classes.add(InvalidInterfaceAnnotationTests.class);
+		classes.add(ValidInterfaceAnnotationTests.class);
+		classes.add(InvalidDuplicateAnnotationTests.class);
+		classes.add(InvalidEnumAnnotationsTests.class);
+		classes.add(ValidEnumAnnotationsTests.class);
+		classes.add(FieldAnnotationTest.class);
+		classes.add(MethodAnnotationTest.class);
+		if (ProjectUtils.isJava8Compatible()) {
+			classes.add(InvalidJava8InterfaceAnnotationTests.class);
+			classes.add(ValidJava8InterfaceAnnotationTests.class);
+		}
+		
+		return classes.toArray(new Class<?>[classes.size()]);
 	}
 
 	/**
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/annotations/InvalidJava8InterfaceAnnotationTests.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/annotations/InvalidJava8InterfaceAnnotationTests.java
new file mode 100644
index 0000000..38c194c
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/annotations/InvalidJava8InterfaceAnnotationTests.java
@@ -0,0 +1,94 @@
+/*******************************************************************************
+ * Copyright (c) 2014 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.pde.api.tools.builder.tests.annotations;
+
+import junit.framework.Test;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.pde.api.tools.internal.builder.BuilderMessages;
+
+/**
+ * Tests invalid annotation in Java 8 interfaces
+ */
+public class InvalidJava8InterfaceAnnotationTests extends InvalidInterfaceAnnotationTests {
+
+	public InvalidJava8InterfaceAnnotationTests(String name) {
+		super(name);
+	}
+
+	@Override
+	protected String getTestCompliance() {
+		return JavaCore.VERSION_1_8;
+	}
+
+	@Override
+	protected IPath getTestSourcePath() {
+		return new Path("java8").append("annotations").append("interface"); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
+	}
+	
+	@Override
+	protected String getTestingProjectName() {
+		return "java8tags"; //$NON-NLS-1$
+	}
+	
+	/**
+	 * @return the test for this class
+	 */
+	public static Test suite() {
+		return buildTestSuite(InvalidJava8InterfaceAnnotationTests.class);
+	}
+	
+	public void testInvalidTagOnNonDefaultInterfaceMethodI() {
+		x1(true);
+	}
+	
+	public void testInvalidTagOnNonDefaultInterfaceMethodF() {
+		x1(false);
+	}
+
+	/**
+	 * Tests the unsupported @nooverride tag on non-default interface methods in Java 8 interfaces
+	 */
+	private void x1(boolean inc) {
+		setExpectedProblemIds(getDefaultProblemSet(2));
+		setExpectedMessageArgs(new String[][] {
+				{
+						"@NoOverride", BuilderMessages.TagValidator_nondefault_interface_method }, //$NON-NLS-1$
+				{
+						"@NoOverride", BuilderMessages.TagValidator_nondefault_interface_method } //$NON-NLS-1$
+		});
+		deployAnnotationTest("test1.java", inc, false); //$NON-NLS-1$
+	}
+
+	public void testInvalidTagsOnFunctionalInterfaceI() {
+		x2(true);
+	}
+
+	public void testInvalidTagsOnFunctionalInterfaceF() {
+		x2(false);
+	}
+
+	/**
+	 * Tests that a variety of tags are unsupported on a functional interface
+	 */
+	private void x2(boolean inc) {
+		setExpectedProblemIds(getDefaultProblemSet(2));
+		setExpectedMessageArgs(new String[][] {
+				{
+						"@NoOverride", BuilderMessages.TagValidator_nondefault_interface_method }, //$NON-NLS-1$
+				{
+						"@NoOverride", BuilderMessages.TagValidator_nondefault_interface_method } //$NON-NLS-1$
+		});
+		deployAnnotationTest("test2.java", inc, false); //$NON-NLS-1$
+	}
+}
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/tags/ValidJava8IntefaceMethodTagTests.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/annotations/ValidJava8InterfaceAnnotationTests.java
similarity index 63%
copy from apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/tags/ValidJava8IntefaceMethodTagTests.java
copy to apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/annotations/ValidJava8InterfaceAnnotationTests.java
index c88a5d1..1ba1ad8 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/tags/ValidJava8IntefaceMethodTagTests.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/annotations/ValidJava8InterfaceAnnotationTests.java
@@ -8,7 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
-package org.eclipse.pde.api.tools.builder.tests.tags;
+package org.eclipse.pde.api.tools.builder.tests.annotations;
 
 import junit.framework.Test;
 
@@ -17,12 +17,12 @@
 import org.eclipse.jdt.core.JavaCore;
 
 /**
- * Tests valid tags on Java 8 interface methods
+ * Tests valid annotations on Java 8 interface methods
  */
-public class ValidJava8IntefaceMethodTagTests extends
-		ValidInterfaceMethodTagTests {
+public class ValidJava8InterfaceAnnotationTests extends
+ ValidInterfaceAnnotationTests {
 
-	public ValidJava8IntefaceMethodTagTests(String name) {
+	public ValidJava8InterfaceAnnotationTests(String name) {
 		super(name);
 	}
 
@@ -45,7 +45,7 @@
 	 * @return the test for this class
 	 */
 	public static Test suite() {
-		return buildTestSuite(ValidJava8IntefaceMethodTagTests.class);
+		return buildTestSuite(ValidJava8InterfaceAnnotationTests.class);
 	}
 
 	public void testNoOverrideOnDefaultI() {
@@ -57,9 +57,24 @@
 	}
 	
 	/**
-	 * Tests the @nooverride tag on a default method
+	 * Tests the NoOverride annotation on a default method
 	 */
 	private void x1(boolean inc) {
-		deployTagTest("test1.java", inc, false); //$NON-NLS-1$
+		deployAnnotationTest("test1.java", inc, false); //$NON-NLS-1$
+	}
+
+	public void testValidTagsOnFunctionalInterfaceI() {
+		x2(true);
+	}
+
+	public void testValidTagsOnFunctionalInterfaceF() {
+		x2(false);
+	}
+
+	/**
+	 * Tests a variety of annotations on a functional interface
+	 */
+	private void x2(boolean inc) {
+		deployAnnotationTest("test2.java", inc, false); //$NON-NLS-1$
 	}
 }
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/tags/InvalidJava8InterfaceMethodTagTests.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/tags/InvalidJava8InterfaceTagTests.java
similarity index 63%
rename from apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/tags/InvalidJava8InterfaceMethodTagTests.java
rename to apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/tags/InvalidJava8InterfaceTagTests.java
index 178ade6..a090e42 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/tags/InvalidJava8InterfaceMethodTagTests.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/tags/InvalidJava8InterfaceTagTests.java
@@ -18,11 +18,11 @@
 import org.eclipse.pde.api.tools.internal.builder.BuilderMessages;
 
 /**
- * Tests invalid tags in Java 8 interface methods
+ * Tests invalid tags in Java 8 interfaces
  */
-public class InvalidJava8InterfaceMethodTagTests extends InvalidInterfaceMethodTagTests {
+public class InvalidJava8InterfaceTagTests extends InvalidInterfaceMethodTagTests {
 
-	public InvalidJava8InterfaceMethodTagTests(String name) {
+	public InvalidJava8InterfaceTagTests(String name) {
 		super(name);
 	}
 
@@ -45,14 +45,14 @@
 	 * @return the test for this class
 	 */
 	public static Test suite() {
-		return buildTestSuite(InvalidJava8InterfaceMethodTagTests.class);
+		return buildTestSuite(InvalidJava8InterfaceTagTests.class);
 	}
 	
-	public void testInvalidJava8InterfaceMethodTag1I() {
+	public void testInvalidTagOnNonDefaultInterfaceMethodI() {
 		x1(true);
 	}
 	
-	public void testInvalidJava8InterfaceMethodTag1F() {
+	public void testInvalidTagOnNonDefaultInterfaceMethodF() {
 		x1(false);
 	}
 
@@ -67,4 +67,26 @@
 		});
 		deployTagTest("test1.java", inc, false); //$NON-NLS-1$
 	}
+
+	public void testInvalidTagsOnFunctionalInterfaceI() {
+		x2(true);
+	}
+
+	public void testInvalidTagsOnFunctionalInterfaceF() {
+		x2(false);
+	}
+
+	/**
+	 * Tests that a variety of tags are unsupported on a functional interface
+	 */
+	private void x2(boolean inc) {
+		setExpectedProblemIds(getDefaultProblemSet(3));
+		setExpectedMessageArgs(new String[][] {
+				{ "@nooverride", BuilderMessages.TagValidator_an_interface }, //$NON-NLS-1$
+				{ "@noextend", BuilderMessages.TagValidator_an_interface_method }, //$NON-NLS-1$
+				{
+						"@noimplement", BuilderMessages.TagValidator_an_interface_method } //$NON-NLS-1$
+		});
+		deployTagTest("test2.java", inc, false); //$NON-NLS-1$
+	}
 }
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/tags/InvalidMethodTagTests.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/tags/InvalidMethodTagTests.java
index ad48247..ed9bc07 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/tags/InvalidMethodTagTests.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/tags/InvalidMethodTagTests.java
@@ -22,7 +22,6 @@
 import org.eclipse.pde.api.tools.internal.problems.ApiProblemFactory;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IElementDescriptor;
 import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblem;
-import org.eclipse.pde.api.tools.tests.util.ProjectUtils;
 
 /**
  * Test unsupported javadoc tags on methods in classes, interfaces, enums and
@@ -81,9 +80,6 @@
 		classes.add(InvalidEnumMethodTagTests.class);
 		classes.add(InvalidClassMethodTagTests.class);
 		classes.add(InvalidInterfaceMethodTagTests.class);
-		if(ProjectUtils.isJava8Compatible()) {
-			classes.add(InvalidJava8InterfaceMethodTagTests.class);
-		}
 		return classes.toArray(new Class[classes.size()]);
 	}
 
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/tags/TagTest.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/tags/TagTest.java
index d5658ac..bb1aef5 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/tags/TagTest.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/tags/TagTest.java
@@ -12,6 +12,7 @@
 
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import java.util.ArrayList;
 
 import junit.framework.Test;
 import junit.framework.TestSuite;
@@ -24,6 +25,7 @@
 import org.eclipse.pde.api.tools.builder.tests.ApiProblem;
 import org.eclipse.pde.api.tools.builder.tests.ApiTestingEnvironment;
 import org.eclipse.pde.api.tools.model.tests.TestSuiteHelper;
+import org.eclipse.pde.api.tools.tests.util.ProjectUtils;
 
 /**
  * Tests the builder to make sure it correctly finds and reports unsupported tag
@@ -63,15 +65,26 @@
 	 * @return all of the child test classes of this class
 	 */
 	private static Class<?>[] getAllTestClasses() {
-		Class<?>[] classes = new Class[] {
-				InvalidClassTagTests.class, ValidClassTagTests.class,
-				InvalidInterfaceTagTests.class, ValidInterfaceTagTests.class,
-				InvalidFieldTagTests.class, ValidFieldTagTests.class,
-				InvalidMethodTagTests.class, ValidMethodTagTests.class,
-				ValidEnumTagTests.class, InvalidEnumTagTests.class,
-				ValidAnnotationTagTests.class, InvalidAnnotationTagTests.class,
-				InvalidDuplicateTagsTests.class };
-		return classes;
+		ArrayList<Class<?>> classes = new ArrayList<Class<?>>();
+		classes.add(InvalidClassTagTests.class);
+		classes.add(ValidClassTagTests.class);
+		classes.add(InvalidInterfaceTagTests.class);
+		classes.add(ValidInterfaceTagTests.class);
+		classes.add(InvalidFieldTagTests.class);
+		classes.add(ValidFieldTagTests.class);
+		classes.add(InvalidMethodTagTests.class);
+		classes.add(ValidMethodTagTests.class);
+		classes.add(ValidEnumTagTests.class);
+		classes.add(InvalidEnumTagTests.class);
+		classes.add(ValidAnnotationTagTests.class);
+		classes.add(InvalidAnnotationTagTests.class);
+		classes.add(InvalidDuplicateTagsTests.class);
+		if (ProjectUtils.isJava8Compatible()) {
+			classes.add(ValidJava8InterfaceTagTests.class);
+			classes.add(InvalidJava8InterfaceTagTests.class);
+		}
+		
+		return classes.toArray(new Class<?>[classes.size()]);
 	}
 
 	/**
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/tags/ValidJava8IntefaceMethodTagTests.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/tags/ValidJava8InterfaceTagTests.java
similarity index 77%
rename from apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/tags/ValidJava8IntefaceMethodTagTests.java
rename to apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/tags/ValidJava8InterfaceTagTests.java
index c88a5d1..da245b2 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/tags/ValidJava8IntefaceMethodTagTests.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/tags/ValidJava8InterfaceTagTests.java
@@ -19,10 +19,10 @@
 /**
  * Tests valid tags on Java 8 interface methods
  */
-public class ValidJava8IntefaceMethodTagTests extends
+public class ValidJava8InterfaceTagTests extends
 		ValidInterfaceMethodTagTests {
 
-	public ValidJava8IntefaceMethodTagTests(String name) {
+	public ValidJava8InterfaceTagTests(String name) {
 		super(name);
 	}
 
@@ -45,7 +45,7 @@
 	 * @return the test for this class
 	 */
 	public static Test suite() {
-		return buildTestSuite(ValidJava8IntefaceMethodTagTests.class);
+		return buildTestSuite(ValidJava8InterfaceTagTests.class);
 	}
 
 	public void testNoOverrideOnDefaultI() {
@@ -62,4 +62,19 @@
 	private void x1(boolean inc) {
 		deployTagTest("test1.java", inc, false); //$NON-NLS-1$
 	}
+
+	public void testValidTagsOnFunctionalInterfaceI() {
+		x2(true);
+	}
+
+	public void testValidTagsOnFunctionalInterfaceF() {
+		x2(false);
+	}
+
+	/**
+	 * Tests a variety of tags on a functional interface
+	 */
+	private void x2(boolean inc) {
+		deployTagTest("test2.java", inc, false); //$NON-NLS-1$
+	}
 }
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/tags/ValidMethodTagTests.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/tags/ValidMethodTagTests.java
index 6cec867..534703f 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/tags/ValidMethodTagTests.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/tags/ValidMethodTagTests.java
@@ -19,7 +19,6 @@
 
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.jdt.core.tests.junit.extension.TestCase;
-import org.eclipse.pde.api.tools.tests.util.ProjectUtils;
 
 /**
  * Tests valid javadoc tags on methods in classes, interfaces, enums and
@@ -66,9 +65,6 @@
 		classes.add(ValidClassMethodTagTests.class);
 		classes.add(ValidInterfaceMethodTagTests.class);
 		classes.add(ValidEnumMethodTagTests.class);
-		if (ProjectUtils.isJava8Compatible()) {
-			classes.add(ValidJava8IntefaceMethodTagTests.class);
-		}
 		return classes.toArray(new Class[classes.size()]);
 	}
 
diff --git a/apitools/org.eclipse.pde.api.tools.tests/test-builder/java8/annotations/interface/test1.java b/apitools/org.eclipse.pde.api.tools.tests/test-builder/java8/annotations/interface/test1.java
new file mode 100644
index 0000000..6461c0a
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools.tests/test-builder/java8/annotations/interface/test1.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2014 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 a.b.c;
+
+import org.eclipse.pde.api.tools.annotations.NoOverride;
+
+/**
+ * Tests invalid nooverride annotations on nested inner interfaces
+ */
+public interface test1 {
+
+	@NoOverride
+	int m1();
+
+	interface inner {
+		@NoOverride
+		int m1();
+	}
+	
+}
+
diff --git a/apitools/org.eclipse.pde.api.tools.tests/test-builder/java8/annotations/interface/test2.java b/apitools/org.eclipse.pde.api.tools.tests/test-builder/java8/annotations/interface/test2.java
new file mode 100644
index 0000000..bac925c
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools.tests/test-builder/java8/annotations/interface/test2.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2014 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 a.b.c;
+
+import org.eclipse.pde.api.tools.annotations.*;
+
+/**
+ * Invalid annotations on a functional interface with an inner functional interface
+ */
+@FunctionalInterface
+public interface test2 {
+	@NoOverride
+	int m1();
+	
+	@FunctionalInterface
+	interface inner {
+		@NoOverride
+		int m1();
+	}
+}
+
+
diff --git a/apitools/org.eclipse.pde.api.tools.tests/test-builder/java8/annotations/interface/valid/test1.java b/apitools/org.eclipse.pde.api.tools.tests/test-builder/java8/annotations/interface/valid/test1.java
new file mode 100644
index 0000000..5e1bd59
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools.tests/test-builder/java8/annotations/interface/valid/test1.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2014 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 a.b.c;
+
+import org.eclipse.pde.api.tools.annotations.NoOverride;
+import org.eclipse.pde.api.tools.annotations.NoReference;
+
+/**
+ * Test valid annotations on an interface default method
+ */
+public interface test1 {
+
+	@NoReference
+	@NoOverride
+	default int m1() {
+		return 1;
+	}
+	
+	interface inner {
+		@NoReference
+		@NoOverride
+		default int m1() {
+			return 1;
+		}
+	}
+}
diff --git a/apitools/org.eclipse.pde.api.tools.tests/test-builder/java8/annotations/interface/valid/test2.java b/apitools/org.eclipse.pde.api.tools.tests/test-builder/java8/annotations/interface/valid/test2.java
new file mode 100644
index 0000000..a539635
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools.tests/test-builder/java8/annotations/interface/valid/test2.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2014 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 a.b.c;
+
+import org.eclipse.pde.api.tools.annotations.*;
+
+/**
+ * Valid annotations on a functional interface with an inner functional interface
+ */
+@NoImplement
+@NoExtend
+@NoReference
+@FunctionalInterface
+public interface test2 {
+	@NoReference
+	int m1();
+	
+	@FunctionalInterface
+	interface inner {
+		@NoReference
+		int m1();
+	}
+}
+
+
diff --git a/apitools/org.eclipse.pde.api.tools.tests/test-builder/java8/tags/interface/test2.java b/apitools/org.eclipse.pde.api.tools.tests/test-builder/java8/tags/interface/test2.java
new file mode 100644
index 0000000..f469c07
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools.tests/test-builder/java8/tags/interface/test2.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2014 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 a.b.c;
+
+/**
+ * Invalid tags on a functional interface with an inner functional interface
+ * @nooverride
+ */
+@FunctionalInterface
+public interface test2 {
+	/**
+	 * @noextend
+	 */
+	int m1();
+	
+	@FunctionalInterface
+	interface inner {
+		/**
+		 * @noimplement
+		 */
+		int m1();
+	}
+}
+
+
diff --git a/apitools/org.eclipse.pde.api.tools.tests/test-builder/java8/tags/interface/valid/test2.java b/apitools/org.eclipse.pde.api.tools.tests/test-builder/java8/tags/interface/valid/test2.java
new file mode 100644
index 0000000..4c47335
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools.tests/test-builder/java8/tags/interface/valid/test2.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2014 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 a.b.c;
+
+/**
+ * Valid annotations on a functional interface with an inner functional interface
+ * @noimplement
+ * @noextend
+ * @noreference
+ */
+@FunctionalInterface
+public interface test2 {
+	/**
+	 * @noreference
+	 */
+	int m1();
+	
+	@FunctionalInterface
+	interface inner {
+		/**
+		 * @noreference
+		 */
+		int m1();
+	}
+}
+
+