Bug 530958: add support for web 4.0

Signed-off-by: Fred Bricon <fbricon@gmail.com>
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 0a51d7f..780f29e 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
@@ -72,6 +72,10 @@
 
   private static final String WEB_3_1_TEXT = "3.1"; //$NON-NLS-1$
   
+  private static final int WEB_4_0_ID = 40;
+
+  private static final String WEB_4_0_TEXT = "4.0"; //$NON-NLS-1$
+  
   private static final String FAIL_ON_MISSING_WEB_XML = "failOnMissingWebXml";
   
   
@@ -79,7 +83,12 @@
   private static final IProjectFacetVersion WEB_31 = WebFacetUtils.WEB_FACET.hasVersion(WEB_3_1_TEXT)?
                                                               WebFacetUtils.WEB_FACET.getVersion(WEB_3_1_TEXT)
                                                              :WebFacetUtils.WEB_30;
-  
+
+                                                              
+  private static final IProjectFacetVersion WEB_40 = WebFacetUtils.WEB_FACET.hasVersion(WEB_4_0_TEXT)?
+													          WebFacetUtils.WEB_FACET.getVersion(WEB_4_0_TEXT)
+													         :WEB_31;
+          
   private boolean defaultFailOnMissingWebXml = true; 
   
   private IProject project;
@@ -231,34 +240,34 @@
     }
 
     if(webXml.isAccessible()) {
-      try {
-        InputStream is = webXml.getContents();
-        try {
-          JavaEEQuickPeek jqp = new JavaEEQuickPeek(is);
-          switch(jqp.getVersion()) {
-            case J2EEVersionConstants.WEB_2_2_ID:
-              return WebFacetUtils.WEB_22;
-            case J2EEVersionConstants.WEB_2_3_ID:
-              return WebFacetUtils.WEB_23;
-            case J2EEVersionConstants.WEB_2_4_ID:
-              return WebFacetUtils.WEB_24;
-            case J2EEVersionConstants.WEB_2_5_ID:
-              return WebFacetUtils.WEB_25;
-            case J2EEVersionConstants.WEB_3_0_ID:
-              return WebFacetUtils.WEB_30;
-            case WEB_3_1_ID:
-              return WEB_31;
-          }
-        } finally {
-          is.close();
-        }
-      } catch(IOException ex) {
+	    try (InputStream is = webXml.getContents()){
+	      JavaEEQuickPeek jqp = new JavaEEQuickPeek(is);
+	      switch(jqp.getVersion()) {
+	        case J2EEVersionConstants.WEB_2_2_ID:
+	          return WebFacetUtils.WEB_22;
+	        case J2EEVersionConstants.WEB_2_3_ID:
+	          return WebFacetUtils.WEB_23;
+	        case J2EEVersionConstants.WEB_2_4_ID:
+	          return WebFacetUtils.WEB_24;
+	        case J2EEVersionConstants.WEB_2_5_ID:
+	          return WebFacetUtils.WEB_25;
+	        case J2EEVersionConstants.WEB_3_0_ID:
+	          return WebFacetUtils.WEB_30;
+	        case WEB_3_1_ID:
+	          return WEB_31;
+	        case WEB_4_0_ID:
+	          return WEB_40;
+	      }
+	    } catch(IOException | CoreException ex) {
         // expected
-      } catch(CoreException ex) {
-        // expected
-      }
+	    }
     }
-   
+
+    //If no web.xml found and the project depends on some java EE 8 jar, then set web facet to 4.0
+    if (WTPProjectsUtil.hasInClassPath(project, "javax.servlet.http.HttpServletMapping")) { //$NON-NLS-1$
+      return WEB_40;
+    }
+    
     //If no web.xml found and the project depends on some java EE 7 jar, then set web facet to 3.1
     if (WTPProjectsUtil.hasInClassPath(project, "javax.servlet.http.WebConnection")) { //$NON-NLS-1$
       return WEB_31;