diff --git a/org.eclipse.m2e.wtp.jaxrs/.classpath b/org.eclipse.m2e.wtp.jaxrs/.classpath
index 0b1bcf9..46cec6e 100644
--- a/org.eclipse.m2e.wtp.jaxrs/.classpath
+++ b/org.eclipse.m2e.wtp.jaxrs/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src/"/>
 	<classpathentry kind="output" path="target/classes"/>
diff --git a/org.eclipse.m2e.wtp.jaxrs/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.m2e.wtp.jaxrs/.settings/org.eclipse.jdt.core.prefs
index d141c68..935535c 100644
--- a/org.eclipse.m2e.wtp.jaxrs/.settings/org.eclipse.jdt.core.prefs
+++ b/org.eclipse.m2e.wtp.jaxrs/.settings/org.eclipse.jdt.core.prefs
@@ -6,9 +6,9 @@
 org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
 org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.compliance=1.7
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
@@ -96,4 +96,4 @@
 org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/org.eclipse.m2e.wtp.jaxrs/META-INF/MANIFEST.MF b/org.eclipse.m2e.wtp.jaxrs/META-INF/MANIFEST.MF
index b013037..89fa745 100644
--- a/org.eclipse.m2e.wtp.jaxrs/META-INF/MANIFEST.MF
+++ b/org.eclipse.m2e.wtp.jaxrs/META-INF/MANIFEST.MF
@@ -21,7 +21,7 @@
  org.slf4j.api
 Bundle-Localization: plugin
 Bundle-ActivationPolicy: lazy
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
 Bundle-Vendor: %Bundle-Vendor
 Export-Package: org.eclipse.m2e.wtp.jaxrs.internal,org.eclipse.m2e.wtp
  .jaxrs.internal.configurators
diff --git a/org.eclipse.m2e.wtp.jsf/.classpath b/org.eclipse.m2e.wtp.jsf/.classpath
index 0b1bcf9..46cec6e 100644
--- a/org.eclipse.m2e.wtp.jsf/.classpath
+++ b/org.eclipse.m2e.wtp.jsf/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src/"/>
 	<classpathentry kind="output" path="target/classes"/>
diff --git a/org.eclipse.m2e.wtp.jsf/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.m2e.wtp.jsf/.settings/org.eclipse.jdt.core.prefs
index d141c68..935535c 100644
--- a/org.eclipse.m2e.wtp.jsf/.settings/org.eclipse.jdt.core.prefs
+++ b/org.eclipse.m2e.wtp.jsf/.settings/org.eclipse.jdt.core.prefs
@@ -6,9 +6,9 @@
 org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
 org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.compliance=1.7
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
@@ -96,4 +96,4 @@
 org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/org.eclipse.m2e.wtp.jsf/META-INF/MANIFEST.MF b/org.eclipse.m2e.wtp.jsf/META-INF/MANIFEST.MF
index 691aad3..3a9ce2f 100644
--- a/org.eclipse.m2e.wtp.jsf/META-INF/MANIFEST.MF
+++ b/org.eclipse.m2e.wtp.jsf/META-INF/MANIFEST.MF
@@ -22,7 +22,7 @@
  org.slf4j.api,
  org.eclipse.m2e.wtp
 Bundle-ActivationPolicy: lazy
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
 Export-Package: org.eclipse.m2e.wtp.jsf.internal,org.eclipse.m2e.wtp.j
diff --git a/org.eclipse.m2e.wtp.jsf/src/org/eclipse/m2e/wtp/jsf/internal/utils/xpl/JSFAppConfigUtils.java b/org.eclipse.m2e.wtp.jsf/src/org/eclipse/m2e/wtp/jsf/internal/utils/xpl/JSFAppConfigUtils.java
index 6fc1c57..39a3669 100644
--- a/org.eclipse.m2e.wtp.jsf/src/org/eclipse/m2e/wtp/jsf/internal/utils/xpl/JSFAppConfigUtils.java
+++ b/org.eclipse.m2e.wtp.jsf/src/org/eclipse/m2e/wtp/jsf/internal/utils/xpl/JSFAppConfigUtils.java
@@ -113,7 +113,7 @@
 	}
 
 	private static List<String> getConfigFilesForJ2EEApp(IProject project){
-		List<String> filesList = new ArrayList<String>();
+		List<String> filesList = new ArrayList<>();
 		WebArtifactEdit webArtifactEdit = WebArtifactEdit.getWebArtifactEditForRead(project);
 		if (webArtifactEdit != null) {
 			try {
@@ -160,7 +160,7 @@
 	}
 	
 	private static List<String> parseFilesString(String filesString) {
-		List<String> filesList = new ArrayList<String>();
+		List<String> filesList = new ArrayList<>();
 		if (filesString != null && filesString.trim().length() > 0) {			
 			StringTokenizer stFilesString = new StringTokenizer(filesString, ","); //$NON-NLS-1$
 			while (stFilesString.hasMoreTokens()) {
diff --git a/org.eclipse.m2e.wtp.overlay.ui/.classpath b/org.eclipse.m2e.wtp.overlay.ui/.classpath
index 798048d..46cec6e 100644
--- a/org.eclipse.m2e.wtp.overlay.ui/.classpath
+++ b/org.eclipse.m2e.wtp.overlay.ui/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src/"/>
 	<classpathentry kind="output" path="target/classes"/>
diff --git a/org.eclipse.m2e.wtp.overlay.ui/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.m2e.wtp.overlay.ui/.settings/org.eclipse.jdt.core.prefs
index 827a3c3..13c64aa 100644
--- a/org.eclipse.m2e.wtp.overlay.ui/.settings/org.eclipse.jdt.core.prefs
+++ b/org.eclipse.m2e.wtp.overlay.ui/.settings/org.eclipse.jdt.core.prefs
@@ -6,8 +6,8 @@
 org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
 org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
@@ -92,4 +92,4 @@
 org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/org.eclipse.m2e.wtp.overlay.ui/META-INF/MANIFEST.MF b/org.eclipse.m2e.wtp.overlay.ui/META-INF/MANIFEST.MF
index e1f2935..a2f6fa7 100644
--- a/org.eclipse.m2e.wtp.overlay.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.m2e.wtp.overlay.ui/META-INF/MANIFEST.MF
@@ -12,7 +12,5 @@
  org.eclipse.m2e.wtp.overlay
 Bundle-ActivationPolicy: lazy
 Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: J2SE-1.5,
- JavaSE-1.6,
- JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
 Bundle-Vendor: Eclipse.org - m2e-wtp
diff --git a/org.eclipse.m2e.wtp.overlay/.classpath b/org.eclipse.m2e.wtp.overlay/.classpath
index 0b1bcf9..46cec6e 100644
--- a/org.eclipse.m2e.wtp.overlay/.classpath
+++ b/org.eclipse.m2e.wtp.overlay/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src/"/>
 	<classpathentry kind="output" path="target/classes"/>
diff --git a/org.eclipse.m2e.wtp.overlay/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.m2e.wtp.overlay/.settings/org.eclipse.jdt.core.prefs
index cd8e81b..13c64aa 100644
--- a/org.eclipse.m2e.wtp.overlay/.settings/org.eclipse.jdt.core.prefs
+++ b/org.eclipse.m2e.wtp.overlay/.settings/org.eclipse.jdt.core.prefs
@@ -6,8 +6,8 @@
 org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
 org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
-org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
@@ -92,4 +92,4 @@
 org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/org.eclipse.m2e.wtp.overlay/META-INF/MANIFEST.MF b/org.eclipse.m2e.wtp.overlay/META-INF/MANIFEST.MF
index 3102d05..dc4f498 100644
--- a/org.eclipse.m2e.wtp.overlay/META-INF/MANIFEST.MF
+++ b/org.eclipse.m2e.wtp.overlay/META-INF/MANIFEST.MF
@@ -3,8 +3,7 @@
 Bundle-Name: Overlay support for Eclipse WTP
 Bundle-SymbolicName: org.eclipse.m2e.wtp.overlay;singleton:=true
 Bundle-Version: 1.2.0.qualifier
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6,
- JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
 Require-Bundle: org.eclipse.core.runtime,
  org.eclipse.core.resources,
  org.eclipse.wst.common.core,
diff --git a/org.eclipse.m2e.wtp.overlay/src/org/eclipse/m2e/wtp/overlay/internal/modulecore/CompositeVirtualFolder.java b/org.eclipse.m2e.wtp.overlay/src/org/eclipse/m2e/wtp/overlay/internal/modulecore/CompositeVirtualFolder.java
index 09e7e85..7b3c3fb 100644
--- a/org.eclipse.m2e.wtp.overlay/src/org/eclipse/m2e/wtp/overlay/internal/modulecore/CompositeVirtualFolder.java
+++ b/org.eclipse.m2e.wtp.overlay/src/org/eclipse/m2e/wtp/overlay/internal/modulecore/CompositeVirtualFolder.java
@@ -61,7 +61,7 @@
 	private FlatVirtualComponent flatVirtualComponent;
 	private IPath runtimePath;
 	private IProject project;
-	private Set<IVirtualReference> references = new LinkedHashSet<IVirtualReference>();
+	private Set<IVirtualReference> references = new LinkedHashSet<>();
 	private IVirtualResource[] members;
 	private IResourceFilter filter;
 	
@@ -100,7 +100,7 @@
 	public void treeWalk() throws CoreException {	 
 		IFlatResource[] flatResources = flatVirtualComponent.fetchResources();
 		
-		List<IVirtualResource> membersList = new ArrayList<IVirtualResource>(flatResources.length);
+		List<IVirtualResource> membersList = new ArrayList<>(flatResources.length);
 		for (IFlatResource flatResource : flatResources) {
 			IVirtualResource resource = convert(flatResource);
 			if (resource != null) {
@@ -134,7 +134,7 @@
 
 	private IVirtualFolder convertFolder(IFlatFolder flatFolder) {
 		IFlatResource[] flatMembers = flatFolder.members();
-		List<IVirtualResource> membersList = new ArrayList<IVirtualResource>(flatMembers.length);
+		List<IVirtualResource> membersList = new ArrayList<>(flatMembers.length);
 		for (IFlatResource flatResource : flatMembers) {
 			IVirtualResource resource = convert(flatResource);
 			if (resource != null) {
diff --git a/org.eclipse.m2e.wtp.overlay/src/org/eclipse/m2e/wtp/overlay/internal/modulecore/DynamicResourceFilter.java b/org.eclipse.m2e.wtp.overlay/src/org/eclipse/m2e/wtp/overlay/internal/modulecore/DynamicResourceFilter.java
index b986acc..8d36d11 100644
--- a/org.eclipse.m2e.wtp.overlay/src/org/eclipse/m2e/wtp/overlay/internal/modulecore/DynamicResourceFilter.java
+++ b/org.eclipse.m2e.wtp.overlay/src/org/eclipse/m2e/wtp/overlay/internal/modulecore/DynamicResourceFilter.java
@@ -118,7 +118,7 @@
      *
      * @since Ant 1.6.3
      */
-    private Set<String> includeNonPatterns = new HashSet<String>();
+    private Set<String> includeNonPatterns = new HashSet<>();
 
     /**
      * Set of all include patterns that are full file names and don't
@@ -133,7 +133,7 @@
      *
      * @since Ant 1.6.3
      */
-    private Set<String> excludeNonPatterns = new HashSet<String>();
+    private Set<String> excludeNonPatterns = new HashSet<>();
 
     
     public DynamicResourceFilter(Collection<String> inclusions, Collection<String> exclusions) {
@@ -219,7 +219,7 @@
      * @since Ant 1.6.3
      */
     private String[] fillNonPatternSet(Set<String> set, String[] patterns) {
-        ArrayList<String> al = new ArrayList<String>(patterns.length);
+        ArrayList<String> al = new ArrayList<>(patterns.length);
         for (int i = 0; i < patterns.length; i++) {
             if (!SelectorUtils.hasWildcards(patterns[i])) {
                 set.add(isCaseSensitive() ? patterns[i]
diff --git a/org.eclipse.m2e.wtp.overlay/src/org/eclipse/m2e/wtp/overlay/internal/modulecore/FileSystemResourceFilter.java b/org.eclipse.m2e.wtp.overlay/src/org/eclipse/m2e/wtp/overlay/internal/modulecore/FileSystemResourceFilter.java
index b66865c..843b0e4 100644
--- a/org.eclipse.m2e.wtp.overlay/src/org/eclipse/m2e/wtp/overlay/internal/modulecore/FileSystemResourceFilter.java
+++ b/org.eclipse.m2e.wtp.overlay/src/org/eclipse/m2e/wtp/overlay/internal/modulecore/FileSystemResourceFilter.java
@@ -171,10 +171,10 @@
 		private Set<String> excludedFolders;
 
 		public ScanResult() {
-			includedFiles = new HashSet<String>(0);
-			excludedFiles = new HashSet<String>(0);
-			includedFolders = new HashSet<String>(0);
-			excludedFolders = new HashSet<String>(0);
+			includedFiles = new HashSet<>(0);
+			excludedFiles = new HashSet<>(0);
+			includedFolders = new HashSet<>(0);
+			excludedFolders = new HashSet<>(0);
 		}
 
 		public ScanResult(String scanId, String baseDirAsString,
@@ -182,10 +182,10 @@
 				String[] excDirs) {
 			this.scanId = scanId;
 			this.baseDirAsString = baseDirAsString;
-			includedFiles = new HashSet<String>(Arrays.asList(incFiles));
-			excludedFiles = new HashSet<String>(Arrays.asList(excFiles));
-			includedFolders = new HashSet<String>(Arrays.asList(incDirs));
-			excludedFolders = new HashSet<String>(Arrays.asList(excDirs));
+			includedFiles = new HashSet<>(Arrays.asList(incFiles));
+			excludedFiles = new HashSet<>(Arrays.asList(excFiles));
+			includedFolders = new HashSet<>(Arrays.asList(incDirs));
+			excludedFolders = new HashSet<>(Arrays.asList(excDirs));
 			completeIncludedFolders();
 		}
 
@@ -259,7 +259,7 @@
 		}
 
 		private void completeIncludedFolders() {
-			Set<String> missingParentFolders = new HashSet<String>();
+			Set<String> missingParentFolders = new HashSet<>();
 			for (String folder : includedFolders) {
 				IPath filePath = new Path(folder);
 				IPath parentPath = filePath.removeLastSegments(1);
@@ -318,7 +318,7 @@
 			if (arrayAsString == null) {
 				return Collections.emptySet();
 			}
-			return new HashSet<String>(Arrays.asList(arrayAsString.split(COLLECTION_SEPARATOR)));
+			return new HashSet<>(Arrays.asList(arrayAsString.split(COLLECTION_SEPARATOR)));
 		}
 
 		private String toString(Set<String> stringSet) {
diff --git a/org.eclipse.m2e.wtp.overlay/src/org/eclipse/m2e/wtp/overlay/internal/modulecore/ResourceListVirtualFolder.java b/org.eclipse.m2e.wtp.overlay/src/org/eclipse/m2e/wtp/overlay/internal/modulecore/ResourceListVirtualFolder.java
index 981682b..a480445 100644
--- a/org.eclipse.m2e.wtp.overlay/src/org/eclipse/m2e/wtp/overlay/internal/modulecore/ResourceListVirtualFolder.java
+++ b/org.eclipse.m2e.wtp.overlay/src/org/eclipse/m2e/wtp/overlay/internal/modulecore/ResourceListVirtualFolder.java
@@ -55,8 +55,8 @@
 			IProject aComponentProject,
 			IPath aRuntimePath) {
 		super(aComponentProject, aRuntimePath);
-		this.children = new ArrayList<IResource>();
-		this.underlying = new ArrayList<IContainer>();
+		this.children = new ArrayList<>();
+		this.underlying = new ArrayList<>();
 	}
 
 	public ResourceListVirtualFolder(
diff --git a/org.eclipse.m2e.wtp.overlay/src/org/eclipse/m2e/wtp/overlay/internal/servers/OverlayResourceChangeListener.java b/org.eclipse.m2e.wtp.overlay/src/org/eclipse/m2e/wtp/overlay/internal/servers/OverlayResourceChangeListener.java
index 42dca89..e250858 100644
--- a/org.eclipse.m2e.wtp.overlay/src/org/eclipse/m2e/wtp/overlay/internal/servers/OverlayResourceChangeListener.java
+++ b/org.eclipse.m2e.wtp.overlay/src/org/eclipse/m2e/wtp/overlay/internal/servers/OverlayResourceChangeListener.java
@@ -79,9 +79,9 @@
 				IProject moduleProject = module.getProject();
 				Collection<IProject> overlays = overlaidProjects.get(moduleProject);
 				if (overlays == null) {
-					overlays = new HashSet<IProject>();
+					overlays = new HashSet<>();
 					overlaidProjects.put(moduleProject, overlays);
-					Set<IProject> analyzedProjects = new HashSet<IProject>();
+					Set<IProject> analyzedProjects = new HashSet<>();
 					analyzedProjects.add(moduleProject);
 					collectOverlays(moduleProject, overlays, analyzedProjects);
 				}
@@ -89,7 +89,7 @@
 					if (overlays.contains(changedProject)) {
 						List<IModule> republishableModules = republishableServers.get(server);
 						if (republishableModules == null) {
-							republishableModules = new ArrayList<IModule>(server.getModules().length);
+							republishableModules = new ArrayList<>(server.getModules().length);
 							republishableServers.put(server, republishableModules);
 						}
 						republishableModules.add(module);
@@ -130,7 +130,7 @@
 	}
 
 	private Set<IProject> getChangedProjects(IResourceDelta[] projectDeltas) {
-		Set<IProject> projects = new HashSet<IProject>();
+		Set<IProject> projects = new HashSet<>();
 		if (projectDeltas != null) {
 			for (IResourceDelta delta : projectDeltas) {
 				IResource resource = delta.getResource();
diff --git a/org.eclipse.m2e.wtp.overlay/src/org/eclipse/m2e/wtp/overlay/modulecore/OverlayReferenceResolver.java b/org.eclipse.m2e.wtp.overlay/src/org/eclipse/m2e/wtp/overlay/modulecore/OverlayReferenceResolver.java
index 9bcc3a9..76bf620 100644
--- a/org.eclipse.m2e.wtp.overlay/src/org/eclipse/m2e/wtp/overlay/modulecore/OverlayReferenceResolver.java
+++ b/org.eclipse.m2e.wtp.overlay/src/org/eclipse/m2e/wtp/overlay/modulecore/OverlayReferenceResolver.java
@@ -108,7 +108,7 @@
 	if (patterns == null || patterns.trim().length() == 0) {
 		return Collections.emptySet();
 	}
-	Set<String> patternSet = new LinkedHashSet<String>();
+	Set<String> patternSet = new LinkedHashSet<>();
 	for (String pattern : patterns.split(";")) { //$NON-NLS-1$
 		patternSet.add(pattern);
 	}
@@ -152,7 +152,7 @@
       rc.setArchiveName(reference.getArchiveName());
       rc.setRuntimePath(reference.getRuntimePath());
       URI handle;
-      Map<String, String> parameters = new LinkedHashMap<String, String>(3);
+      Map<String, String> parameters = new LinkedHashMap<>(3);
       if (comp instanceof OverlayVirtualArchiveComponent) {
     	  OverlayVirtualArchiveComponent archivecomp = (OverlayVirtualArchiveComponent) comp;
     	  handle = URI.createURI(VAR_ARCHIVE_PROTOCOL+archivecomp.getArchivePath().toPortableString());
diff --git a/org.eclipse.m2e.wtp/.classpath b/org.eclipse.m2e.wtp/.classpath
index 7162219..06011f6 100644
--- a/org.eclipse.m2e.wtp/.classpath
+++ b/org.eclipse.m2e.wtp/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry exported="true" kind="lib" path="jars/maven-war-plugin-2.1.1.jar"/>
 	<classpathentry kind="src" path="src/"/>
diff --git a/org.eclipse.m2e.wtp/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.m2e.wtp/.settings/org.eclipse.jdt.core.prefs
index d141c68..d17b672 100644
--- a/org.eclipse.m2e.wtp/.settings/org.eclipse.jdt.core.prefs
+++ b/org.eclipse.m2e.wtp/.settings/org.eclipse.jdt.core.prefs
@@ -1,99 +1,12 @@
 eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
-org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
-org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
-org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
-org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
-org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.compliance=1.7
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
-org.eclipse.jdt.core.compiler.problem.deadCode=warning
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=enabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
-org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
-org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
-org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
-org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=error
-org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
-org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
-org.eclipse.jdt.core.compiler.problem.nullReference=warning
-org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
-org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
-org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
-org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
-org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
-org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=error
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=error
-org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
-org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/org.eclipse.m2e.wtp/META-INF/MANIFEST.MF b/org.eclipse.m2e.wtp/META-INF/MANIFEST.MF
index 63efbef..0ad303e 100644
--- a/org.eclipse.m2e.wtp/META-INF/MANIFEST.MF
+++ b/org.eclipse.m2e.wtp/META-INF/MANIFEST.MF
@@ -3,8 +3,7 @@
 Bundle-Name: Maven Integration for Eclipse WTP
 Bundle-SymbolicName: org.eclipse.m2e.wtp;singleton:=true
 Bundle-Version: 1.2.0.qualifier
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6,
- JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
 Require-Bundle: org.eclipse.core.runtime,
  org.eclipse.core.resources,
  org.eclipse.core.commands,
diff --git a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/AbstractFilteringSupportMavenPlugin.java b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/AbstractFilteringSupportMavenPlugin.java
index c436070..a10f58e 100644
--- a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/AbstractFilteringSupportMavenPlugin.java
+++ b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/AbstractFilteringSupportMavenPlugin.java
@@ -61,7 +61,7 @@
     if(config != null) {
       Xpp3Dom filtersNode = config.getChild("filters"); //$NON-NLS-1$
       if (filtersNode != null && filtersNode.getChildCount() > 0) {
-        List<String> filters = new ArrayList<String>(filtersNode.getChildCount());
+        List<String> filters = new ArrayList<>(filtersNode.getChildCount());
         for (Xpp3Dom filterNode : filtersNode.getChildren("filter")) { //$NON-NLS-1$
           String  filter = filterNode.getValue();
           if (!StringUtils.nullOrEmpty(filter)) {
diff --git a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/AbstractProjectConfiguratorDelegate.java b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/AbstractProjectConfiguratorDelegate.java
index 9c0e73d..827e4a7 100644
--- a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/AbstractProjectConfiguratorDelegate.java
+++ b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/AbstractProjectConfiguratorDelegate.java
@@ -102,8 +102,8 @@
   protected abstract void configure(IProject project, MavenProject mavenProject, IProgressMonitor monitor) throws CoreException;
 
   protected List<IMavenProjectFacade> getWorkspaceDependencies(IProject project, MavenProject mavenProject) {
-    Set<IProject> projects = new HashSet<IProject>();
-    List<IMavenProjectFacade> dependencies = new ArrayList<IMavenProjectFacade>();
+    Set<IProject> projects = new HashSet<>();
+    List<IMavenProjectFacade> dependencies = new ArrayList<>();
     Set<Artifact> artifacts = mavenProject.getArtifacts();
     for(Artifact artifact : artifacts) {
       IMavenProjectFacade dependency = projectManager.getMavenProject(artifact.getGroupId(), artifact.getArtifactId(),
@@ -147,7 +147,7 @@
     // 2 - check if the manifest already exists, and its parent folder
     
     IFacetedProject facetedProject = ProjectFacetsManager.create(project, true, monitor);
-    Set<Action> actions = new LinkedHashSet<Action>();
+    Set<Action> actions = new LinkedHashSet<>();
     installJavaFacet(actions, project, facetedProject);
 
     if(!facetedProject.hasProjectFacet(WTPProjectsUtil.UTILITY_FACET)) {
@@ -198,7 +198,7 @@
     if (cpEntries == null) {
       return false;
     }
-    Set<IPath> currentPaths = new HashSet<IPath>();
+    Set<IPath> currentPaths = new HashSet<>();
     for (IClasspathEntry entry  : cpEntries) {
       if (IClasspathEntry.CPE_SOURCE == entry.getEntryKind()){
         currentPaths.add(entry.getPath().makeRelativeTo(project.getFullPath()));
diff --git a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/AppClientProjectConfiguratorDelegate.java b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/AppClientProjectConfiguratorDelegate.java
index 12da1d5..8a4a15a 100644
--- a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/AppClientProjectConfiguratorDelegate.java
+++ b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/AppClientProjectConfiguratorDelegate.java
@@ -48,7 +48,7 @@
    
     IFacetedProject facetedProject = ProjectFacetsManager.create(project, true, monitor);
 
-    Set<Action> actions = new LinkedHashSet<Action>();
+    Set<Action> actions = new LinkedHashSet<>();
     installJavaFacet(actions, project, facetedProject);
 
     IMavenProjectFacade facade = MavenPlugin.getMavenProjectRegistry().create(project.getFile(IMavenConstants.POM_FILE_NAME), true, monitor);
diff --git a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/ConnectorProjectConfiguratorDelegate.java b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/ConnectorProjectConfiguratorDelegate.java
index eaccc50..84cda81 100644
--- a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/ConnectorProjectConfiguratorDelegate.java
+++ b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/ConnectorProjectConfiguratorDelegate.java
@@ -61,7 +61,7 @@
       return;
     }
 
-    Set<Action> actions = new LinkedHashSet<Action>();
+    Set<Action> actions = new LinkedHashSet<>();
     installJavaFacet(actions, project, facetedProject);
 
     IMavenProjectFacade facade = MavenPlugin.getMavenProjectRegistry().create(project, monitor);
@@ -195,7 +195,7 @@
 
     IVirtualComponent rarComponent = ComponentCore.createComponent(project);
     
-    Set<IVirtualReference> newRefs = new LinkedHashSet<IVirtualReference>();
+    Set<IVirtualReference> newRefs = new LinkedHashSet<>();
     
     Set<Artifact> artifacts =  mavenProject.getArtifacts();
     
diff --git a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/EarPluginConfiguration.java b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/EarPluginConfiguration.java
index 4c5626b..78cc227 100644
--- a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/EarPluginConfiguration.java
+++ b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/EarPluginConfiguration.java
@@ -226,7 +226,7 @@
       return Collections.<EarModule> emptySet();
     }
 
-    Set<EarModule> earModules = new LinkedHashSet<EarModule>(artifacts.size());
+    Set<EarModule> earModules = new LinkedHashSet<>(artifacts.size());
     String defaultBundleDir = getDefaultBundleDirectory();
     IProjectFacetVersion javaEEVersion = getEarFacetVersion();
     EarModuleFactory earModuleFactory = EarModuleFactory.createEarModuleFactory(getArtifactTypeMappingService(),
@@ -306,7 +306,7 @@
    * @param earModuleFactory
    */
   private Set<EarModule> getEarModulesFromConfig(EarModuleFactory earModuleFactory, String defaultBundleDir, IProjectFacetVersion javaEEVersion) throws EarPluginException {
-    Set<EarModule> earModules = new LinkedHashSet<EarModule>();
+    Set<EarModule> earModules = new LinkedHashSet<>();
     Xpp3Dom configuration = getConfiguration();
     if(configuration == null) {
       return earModules;
@@ -352,7 +352,7 @@
   }
   
   public Set<SecurityRoleKey>  getSecurityRoleKeys() {
-    Set<SecurityRoleKey> securityRoles = new HashSet<SecurityRoleKey>();
+    Set<SecurityRoleKey> securityRoles = new HashSet<>();
     Xpp3Dom configuration = getConfiguration();
     if(configuration == null) {
       return securityRoles;
diff --git a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/EarProjectConfiguratorDelegate.java b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/EarProjectConfiguratorDelegate.java
index f1ca081..78c4573 100644
--- a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/EarProjectConfiguratorDelegate.java
+++ b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/EarProjectConfiguratorDelegate.java
@@ -77,7 +77,7 @@
     IMavenProjectFacade facade = MavenPlugin.getMavenProjectRegistry().create(project.getFile(IMavenConstants.POM_FILE_NAME), true, monitor);
     
     EarPluginConfiguration config = new EarPluginConfiguration(mavenProject);
-    Set<Action> actions = new LinkedHashSet<Action>();
+    Set<Action> actions = new LinkedHashSet<>();
 
     String contentDir = config.getEarContentDirectory(project);
     contentDir = PathUtil.toPortablePath(contentDir);
@@ -127,7 +127,7 @@
     boolean useBuildDirectory = MavenWtpPlugin.getDefault().getMavenWtpPreferencesManager().getPreferences(project).isApplicationXmGeneratedInBuildDirectory();
     boolean useResourcefiltering = config.isFilteringDeploymentDescriptorsEnabled();
     
-    List<IPath> sourcePaths = new ArrayList<IPath>();
+    List<IPath> sourcePaths = new ArrayList<>();
     sourcePaths.add(contentDirPath);
     
     if (!useBuildDirectory && useResourcefiltering) {
@@ -182,7 +182,7 @@
 
     IVirtualComponent earComponent = ComponentCore.createComponent(project);
     
-    Set<IVirtualReference> newRefs = new LinkedHashSet<IVirtualReference>();
+    Set<IVirtualReference> newRefs = new LinkedHashSet<>();
     
     EarPluginConfiguration config = new EarPluginConfiguration(mavenProject);
     // Retrieving all ear module configuration from maven-ear-plugin : User defined modules + artifacts dependencies.
diff --git a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/EjbProjectConfiguratorDelegate.java b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/EjbProjectConfiguratorDelegate.java
index c237e62..ae7531a 100644
--- a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/EjbProjectConfiguratorDelegate.java
+++ b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/EjbProjectConfiguratorDelegate.java
@@ -49,7 +49,7 @@
 
     IMavenProjectFacade facade = MavenPlugin.getMavenProjectRegistry().create(project.getFile(IMavenConstants.POM_FILE_NAME), true, monitor);
 
-    Set<Action> actions = new LinkedHashSet<Action>();
+    Set<Action> actions = new LinkedHashSet<>();
     installJavaFacet(actions, project, facetedProject);
 
     EjbPluginConfiguration config = new EjbPluginConfiguration(mavenProject);
diff --git a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/OverlayConfigurator.java b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/OverlayConfigurator.java
index 97dccd4..bb5927a 100644
--- a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/OverlayConfigurator.java
+++ b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/OverlayConfigurator.java
@@ -98,7 +98,7 @@
       return;
     }
     
-    Set<IVirtualReference> newOverlayRefs = new LinkedHashSet<IVirtualReference>();
+    Set<IVirtualReference> newOverlayRefs = new LinkedHashSet<>();
     MavenSessionHelper helper = new MavenSessionHelper(mavenProject);
     try {
       helper.ensureDependenciesAreResolved("maven-war-plugin", "war:war"); //$NON-NLS-1$ //$NON-NLS-2$
@@ -145,8 +145,8 @@
 
         if (overlayComponent != null) {
           
-          overlayComponent.setInclusions(new LinkedHashSet<String>(Arrays.asList(overlay.getIncludes())));
-          overlayComponent.setExclusions(new LinkedHashSet<String>(Arrays.asList(overlay.getExcludes())));
+          overlayComponent.setInclusions(new LinkedHashSet<>(Arrays.asList(overlay.getIncludes())));
+          overlayComponent.setExclusions(new LinkedHashSet<>(Arrays.asList(overlay.getExcludes())));
           
           IVirtualReference depRef = ComponentCore.createReference(warComponent, overlayComponent);
           String targetPath = StringUtils.nullOrEmpty(overlay.getTargetPath())?"/":overlay.getTargetPath(); //$NON-NLS-1$
diff --git a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/ProjectUtils.java b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/ProjectUtils.java
index 6818bb3..c44eb18 100644
--- a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/ProjectUtils.java
+++ b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/ProjectUtils.java
@@ -162,7 +162,7 @@
     try {
       int count = 0;
       final IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
-      final List<IProject> projects = new ArrayList<IProject>(Arrays.asList(root.getProjects()));
+      final List<IProject> projects = new ArrayList<>(Arrays.asList(root.getProjects()));
       
       final IPath rootLocation = root.getLocation();
       IPath basedirPath = new Path(basedir.getAbsolutePath());
diff --git a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/ResourceCleaner.java b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/ResourceCleaner.java
index 06147af..3634294 100644
--- a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/ResourceCleaner.java
+++ b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/ResourceCleaner.java
@@ -39,11 +39,11 @@
 
   private final IProject project;
 
-  private List<IFolder> folders = new ArrayList<IFolder>(); 
+  private List<IFolder> folders = new ArrayList<>(); 
 
-  private List<IFile> files = new ArrayList<IFile>(); 
+  private List<IFile> files = new ArrayList<>(); 
   
-  private Set<IFolder> keepers = new HashSet<IFolder>();
+  private Set<IFolder> keepers = new HashSet<>();
 
   /**
    * @param project
diff --git a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/UnsupportedDependencyTypeProjectConfigurator.java b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/UnsupportedDependencyTypeProjectConfigurator.java
index 7305a16..2011170 100644
--- a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/UnsupportedDependencyTypeProjectConfigurator.java
+++ b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/UnsupportedDependencyTypeProjectConfigurator.java
@@ -50,7 +50,7 @@
   private static final Set<String> UNSUPPORTED_DEPENDENCY_TYPES;
 
   static {
-    UNSUPPORTED_DEPENDENCY_TYPES = new HashSet<String>(Arrays.asList(new String[] {"ejb-client", "test-jar"})); //$NON-NLS-1$ //$NON-NLS-2$
+    UNSUPPORTED_DEPENDENCY_TYPES = new HashSet<>(Arrays.asList(new String[] {"ejb-client", "test-jar"})); //$NON-NLS-1$ //$NON-NLS-2$
   }
 
   @Override
diff --git a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/UtilityProjectConfigurator.java b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/UtilityProjectConfigurator.java
index e7f5a16..26e2371 100644
--- a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/UtilityProjectConfigurator.java
+++ b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/UtilityProjectConfigurator.java
@@ -59,7 +59,7 @@
 
       MavenProject mavenProject = request.getMavenProject();
 
-      Set<Action> actions = new LinkedHashSet<Action>();
+      Set<Action> actions = new LinkedHashSet<>();
       installJavaFacet(actions, project, facetedProject);
       if(!actions.isEmpty()) {
         facetedProject.modify(actions, monitor);
diff --git a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/WTPProjectsUtil.java b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/WTPProjectsUtil.java
index df14b57..342076c 100644
--- a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/WTPProjectsUtil.java
+++ b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/WTPProjectsUtil.java
@@ -381,7 +381,7 @@
       return new IVirtualReference[]{};
     }
     
-    List<IVirtualReference> selectedRefs = new ArrayList<IVirtualReference>();
+    List<IVirtualReference> selectedRefs = new ArrayList<>();
     for (IVirtualReference ref  : allReferences) {
       IVirtualComponent component = ref.getReferencedComponent();
       if (component != null) {
@@ -412,7 +412,7 @@
     IJavaProject javaProject = JavaCore.create(project);
     if(javaProject != null) {
       // remove classpatch container from JavaProject
-      ArrayList<IClasspathEntry> newEntries = new ArrayList<IClasspathEntry>();
+      ArrayList<IClasspathEntry> newEntries = new ArrayList<>();
       for(IClasspathEntry entry : javaProject.getRawClasspath()) {
       String path = entry.getPath().toString();
         if(!"org.eclipse.jst.j2ee.internal.module.container".equals(path) //$NON-NLS-1$
@@ -549,7 +549,7 @@
     for(int i = 0; i < cp.length; i++ ) {
       if(IClasspathEntry.CPE_CONTAINER == cp[i].getEntryKind()
           && MavenClasspathHelpers.isMaven2ClasspathContainer(cp[i].getPath())) {
-        LinkedHashMap<String, IClasspathAttribute> attrs = new LinkedHashMap<String, IClasspathAttribute>();
+        LinkedHashMap<String, IClasspathAttribute> attrs = new LinkedHashMap<>();
         for(IClasspathAttribute attr : cp[i].getExtraAttributes()) {
           if (!attr.getName().equals(attributeToDelete)) {
             attrs.put(attr.getName(), attr);            
diff --git a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/WarPluginConfiguration.java b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/WarPluginConfiguration.java
index 269befa..355ab2a 100644
--- a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/WarPluginConfiguration.java
+++ b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/WarPluginConfiguration.java
@@ -317,7 +317,7 @@
     if(config != null) {
       Xpp3Dom overlaysNode = config.getChild("overlays"); //$NON-NLS-1$
       if (overlaysNode != null && overlaysNode.getChildCount() > 0) {
-        List<Overlay> overlays = new ArrayList<Overlay>(overlaysNode.getChildCount());
+        List<Overlay> overlays = new ArrayList<>(overlaysNode.getChildCount());
         for (Xpp3Dom overlayNode : overlaysNode.getChildren("overlay")) { //$NON-NLS-1$
           overlays.add(parseOverlay(overlayNode));
         }
diff --git a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/WebFragmentProjectConfigurator.java b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/WebFragmentProjectConfigurator.java
index 932558d..3b6e77d 100644
--- a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/WebFragmentProjectConfigurator.java
+++ b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/WebFragmentProjectConfigurator.java
@@ -100,7 +100,7 @@
     IProject project = facade.getProject();
     IFacetedProject facetedProject = ProjectFacetsManager.create(project, true, monitor);
     
-    Set<Action> actions = new LinkedHashSet<Action>();
+    Set<Action> actions = new LinkedHashSet<>();
     
     ResourceCleaner fileCleaner = new ResourceCleaner(project);
     addFoldersToClean(fileCleaner, facade);
diff --git a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/WebProjectConfiguratorDelegate.java b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/WebProjectConfiguratorDelegate.java
index 77c1a2e..59544f8 100644
--- a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/WebProjectConfiguratorDelegate.java
+++ b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/WebProjectConfiguratorDelegate.java
@@ -97,7 +97,7 @@
     
     IFolder contentFolder = project.getFolder(warSourceDirectory);
 
-    Set<Action> actions = new LinkedHashSet<Action>();
+    Set<Action> actions = new LinkedHashSet<>();
 
     installJavaFacet(actions, project, facetedProject);
     
@@ -228,7 +228,7 @@
     List<AbstractDependencyConfigurator> depConfigurators = ExtensionReader.readDependencyConfiguratorExtensions(projectManager, 
         MavenPlugin.getMavenRuntimeManager(), mavenMarkerManager);
     
-    Set<IVirtualReference> references = new LinkedHashSet<IVirtualReference>();
+    Set<IVirtualReference> references = new LinkedHashSet<>();
 
     List<IMavenProjectFacade> exportedDependencies = getWorkspaceDependencies(project, mavenProject);
     
@@ -360,14 +360,14 @@
       return Collections.emptyMap();
     }
     int size = artifacts.size();
-    Map<Artifact, String> artifactsMap = new LinkedHashMap<Artifact, String>(size);
+    Map<Artifact, String> artifactsMap = new LinkedHashMap<>(size);
     
     IPackagingConfiguration opts = new PackagingConfiguration(config.getPackagingIncludes(), config.getPackagingExcludes());
     FileNameMapping fileNameMapping = config.getFileNameMapping();
     
-    Set<String> names = new HashSet<String>(size);
+    Set<String> names = new HashSet<>(size);
 
-    Set<String> duplicates = new HashSet<String>(size);
+    Set<String> duplicates = new HashSet<>(size);
     
     for (Artifact artifact : artifacts) {
       ArtifactHelper.fixArtifactHandler(artifact.getArtifactHandler());
diff --git a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/earmodules/ArtifactTypeMappingService.java b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/earmodules/ArtifactTypeMappingService.java
index 24e0220..e95745a 100644
--- a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/earmodules/ArtifactTypeMappingService.java
+++ b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/earmodules/ArtifactTypeMappingService.java
@@ -41,7 +41,7 @@
 
   static final String MAPPING_ATTRIBUTE = "mapping"; //$NON-NLS-1$
 
-  public final static List<String> standardArtifactTypes = new ArrayList<String>(10);
+  public final static List<String> standardArtifactTypes = new ArrayList<>(10);
 
   static {
     standardArtifactTypes.add("jar"); //$NON-NLS-1$
@@ -141,7 +141,7 @@
 
     // Initialize the mapping with the standard artifact types
     for(String type : getStandardArtifactTypes()) {
-      List<String> typeMapping = new ArrayList<String>();
+      List<String> typeMapping = new ArrayList<>();
       typeMapping.add(type);
       this.typeMappings.put(type, typeMapping);
     }
diff --git a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/facets/FacetDetectorExtensionReader.java b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/facets/FacetDetectorExtensionReader.java
index f34ab46..319ac07 100644
--- a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/facets/FacetDetectorExtensionReader.java
+++ b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/facets/FacetDetectorExtensionReader.java
@@ -59,7 +59,7 @@
               AbstractFacetDetector facetDetector = (AbstractFacetDetector) o;
               List<AbstractFacetDetector> detectors = map.get(facetId);
               if (detectors == null){
-                detectors = new ArrayList<AbstractFacetDetector>();
+                detectors = new ArrayList<>();
                 map.put(facetId, detectors);
               }
               detectors.add(facetDetector);
diff --git a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/ExtensionReader.java b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/ExtensionReader.java
index c697022..4cd8d2d 100644
--- a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/ExtensionReader.java
+++ b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/ExtensionReader.java
@@ -44,7 +44,7 @@
   public static List<AbstractDependencyConfigurator> readDependencyConfiguratorExtensions(IMavenProjectRegistry projectManager,
       MavenRuntimeManager runtimeManager, IMavenMarkerManager markerManager) {
     if (dependencyConfigurators == null) {
-      dependencyConfigurators = new ArrayList<AbstractDependencyConfigurator>();
+      dependencyConfigurators = new ArrayList<>();
       
       IExtensionRegistry registry = Platform.getExtensionRegistry();
       IExtensionPoint configuratorsExtensionPoint = registry.getExtensionPoint(EXTENSION_DEPENDENCY_CONFIGURATORS);
diff --git a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/StringUtils.java b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/StringUtils.java
index 26c57b3..4290b3d 100644
--- a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/StringUtils.java
+++ b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/StringUtils.java
@@ -71,7 +71,7 @@
       return null;
     }
     StringTokenizer st = new StringTokenizer(str, delimiters);
-    List<String> tokens = new ArrayList<String>();
+    List<String> tokens = new ArrayList<>();
     while (st.hasMoreTokens()) {
       String token = st.nextToken();
       if (trimTokens) {
@@ -90,7 +90,7 @@
    * @return a non-null String
    */
   public static String joinAsString(String[] ... someArrays) {
-    Set<String> stringSet = new LinkedHashSet<String>();
+    Set<String> stringSet = new LinkedHashSet<>();
     if (someArrays != null) {
       for (String[] strings : someArrays)
         if (strings != null) {
diff --git a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/WTPResourcesContentProvider.java b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/WTPResourcesContentProvider.java
index e97f78d..c79de12 100644
--- a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/WTPResourcesContentProvider.java
+++ b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/WTPResourcesContentProvider.java
@@ -78,7 +78,7 @@
           if(facetedProject != null && 
               (facetedProject.hasProjectFacet(WTPProjectsUtil.DYNAMIC_WEB_FACET) || 
                facetedProject.hasProjectFacet(WTPProjectsUtil.EAR_FACET))) {
-            List newChildren = new ArrayList<Object>(currentChildren.size()+1);
+            List newChildren = new ArrayList<>(currentChildren.size()+1);
             newChildren.add(new WTPResourcesNode(project));
             newChildren.addAll(currentChildren);
             currentChildren.clear();
diff --git a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/conversion/MavenPluginUtils.java b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/conversion/MavenPluginUtils.java
index 10817c1..927e515 100644
--- a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/conversion/MavenPluginUtils.java
+++ b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/conversion/MavenPluginUtils.java
@@ -110,7 +110,7 @@
               }
             }
             if(!versions.isEmpty()) {
-              List<String> sorted = new ArrayList<String>(versions.size());
+              List<String> sorted = new ArrayList<>(versions.size());
               for(ComparableVersion v : versions) {
                 sorted.add(v.toString());
               }
diff --git a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/facets/WarUninstallDelegate.java b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/facets/WarUninstallDelegate.java
index 52977a8..f5271fe 100644
--- a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/facets/WarUninstallDelegate.java
+++ b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/facets/WarUninstallDelegate.java
@@ -35,7 +35,7 @@
 public void execute(IProject project, IProjectFacetVersion fv, Object config, IProgressMonitor monitor)
       throws CoreException {
     // remove web containers
-    ArrayList<IClasspathEntry> entries = new ArrayList<IClasspathEntry>();
+    ArrayList<IClasspathEntry> entries = new ArrayList<>();
 
     IClasspathEntry[] cp = JavaCore.create(project).getRawClasspath();
     for(IClasspathEntry entry : cp) {
diff --git a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/filtering/AbstractResourceFilteringConfiguration.java b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/filtering/AbstractResourceFilteringConfiguration.java
index 59a36b9..d0d060c 100644
--- a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/filtering/AbstractResourceFilteringConfiguration.java
+++ b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/filtering/AbstractResourceFilteringConfiguration.java
@@ -34,7 +34,7 @@
 
   @Override
 public List<String> getFilters() {
-    List<String> filters = new ArrayList<String>(mavenProjectFacade.getMavenProject().getFilters());
+    List<String> filters = new ArrayList<>(mavenProjectFacade.getMavenProject().getFilters());
     if (pluginConfiguration != null) {
       filters.addAll(pluginConfiguration.getFilters());
     }
diff --git a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/filtering/EarResourceFilteringConfiguration.java b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/filtering/EarResourceFilteringConfiguration.java
index 032f5ad..b8a05a5 100644
--- a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/filtering/EarResourceFilteringConfiguration.java
+++ b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/filtering/EarResourceFilteringConfiguration.java
@@ -55,7 +55,7 @@
 		
 		IPath cliPackageDir = getCLIPackageDir(project, mavenProject.getBuild().getDirectory());
 		
-		List<Xpp3Dom> resources = new ArrayList<Xpp3Dom>();
+		List<Xpp3Dom> resources = new ArrayList<>();
 		
 		IPath targetClasses = WTPProjectsUtil.getClassesFolder(mavenProjectFacade).getLocation();
 		
diff --git a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/filtering/ResourceFilteringBuildParticipant.java b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/filtering/ResourceFilteringBuildParticipant.java
index 63bb071..a6dce3c 100644
--- a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/filtering/ResourceFilteringBuildParticipant.java
+++ b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/filtering/ResourceFilteringBuildParticipant.java
@@ -201,7 +201,7 @@
 
   
   private Set<IPath> getResourcePaths(IMavenProjectFacade facade, List<Xpp3Dom> resources) {
-    Set<IPath> resourcePaths = new LinkedHashSet<IPath>();
+    Set<IPath> resourcePaths = new LinkedHashSet<>();
     for(Xpp3Dom resource : resources) {
       IPath folder= null;
       Xpp3Dom xpp3Directory = resource.getChild("directory"); //$NON-NLS-1$
diff --git a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/filtering/WebResourceFilteringConfiguration.java b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/filtering/WebResourceFilteringConfiguration.java
index 9c1daef..2ada9e3 100644
--- a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/filtering/WebResourceFilteringConfiguration.java
+++ b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/filtering/WebResourceFilteringConfiguration.java
@@ -50,7 +50,7 @@
   @Override
 public List<Xpp3Dom> getResources() {
     Xpp3Dom[] domResources = warPluginConfiguration.getWebResources();
-    List<Xpp3Dom> resources = new ArrayList<Xpp3Dom>();
+    List<Xpp3Dom> resources = new ArrayList<>();
     
     if(domResources != null && domResources.length > 0){
       resources.addAll(Arrays.asList(domResources));
diff --git a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/preferences/MavenWtpPreferencePage.java b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/preferences/MavenWtpPreferencePage.java
index d66f4fa..1311482 100644
--- a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/preferences/MavenWtpPreferencePage.java
+++ b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/preferences/MavenWtpPreferencePage.java
@@ -120,7 +120,7 @@
     configuratorEnablerGroup.setText(Messages.MavenWtpPreferencePage_Select_Active_JavaEE_Configurators);
     GridDataFactory.fillDefaults().applyTo(configuratorEnablerGroup);
     GridLayoutFactory.fillDefaults().margins(5, 0).applyTo(configuratorEnablerGroup);
-    enablersComposites = new ArrayList<ConfiguratorEnablerComposite>(configuratorEnablers.length);
+    enablersComposites = new ArrayList<>(configuratorEnablers.length);
 
     for (ConfiguratorEnabler configuratorEnabler : configuratorEnablers) {
       ConfiguratorEnablerComposite enablerComposite = new ConfiguratorEnablerComposite(configuratorEnablerGroup, 
@@ -408,7 +408,7 @@
    * @return
    */
   private List<IMavenProjectFacade> getImpactedProjects(final IMavenProjectRegistry projectManager) {
-    final List<IMavenProjectFacade> facades = new ArrayList<IMavenProjectFacade>();
+    final List<IMavenProjectFacade> facades = new ArrayList<>();
     IProject project = getProject();
     if(project == null) {
       //Get all workspace projects that might be impacted by the configuration change 
diff --git a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/preferences/MavenWtpPreferencesManagerImpl.java b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/preferences/MavenWtpPreferencesManagerImpl.java
index afdc10c..d201ee8 100644
--- a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/preferences/MavenWtpPreferencesManagerImpl.java
+++ b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/preferences/MavenWtpPreferencesManagerImpl.java
@@ -160,7 +160,7 @@
     if (enablerConfigs == null) {
       return Collections.emptyList();
     }
-    ArrayList<ConfiguratorEnabler> enablers = new ArrayList<ConfiguratorEnabler>();
+    ArrayList<ConfiguratorEnabler> enablers = new ArrayList<>();
     for (IConfigurationElement config : enablerConfigs) {
         String enablerId = config.getAttribute(ATTR_ENABLER_ID);
         String[] configuratorIds = split(config.getAttribute(ATTR_CONFIGURATOR_IDS));
diff --git a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/preferences/ConfiguratorEnabler.java b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/preferences/ConfiguratorEnabler.java
index 790db4f..d377fe1 100644
--- a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/preferences/ConfiguratorEnabler.java
+++ b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/preferences/ConfiguratorEnabler.java
@@ -35,7 +35,7 @@
 
   private String id;
 
-  private Set<String> projectConfiguratorIds = new LinkedHashSet<String>();
+  private Set<String> projectConfiguratorIds = new LinkedHashSet<>();
 
   IEclipsePreferences preferenceStore;
 
