Index: src/main/java/org/apache/maven/plugin/idea/IdeaProjectMojo.java =================================================================== --- src/main/java/org/apache/maven/plugin/idea/IdeaProjectMojo.java (revision 888559) +++ src/main/java/org/apache/maven/plugin/idea/IdeaProjectMojo.java (working copy) @@ -66,6 +66,21 @@ private String jdkLevel; /** + * Specify the language level to use for the features such as assert keywords (jdk 1.4) + * enums (jdk 1.5), or @Overrides for interface methods (jdk 1.6) + * Will only effect jdk 1.4+ + * Literal values to use: + * + * + * @parameter expression="${jdkLanguageLevel}" + */ + private String jdkLanguageLevel; + + /** * Specify the resource pattern in wildcard format, for example "?*.xml;?*.properties". * Currently supports 4.x and 5.x. * Because IDEA doesn't distinguish between source and resources directories, this is needed. @@ -237,20 +252,27 @@ component.addAttribute( "project-jdk-name", jdkName ); String jdkLevel = this.jdkLevel; + if ( jdkLevel == null ) { jdkLevel = System.getProperty( "java.specification.version" ); } + String jdkLanguageLevel = this.jdkLanguageLevel; + if ( jdkLevel.startsWith( "1.4" ) ) { component.addAttribute( "assert-keyword", "true" ); component.addAttribute( "jdk-15", "false" ); + + setLanguageLevel(component, jdkLevel, jdkLanguageLevel); } else if ( jdkLevel.compareTo( "1.5" ) >= 0 ) { component.addAttribute( "assert-keyword", "true" ); component.addAttribute( "jdk-15", "true" ); + + setLanguageLevel(component, jdkLevel, jdkLanguageLevel); } else { @@ -258,6 +280,30 @@ } } + private void setLanguageLevel(Element component, String jdkLevel, String jdkLanguageLevel) + { + getLog().info("jdkLanguageLevel = " + jdkLanguageLevel); + + if(jdkLanguageLevel == null) + { + // could do this by parsing jdkLevel but I think idea is capped at 1_6 + switch(jdkLevel.charAt(2)) + { + case 4: + jdkLanguageLevel = "JDK_1_4"; + break; + case 5: + jdkLanguageLevel = "JDK_1_5"; + break; + default: // cap to 1_6 + jdkLanguageLevel = "JDK_1_6"; + break; + } + } + + component.addAttribute("languageLevel", jdkLanguageLevel); + } + /** * Sets the wilcard resource patterns. *