diff -r 0cee67d100d6 java.source/src/org/netbeans/modules/java/JavaTemplateAttributesProvider.java
--- a/java.source/src/org/netbeans/modules/java/JavaTemplateAttributesProvider.java Tue Jun 24 10:15:33 2008 +0200
+++ b/java.source/src/org/netbeans/modules/java/JavaTemplateAttributesProvider.java Tue Jun 24 12:20:24 2008 +0200
@@ -41,10 +41,14 @@
package org.netbeans.modules.java;
-import java.util.Collections;
+import java.util.HashMap;
import java.util.Map;
+import java.util.logging.Level;
import java.util.logging.Logger;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import org.netbeans.api.java.classpath.ClassPath;
+import org.netbeans.api.java.queries.SourceLevelQuery;
import org.openide.filesystems.FileObject;
import org.openide.loaders.CreateFromTemplateAttributesProvider;
import org.openide.loaders.DataFolder;
@@ -52,12 +56,23 @@
/**
* Provides attributes that can be used inside scripting templates.
- *
package
- * - attribute containing
target
folder as package.
+ *
+ * package
+ * - attribute containing
target
folder as package.
+ * javaSourceLevel
+ * - source level to be used for Java code (e.g. "1.5")
+ * java15style
+ * - this attribute is defined only if java source level is
+ * greater or equal to "1.5" (so generics/annotations may be used)
+ *
*
* @author Jan Pokorsky
+ * @author Petr Slechta
*/
public final class JavaTemplateAttributesProvider implements CreateFromTemplateAttributesProvider {
+
+ private static final Logger LOG = Logger.getLogger(JavaTemplateAttributesProvider.class.getName());
+ private static final Pattern JAVA_VER = Pattern.compile("(\\d+)\\.(\\d+).*");
public Map attributesFor(DataObject template, DataFolder target, String name) {
FileObject templateFO = template.getPrimaryFile();
@@ -66,12 +81,41 @@
}
FileObject targetFO = target.getPrimaryFile();
+ Map result = new HashMap();
+
+ String sourceLevel = SourceLevelQuery.getSourceLevel(targetFO);
+ if (sourceLevel != null) {
+ result.put("javaSourceLevel", sourceLevel); // NOI18N
+ if (isJava15orLater(sourceLevel))
+ result.put("java15style", Boolean.TRUE); // NOI18N
+ }
+
ClassPath cp = ClassPath.getClassPath(targetFO, ClassPath.SOURCE);
if (cp == null) {
- Logger.getLogger(JavaTemplateAttributesProvider.class.getName()).warning("No classpath was found for folder: " + target.getPrimaryFile()); // NOI18N
- return Collections.emptyMap();
+ LOG.warning("No classpath was found for folder: " + target.getPrimaryFile()); // NOI18N
}
- return Collections.singletonMap("package", cp.getResourceName(targetFO, '.', false)); // NOI18N
+ else {
+ result.put("package", cp.getResourceName(targetFO, '.', false)); // NOI18N
+ }
+ return result;
}
+ private boolean isJava15orLater(String sourceLevel) {
+ Matcher m = JAVA_VER.matcher(sourceLevel);
+ if (m.matches()) {
+ try {
+ int major = Integer.parseInt(m.group(1));
+ int minor = Integer.parseInt(m.group(2));
+ return (major >= 1 && minor >= 5);
+ }
+ catch (NumberFormatException e) {
+ LOG.log(Level.WARNING, "Cannot parse java source level: "+sourceLevel, e); // NOI18N
+ }
+ }
+ else {
+ LOG.warning("Cannot parse java source level: "+sourceLevel); // NOI18N
+ }
+ return false;
+ }
+
}
diff -r 0cee67d100d6 web.core/src/org/netbeans/modules/web/core/resources/templates/Servlet.template
--- a/web.core/src/org/netbeans/modules/web/core/resources/templates/Servlet.template Tue Jun 24 10:15:33 2008 +0200
+++ b/web.core/src/org/netbeans/modules/web/core/resources/templates/Servlet.template Tue Jun 24 12:20:24 2008 +0200
@@ -55,6 +55,9 @@
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
+<#if java15style??>
+ @Override
+#if>
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
@@ -67,6 +70,9 @@
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
+<#if java15style??>
+ @Override
+#if>
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
@@ -76,6 +82,9 @@
* Returns a short description of the servlet.
* @return a String containing servlet description
*/
+<#if java15style??>
+ @Override
+#if>
public String getServletInfo() {
return "Short description";
}//