8209064: Make intellij support more robust after changes for 2018.2
authormcimadamore
Wed, 29 Aug 2018 11:25:51 +0100
changeset 51565 7e5f08c619e3
parent 51564 0f8e680269d4
child 51566 904cf5407ac7
8209064: Make intellij support more robust after changes for 2018.2 Summary: Do not treat build.xml wrapper as a template file Reviewed-by: erikj, ihse
bin/idea.sh
make/idea/build.xml
make/idea/template/ant.xml
make/idea/template/build.xml
make/idea/template/misc.xml
make/idea/template/workspace.xml
make/langtools/build.xml
make/langtools/intellij/ant.xml
make/langtools/intellij/build.xml
make/langtools/intellij/codeStyleSettings.xml
make/langtools/intellij/compiler.xml
make/langtools/intellij/copyright/langtools.xml
make/langtools/intellij/copyright/profiles_settings.xml
make/langtools/intellij/inspectionProfiles/langtools.xml
make/langtools/intellij/inspectionProfiles/profiles_settings.xml
make/langtools/intellij/langtools.iml
make/langtools/intellij/misc.xml
make/langtools/intellij/modules.xml
make/langtools/intellij/runConfigurations/javac.xml
make/langtools/intellij/runConfigurations/javadoc.xml
make/langtools/intellij/runConfigurations/javap.xml
make/langtools/intellij/runConfigurations/jshell.xml
make/langtools/intellij/runConfigurations/sjavac.xml
make/langtools/intellij/src/idea/LangtoolsIdeaAntLogger.java
make/langtools/intellij/template/ant.xml
make/langtools/intellij/template/codeStyleSettings.xml
make/langtools/intellij/template/compiler.xml
make/langtools/intellij/template/copyright/langtools.xml
make/langtools/intellij/template/copyright/profiles_settings.xml
make/langtools/intellij/template/inspectionProfiles/langtools.xml
make/langtools/intellij/template/inspectionProfiles/profiles_settings.xml
make/langtools/intellij/template/langtools.iml
make/langtools/intellij/template/misc.xml
make/langtools/intellij/template/modules.xml
make/langtools/intellij/template/runConfigurations/javac.xml
make/langtools/intellij/template/runConfigurations/javadoc.xml
make/langtools/intellij/template/runConfigurations/javap.xml
make/langtools/intellij/template/runConfigurations/jshell.xml
make/langtools/intellij/template/runConfigurations/sjavac.xml
make/langtools/intellij/template/src/idea/LangtoolsIdeaAntLogger.java
make/langtools/intellij/template/vcs.xml
make/langtools/intellij/template/workspace.xml
make/langtools/intellij/vcs.xml
make/langtools/intellij/workspace.xml
--- a/bin/idea.sh	Wed Aug 29 14:10:19 2018 +0530
+++ b/bin/idea.sh	Wed Aug 29 11:25:51 2018 +0100
@@ -68,12 +68,9 @@
 cd $IDEA_OUTPUT; IDEA_OUTPUT=`pwd`
 
 MAKE_DIR="$SCRIPT_DIR/../make"
-SUPPORT_DIR="$SCRIPT_DIR/../build/.idea-support"
 IDEA_MAKE="$MAKE_DIR/idea"
 IDEA_TEMPLATE="$IDEA_MAKE/template"
 
-mkdir -p $SUPPORT_DIR
-
 cp -r "$IDEA_TEMPLATE"/* "$IDEA_OUTPUT"
 
 #init template variables
@@ -127,11 +124,6 @@
   echo "FATAL: SPEC is empty" >&2; exit 1
 fi
 
-# move build.xml out of .idea, see IDEA-189915
-IDEA_BUILD_OLD=$IDEA_BUILD
-IDEA_BUILD=$SUPPORT_DIR/build.xml
-mv $IDEA_BUILD_OLD $IDEA_BUILD
-
 SOURCE_FOLDER="      <sourceFolder url=\"file://\$MODULE_DIR\$/####\" isTestSource=\"false\" />"
 SOURCE_FOLDERS_DONE="false"
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/idea/build.xml	Wed Aug 29 11:25:51 2018 +0100
@@ -0,0 +1,43 @@
+<!-- importing.xml -->
+<project name="jdk">
+
+    <script language="javascript" classpath="${idea.dir}/classes">
+        var JdkLogger = Java.type("idea.JdkIdeaAntLogger");
+        new JdkLogger(project)
+    </script>
+
+    <macrodef name="call-make">
+        <attribute name="dir"/>
+        <attribute name="args"/>
+        <sequential>
+            <exec executable="make" dir="@{dir}" failonerror="true">
+                <arg line="@{args}"/>
+                <env key="CLASSPATH" value = ""/>
+            </exec>
+        </sequential>
+    </macrodef>
+
+    <target name="cond-clean" unless="${intellij.ismake}">
+        <antcall target="clean"/>
+    </target>
+
+    <target name="post-make" depends="cond-clean, build-module"/>
+
+    <!--
+        **** Global JDK Build Targets
+    -->
+
+    <target name="clean">
+        <echo message="base = ${basedir}"/>
+        <call-make dir = "${build.target.dir}" args = "reconfigure"/>
+        <call-make dir = "${build.target.dir}" args = "clean"/>
+    </target>
+
+    <target name="images">
+        <call-make dir = "${build.target.dir}" args = "images"/>
+    </target>
+
+    <target name="build-module">
+        <call-make dir = "${build.target.dir}" args = "${module.name}"/>
+    </target>
+</project>
--- a/make/idea/template/ant.xml	Wed Aug 29 14:10:19 2018 +0530
+++ b/make/idea/template/ant.xml	Wed Aug 29 11:25:51 2018 +0100
@@ -1,11 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="AntConfiguration">
-    <buildFile url="file://$PROJECT_DIR$/build/.idea-support/build.xml">
+    <buildFile url="file://$PROJECT_DIR$/make/idea/build.xml">
       <properties>
         <property name="intellij.ismake" value="$IsMake$" />
         <property name="build.target.dir" value="specDir" /> <!-- this will be replaced -->
         <property name="module.name" value="java.base" /> <!-- this will be replaced -->
+        <property name="idea.dir" value="$ModuleFileDir$" />
       </properties>
       <executeOn event="afterCompilation" target="post-make" />
     </buildFile>
--- a/make/idea/template/build.xml	Wed Aug 29 14:10:19 2018 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-<!-- importing.xml -->
-<project name="jdk" basedir="../..">
-
-    <script language="javascript" classpath=".idea/classes">
-        var JdkLogger = Java.type("idea.JdkIdeaAntLogger");
-        new JdkLogger(project)
-    </script>
-
-    <macrodef name="call-make">
-        <attribute name="dir"/>
-        <attribute name="args"/>
-        <sequential>
-            <exec executable="make" dir="@{dir}" failonerror="true">
-                <arg line="@{args}"/>
-                <env key="CLASSPATH" value = ""/>
-            </exec>
-        </sequential>
-    </macrodef>
-
-    <target name="cond-clean" unless="${intellij.ismake}">
-        <antcall target="clean"/>
-    </target>
-
-    <target name="post-make" depends="cond-clean, build-module"/>
-
-    <!--
-        **** Global JDK Build Targets
-    -->
-
-    <target name="clean">
-        <echo message="base = ${basedir}"/>
-        <call-make dir = "${build.target.dir}" args = "reconfigure"/>
-        <call-make dir = "${build.target.dir}" args = "clean"/>
-    </target>
-
-    <target name="images">
-        <call-make dir = "${build.target.dir}" args = "images"/>
-    </target>
-
-    <target name="build-module">
-        <call-make dir = "${build.target.dir}" args = "${module.name}"/>
-    </target>
-</project>
--- a/make/idea/template/misc.xml	Wed Aug 29 14:10:19 2018 +0530
+++ b/make/idea/template/misc.xml	Wed Aug 29 11:25:51 2018 +0100
@@ -9,10 +9,10 @@
     <jre alt="true" value="images_jdk" /> <!-- this will be replaced -->
     <options></options>
     <ant>
-      <target file="file://$PROJECT_DIR$/build/.idea-support/build.xml" name="images" />
+      <target file="file://$PROJECT_DIR$/make/idea/build.xml" name="images" />
     </ant>
   </component>
   <component name="ProjectRootManager" version="2" languageLevel="JDK_1_9" assert-keyword="true" jdk-15="true">
-    <output url="file://$PROJECT_DIR$/build/.idea-support/out" />
+    <output url="file://$PROJECT_DIR$/build/out" />
   </component>
 </project>
--- a/make/idea/template/workspace.xml	Wed Aug 29 14:10:19 2018 +0530
+++ b/make/idea/template/workspace.xml	Wed Aug 29 11:25:51 2018 +0100
@@ -11,24 +11,11 @@
   <component name="antWorkspaceConfiguration">
     <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
     <option name="FILTER_TARGETS" value="false" />
-    <buildFile url="file://$PROJECT_DIR$/.idea/build.xml">
+    <buildFile url="file://$PROJECT_DIR$/make/idea/build.xml">
       <runInBackground value="false" />
       <targetFilters>
-        <filter targetName="post-make" isVisible="false" />
         <filter targetName="clean" isVisible="true" />
-        <filter targetName="-do-configure" isVisible="false" />
         <filter targetName="images" isVisible="true" />
-        <filter targetName="build-module" isVisible="true" />
-        <filter targetName="jtreg-debug" isVisible="false" />
-        <filter targetName="jtreg-debug-internal" isVisible="false" />
-        <filter targetName="jtreg" isVisible="false" />
-        <filter targetName="-check-jtreg.home" isVisible="false" />
-        <filter targetName="-def-check" isVisible="false" />
-        <filter targetName="-def-jtreg" isVisible="false" />
-        <filter targetName="-check-boot.java.home" isVisible="false" />
-        <filter targetName="-check-target.java.home" isVisible="false" />
-        <filter targetName="find-jdk-build-dir" isVisible="false" />
-        <filter targetName="check-env" isVisible="false" />
       </targetFilters>
       <treeView value="false" />
       <expanded value="true" />
--- a/make/langtools/build.xml	Wed Aug 29 14:10:19 2018 +0530
+++ b/make/langtools/build.xml	Wed Aug 29 11:25:51 2018 +0100
@@ -76,7 +76,6 @@
     <property name="make.conf.dir" location="${make.dir}/conf"/>
     <property name="make.tools.dir" location="${make.dir}/tools"/>
     <property name="build.dir" location="build/langtools"/>
-    <property name="idea.support.dir" location="build/.idea-support"/>
     <property name="build.modules" location="${build.dir}/modules"/>
     <property name="build.gensrc" location="${build.dir}/gensrc"/>
     <property name="build.tools" location="${build.dir}/toolclasses"/>
@@ -270,14 +269,11 @@
     <target name="idea" depends="-check-langtools.jdk.home">
         <mkdir dir=".idea"/>
         <copy todir=".idea" >
-            <fileset dir="${make.dir}/intellij">
+            <fileset dir="${make.dir}/intellij/template">
                <exclude name="**/src/**"/>
                <exclude name="**/utils/**"/>
             </fileset>
         </copy>
-        <!-- move build.xml out of .idea, see IDEA-189915 -->
-        <mkdir dir="${idea.support.dir}"/>
-        <move todir="${idea.support.dir}" file=".idea/build.xml"/>
         <condition property="idea.jtreg.home" value="${jtreg.home}" else = "[jtreg.home]">
             <isset property="jtreg.home"/>
         </condition>
@@ -293,7 +289,7 @@
         <mkdir dir=".idea/classes"/>
         <javac source="${javac.build.source}"
                target="${javac.build.target}"
-               srcdir="${make.dir}/intellij/src"
+               srcdir="${make.dir}/intellij/template/src"
                destdir=".idea/classes"/>
     </target>
 
--- a/make/langtools/intellij/ant.xml	Wed Aug 29 14:10:19 2018 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="AntConfiguration">
-    <buildFile url="file://$PROJECT_DIR$/build/.idea-support/build.xml">
-      <properties>
-	    <property name="langtools.jdk.home" value="@IDEA_TARGET_JDK@" />
-        <property name="intellij.ismake" value="$IsMake$" />
-      </properties>
-      <executeOn event="afterCompilation" target="post-make" />
-    </buildFile>
-  </component>
-</project>
--- a/make/langtools/intellij/build.xml	Wed Aug 29 14:10:19 2018 +0530
+++ b/make/langtools/intellij/build.xml	Wed Aug 29 11:25:51 2018 +0100
@@ -1,12 +1,12 @@
 <!-- importing.xml -->
-<project name="langtools" basedir="../..">
+<project name="langtools" basedir = "../../..">
 
-    <script language="javascript" classpath=".idea/classes">
+    <script language="javascript" classpath="${idea.dir}/classes">
         var LangtoolsLogger = Java.type("idea.LangtoolsIdeaAntLogger");
         new LangtoolsLogger(project)
     </script>
 
-    <import file="../../make/langtools/build.xml"/>
+    <import file="../build.xml"/>
 
     <target name="cond-clean" unless="${intellij.ismake}">
         <antcall target="clean"/>
--- a/make/langtools/intellij/codeStyleSettings.xml	Wed Aug 29 14:10:19 2018 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="ProjectCodeStyleSettingsManager">
-    <option name="PER_PROJECT_SETTINGS">
-      <value>
-        <option name="INSERT_INNER_CLASS_IMPORTS" value="true" />
-        <option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="999" />
-        <option name="NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND" value="999" />
-        <option name="RIGHT_MARGIN" value="100" />
-        <option name="JD_DO_NOT_WRAP_ONE_LINE_COMMENTS" value="true" />
-        <XML>
-          <option name="XML_LEGACY_SETTINGS_IMPORTED" value="true" />
-        </XML>
-        <codeStyleSettings language="JAVA">
-          <option name="SPACE_AFTER_TYPE_CAST" value="false" />
-        </codeStyleSettings>
-      </value>
-    </option>
-    <option name="USE_PER_PROJECT_SETTINGS" value="true" />
-  </component>
-</project>
-
--- a/make/langtools/intellij/compiler.xml	Wed Aug 29 14:10:19 2018 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="CompilerConfiguration">
-    <option name="DEFAULT_COMPILER" value="Javac" />
-    <excludeFromCompile>
-      <directory url="file://$PROJECT_DIR$/src" includeSubdirectories="true" />
-      <directory url="file://$PROJECT_DIR$/test" includeSubdirectories="true" />
-      <directory url="file://$PROJECT_DIR$/build" includeSubdirectories="true" />
-      <directory url="file://$PROJECT_DIR$/make" includeSubdirectories="true" />
-    </excludeFromCompile>
-    <resourceExtensions />
-    <wildcardResourcePatterns />
-    <annotationProcessing>
-      <profile default="true" name="Default" enabled="false">
-        <processorPath useClasspath="true" />
-      </profile>
-    </annotationProcessing>
-  </component>
-</project>
-
--- a/make/langtools/intellij/copyright/langtools.xml	Wed Aug 29 14:10:19 2018 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,9 +0,0 @@
-<component name="CopyrightManager">
-  <copyright>
-    <option name="notice" value="Copyright (c) &amp;#36;today.year, Oracle and/or its affiliates. All rights reserved.&#10;DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.&#10;&#10;This code is free software; you can redistribute it and/or modify it&#10;under the terms of the GNU General Public License version 2 only, as&#10;published by the Free Software Foundation.  Oracle designates this&#10;particular file as subject to the &quot;Classpath&quot; exception as provided&#10;by Oracle in the LICENSE file that accompanied this code.&#10;&#10;This code is distributed in the hope that it will be useful, but WITHOUT&#10;ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or&#10;FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License&#10;version 2 for more details (a copy is included in the LICENSE file that&#10;accompanied this code).&#10;&#10;You should have received a copy of the GNU General Public License version&#10;2 along with this work; if not, write to the Free Software Foundation,&#10;Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.&#10;&#10;Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA&#10;or visit www.oracle.com if you need additional information or have any&#10;questions." />
-    <option name="keyword" value="Copyright" />
-    <option name="allowReplaceKeyword" value="" />
-    <option name="myName" value="langtools" />
-    <option name="myLocal" value="true" />
-  </copyright>
-</component>
--- a/make/langtools/intellij/copyright/profiles_settings.xml	Wed Aug 29 14:10:19 2018 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-<component name="CopyrightManager">
-  <settings default="langtools">
-    <LanguageOptions name="JAVA">
-      <option name="fileLocation" value="1" />
-    </LanguageOptions>
-  </settings>
-</component>
--- a/make/langtools/intellij/inspectionProfiles/langtools.xml	Wed Aug 29 14:10:19 2018 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-<component name="InspectionProjectProfileManager">
-  <profile version="1.0" is_locked="false">
-    <option name="myName" value="langtools" />
-    <option name="myLocal" value="false" />
-    <inspection_tool class="LoggerInitializedWithForeignClass" enabled="false" level="WARNING" enabled_by_default="false">
-      <option name="loggerClassName" value="org.apache.log4j.Logger,org.slf4j.LoggerFactory,org.apache.commons.logging.LogFactory,java.util.logging.Logger" />
-      <option name="loggerFactoryMethodName" value="getLogger,getLogger,getLog,getLogger" />
-    </inspection_tool>
-    <inspection_tool class="MismatchedCollectionQueryUpdate" enabled="false" level="WARNING" enabled_by_default="false">
-      <option name="queryNames">
-        <value />
-      </option>
-      <option name="updateNames">
-        <value />
-      </option>
-    </inspection_tool>
-    <inspection_tool class="RawUseOfParameterizedType" enabled="true" level="WARNING" enabled_by_default="true">
-      <option name="ignoreObjectConstruction" value="false" />
-      <option name="ignoreUncompilable" value="true" />
-    </inspection_tool>
-    <inspection_tool class="SpellCheckingInspection" enabled="true" level="TYPO" enabled_by_default="true">
-      <option name="processCode" value="false" />
-      <option name="processLiterals" value="false" />
-      <option name="processComments" value="false" />
-    </inspection_tool>
-    <inspection_tool class="SuspiciousMethodCalls" enabled="true" level="WARNING" enabled_by_default="true">
-      <option name="REPORT_CONVERTIBLE_METHOD_CALLS" value="false" />
-    </inspection_tool>
-  </profile>
-</component>
--- a/make/langtools/intellij/inspectionProfiles/profiles_settings.xml	Wed Aug 29 14:10:19 2018 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-<component name="InspectionProjectProfileManager">
-  <settings>
-    <option name="PROJECT_PROFILE" value="langtools" />
-    <option name="USE_PROJECT_PROFILE" value="true" />
-    <version value="1.0" />
-  </settings>
-</component>
--- a/make/langtools/intellij/langtools.iml	Wed Aug 29 14:10:19 2018 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module type="JAVA_MODULE" version="4">
-  <component name="NewModuleRootManager" inherit-compiler-output="true">
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/src/java.compiler/share/classes" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/jdk.compiler/share/classes" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/jdk.javadoc/share/classes" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/jdk.jdeps/share/classes" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/jdk.jshell/share/classes" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/build/langtools/gensrc/jdk.compiler" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/build/langtools/gensrc/jdk.javadoc" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/build/langtools/gensrc/jdk.jdeps" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/make/langtools/tools" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/make/langtools/src/classes" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/build/langtools/gensrc/jdk.compiler" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/build/langtools/gensrc/jdk.javadoc" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/build/langtools/gensrc/jdk.jdeps" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/build/langtools/gensrc/jdk.jshell" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/jdk.compiler" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/java.compiler" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/jdk.jdeps" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/jdk.jshell" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/jdk.javadoc" isTestSource="false" />
-      <excludeFolder url="file://$MODULE_DIR$/build" />
-    </content>
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="inheritedJdk" />
-  </component>
-</module>
--- a/make/langtools/intellij/misc.xml	Wed Aug 29 14:10:19 2018 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="EntryPointsManager">
-    <entry_points version="2.0" />
-  </component>
-  <component name="JTRegService">
-    <path>@IDEA_JTREG_HOME@</path>
-    <workDir>build</workDir>
-    <jre alt="true" value="@IDEA_TARGET_JDK@" />
-    <options>@XPATCH@</options>
-    <ant>
-      <target file="file://$PROJECT_DIR$/build/.idea-support/build.xml" name="build-all-classes" />
-    </ant>
-  </component>
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
-    <output url="file://$PROJECT_DIR$/build/.idea-support/out" />
-  </component>
-</project>
--- a/make/langtools/intellij/modules.xml	Wed Aug 29 14:10:19 2018 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="ProjectModuleManager">
-    <modules>
-      <module fileurl="file://$PROJECT_DIR$/.idea/langtools.iml" filepath="$PROJECT_DIR$/.idea/langtools.iml" />
-    </modules>
-  </component>
-</project>
-
--- a/make/langtools/intellij/runConfigurations/javac.xml	Wed Aug 29 14:10:19 2018 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-<component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="javac" type="Application" factoryName="Application">
-    <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
-    <option name="MAIN_CLASS_NAME" value="com.sun.tools.javac.Main" />
-    <option name="VM_PARAMETERS" value='@XPATCH@' />
-    <option name="PROGRAM_PARAMETERS" value="" />
-    <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
-    <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
-    <option name="ALTERNATIVE_JRE_PATH" value="@IDEA_TARGET_JDK@" />
-    <option name="ENABLE_SWING_INSPECTOR" value="false" />
-    <option name="ENV_VARIABLES" />
-    <option name="PASS_PARENT_ENVS" value="true" />
-    <module name="langtools" />
-    <envs />
-    <RunnerSettings RunnerId="Run" />
-    <ConfigurationWrapper RunnerId="Run" />
-    <method>
-      <option name="Make" enabled="false" />
-      <option name="AntTarget" enabled="true" antfile="file://$PROJECT_DIR$/.idea/build.xml" target="build-all-classes" />
-    </method>
-  </configuration>
-</component>
--- a/make/langtools/intellij/runConfigurations/javadoc.xml	Wed Aug 29 14:10:19 2018 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-<component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="javadoc" type="Application" factoryName="Application">
-    <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
-    <option name="MAIN_CLASS_NAME" value="jdk.javadoc.internal.tool.Main" />
-    <option name="VM_PARAMETERS" value='@XPATCH@ --add-exports=jdk.javadoc/jdk.javadoc.internal.tool=ALL-UNNAMED' />
-    <option name="PROGRAM_PARAMETERS" value="" />
-    <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
-    <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
-    <option name="ALTERNATIVE_JRE_PATH" value="@IDEA_TARGET_JDK@" />
-    <option name="ENABLE_SWING_INSPECTOR" value="false" />
-    <option name="ENV_VARIABLES" />
-    <option name="PASS_PARENT_ENVS" value="true" />
-    <module name="langtools" />
-    <envs />
-    <RunnerSettings RunnerId="Run" />
-    <ConfigurationWrapper RunnerId="Run" />
-    <method>
-      <option name="Make" enabled="false" />
-      <option name="AntTarget" enabled="true" antfile="file://$PROJECT_DIR$/.idea/build.xml" target="build-all-classes" />
-    </method>
-  </configuration>
-</component>
--- a/make/langtools/intellij/runConfigurations/javap.xml	Wed Aug 29 14:10:19 2018 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-<component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="javap" type="Application" factoryName="Application">
-    <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
-    <option name="MAIN_CLASS_NAME" value="com.sun.tools.javap.Main" />
-    <option name="VM_PARAMETERS" value='@XPATCH@ --add-exports=jdk.jdeps/com.sun.tools.javap=ALL-UNNAMED' />
-    <option name="PROGRAM_PARAMETERS" value="" />
-    <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
-    <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
-    <option name="ALTERNATIVE_JRE_PATH" value="@IDEA_TARGET_JDK@" />
-    <option name="ENABLE_SWING_INSPECTOR" value="false" />
-    <option name="ENV_VARIABLES" />
-    <option name="PASS_PARENT_ENVS" value="true" />
-    <module name="langtools" />
-    <envs />
-    <RunnerSettings RunnerId="Run" />
-    <ConfigurationWrapper RunnerId="Run" />
-    <method>
-      <option name="Make" enabled="false" />
-      <option name="AntTarget" enabled="true" antfile="file://$PROJECT_DIR$/.idea/build.xml" target="build-all-classes" />
-    </method>
-  </configuration>
-</component>
--- a/make/langtools/intellij/runConfigurations/jshell.xml	Wed Aug 29 14:10:19 2018 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-<component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="jshell" type="Application" factoryName="Application">
-    <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
-    <option name="MAIN_CLASS_NAME" value="jdk.internal.jshell.tool.JShellToolProvider" />
-    <option name="VM_PARAMETERS" value='@XPATCH@ --add-exports=jdk.jshell/jdk.internal.jshell.tool=ALL-UNNAMED' />
-    <option name="PROGRAM_PARAMETERS" value="" />
-    <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
-    <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
-    <option name="ALTERNATIVE_JRE_PATH" value="@IDEA_TARGET_JDK@" />
-    <option name="ENABLE_SWING_INSPECTOR" value="false" />
-    <option name="ENV_VARIABLES" />
-    <option name="PASS_PARENT_ENVS" value="true" />
-    <module name="langtools" />
-    <envs />
-    <method>
-      <option name="Make" enabled="false" />
-      <option name="AntTarget" enabled="true" antfile="file://$PROJECT_DIR$/.idea/build.xml" target="build-all-classes" />
-    </method>
-  </configuration>
-</component>
--- a/make/langtools/intellij/runConfigurations/sjavac.xml	Wed Aug 29 14:10:19 2018 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-<component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="sjavac" type="Application" factoryName="Application">
-    <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
-    <option name="MAIN_CLASS_NAME" value="com.sun.tools.sjavac.Main" />
-    <option name="VM_PARAMETERS" value='@XPATCH@ --add-exports=jdk.compiler/com.sun.tools.sjavac=ALL-UNNAMED' />
-    <option name="PROGRAM_PARAMETERS" value="" />
-    <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
-    <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
-    <option name="ALTERNATIVE_JRE_PATH" value="@IDEA_TARGET_JDK@" />
-    <option name="ENABLE_SWING_INSPECTOR" value="false" />
-    <option name="ENV_VARIABLES" />
-    <option name="PASS_PARENT_ENVS" value="true" />
-    <module name="langtools" />
-    <envs />
-    <RunnerSettings RunnerId="Run" />
-    <ConfigurationWrapper RunnerId="Run" />
-    <method>
-      <option name="Make" enabled="false" />
-      <option name="AntTarget" enabled="true" antfile="file://$PROJECT_DIR$/.idea/build.xml" target="build-all-classes" />
-    </method>
-  </configuration>
-</component>
--- a/make/langtools/intellij/src/idea/LangtoolsIdeaAntLogger.java	Wed Aug 29 14:10:19 2018 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,364 +0,0 @@
-/*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package idea;
-
-import org.apache.tools.ant.BuildEvent;
-import org.apache.tools.ant.BuildListener;
-import org.apache.tools.ant.DefaultLogger;
-import org.apache.tools.ant.Project;
-
-import java.util.EnumSet;
-import java.util.Stack;
-
-import static org.apache.tools.ant.Project.*;
-
-/**
- * This class is used to wrap the IntelliJ ant logger in order to provide more meaningful
- * output when building langtools. The basic ant output in IntelliJ can be quite cumbersome to
- * work with, as it provides two separate views: (i) a tree view, which is good to display build task
- * in a hierarchical fashion as they are processed; and a (ii) plain text view, which gives you
- * the full ant output. The main problem is that javac-related messages are buried into the
- * ant output (which is made very verbose by IntelliJ in order to support the tree view). It is
- * not easy to figure out which node to expand in order to see the error message; switching
- * to plain text doesn't help either, as now the output is totally flat.
- *
- * This logger class removes a lot of verbosity from the IntelliJ ant logger by not propagating
- * all the events to the IntelliJ's logger. In addition, certain events are handled in a custom
- * fashion, to generate better output during the build.
- */
-public final class LangtoolsIdeaAntLogger extends DefaultLogger {
-
-    /**
-     * This is just a way to pass in customized binary string predicates;
-     *
-     * TODO: replace with @code{BiPredicate<String, String>} and method reference when moving to 8
-     */
-    enum StringBinaryPredicate {
-        CONTAINS() {
-            @Override
-            boolean apply(String s1, String s2) {
-                return s1.contains(s2);
-            }
-        },
-        STARTS_WITH {
-            @Override
-            boolean apply(String s1, String s2) {
-                return s1.startsWith(s2);
-            }
-        };
-
-        abstract boolean apply(String s1, String s2);
-    }
-
-    /**
-     * Various kinds of ant messages that we shall intercept
-     */
-    enum MessageKind {
-
-        /** a javac error */
-        JAVAC_ERROR(StringBinaryPredicate.CONTAINS, MSG_ERR, "error:", "compiler.err"),
-        /** a javac warning */
-        JAVAC_WARNING(StringBinaryPredicate.CONTAINS, MSG_WARN, "warning:", "compiler.warn"),
-        /** a javac note */
-        JAVAC_NOTE(StringBinaryPredicate.CONTAINS, MSG_INFO, "note:", "compiler.note"),
-        /** a javac raw error (these typically come from a build misconfiguration - such as a bad javac flag) */
-        JAVAC_RAW_ERROR(StringBinaryPredicate.STARTS_WITH, MSG_INFO, "javac: "),
-        /** continuation of some javac error message */
-        JAVAC_NESTED_DIAG(StringBinaryPredicate.STARTS_WITH, MSG_INFO, "  "),
-        /** a javac crash */
-        JAVAC_CRASH(StringBinaryPredicate.STARTS_WITH, MSG_ERR, "An exception has occurred in the compiler"),
-        /** jtreg test success */
-        JTREG_TEST_PASSED(StringBinaryPredicate.STARTS_WITH, MSG_INFO, "Passed: "),
-        /** jtreg test failure */
-        JTREG_TEST_FAILED(StringBinaryPredicate.STARTS_WITH, MSG_ERR, "FAILED: "),
-        /** jtreg test error */
-        JTREG_TEST_ERROR(StringBinaryPredicate.STARTS_WITH, MSG_ERR, "Error: "),
-        /** jtreg report */
-        JTREG_TEST_REPORT(StringBinaryPredicate.STARTS_WITH, MSG_INFO, "Report written");
-
-        StringBinaryPredicate sbp;
-        int priority;
-        String[] keys;
-
-        MessageKind(StringBinaryPredicate sbp, int priority, String... keys) {
-            this.sbp = sbp;
-            this.priority = priority;
-            this.keys = keys;
-        }
-
-        /**
-         * Does a given message string matches this kind?
-         */
-        boolean matches(String s) {
-            for (String key : keys) {
-                if (sbp.apply(s, key)) {
-                    return true;
-                }
-            }
-            return false;
-        }
-    }
-
-    /**
-     * This enum is used to represent the list of tasks we need to keep track of during logging.
-     */
-    enum Task {
-        /** exec task - invoked during compilation */
-        JAVAC("exec", MessageKind.JAVAC_ERROR, MessageKind.JAVAC_WARNING, MessageKind.JAVAC_NOTE,
-                       MessageKind.JAVAC_RAW_ERROR, MessageKind.JAVAC_NESTED_DIAG, MessageKind.JAVAC_CRASH),
-        /** jtreg task - invoked during test execution */
-        JTREG("jtreg", MessageKind.JTREG_TEST_PASSED, MessageKind.JTREG_TEST_FAILED, MessageKind.JTREG_TEST_ERROR, MessageKind.JTREG_TEST_REPORT),
-        /** initial synthetic task when the logger is created */
-        ROOT("") {
-            @Override
-            boolean matches(String s) {
-                return false;
-            }
-        },
-        /** synthetic task catching any other tasks not in this list */
-        ANY("") {
-            @Override
-            boolean matches(String s) {
-                return true;
-            }
-        };
-
-        String taskName;
-        MessageKind[] msgs;
-
-        Task(String taskName, MessageKind... msgs) {
-            this.taskName = taskName;
-            this.msgs = msgs;
-        }
-
-        boolean matches(String s) {
-            return s.equals(taskName);
-        }
-    }
-
-    /**
-     * This enum is used to represent the list of targets we need to keep track of during logging.
-     * A regular expression is used to match a given target name.
-     */
-    enum Target {
-        /** jtreg target - executed when launching tests */
-        JTREG("jtreg") {
-            @Override
-            String getDisplayMessage(BuildEvent e) {
-                return "Running jtreg tests: " + e.getProject().getProperty("jtreg.tests");
-            }
-        },
-        /** build bootstrap tool target - executed when bootstrapping javac */
-        BUILD_BOOTSTRAP_JAVAC("build-bootstrap-javac-classes") {
-            @Override
-            String getDisplayMessage(BuildEvent e) {
-                return "Building bootstrap javac...";
-            }
-        },
-        /** build classes target - executed when building classes of given tool */
-        BUILD_ALL_CLASSES("build-all-classes") {
-            @Override
-            String getDisplayMessage(BuildEvent e) {
-                return "Building all classes...";
-            }
-        },
-        /** synthetic target catching any other target not in this list */
-        ANY("") {
-            @Override
-            String getDisplayMessage(BuildEvent e) {
-                return "Executing Ant target(s): " + e.getProject().getProperty("ant.project.invoked-targets");
-            }
-            @Override
-            boolean matches(String msg) {
-                return true;
-            }
-        };
-
-        String targetName;
-
-        Target(String targetName) {
-            this.targetName = targetName;
-        }
-
-        boolean matches(String msg) {
-            return msg.equals(targetName);
-        }
-
-        abstract String getDisplayMessage(BuildEvent e);
-    }
-
-    /**
-     * A custom build event used to represent status changes which should be notified inside
-     * Intellij
-     */
-    static class StatusEvent extends BuildEvent {
-
-        /** the target to which the status update refers */
-        Target target;
-
-        StatusEvent(BuildEvent e, Target target) {
-            super(new StatusTask(e, target.getDisplayMessage(e)));
-            this.target = target;
-            setMessage(getTask().getTaskName(), 2);
-        }
-
-        /**
-         * A custom task used to channel info regarding a status change
-         */
-        static class StatusTask extends org.apache.tools.ant.Task {
-            StatusTask(BuildEvent event, String msg) {
-                setProject(event.getProject());
-                setOwningTarget(event.getTarget());
-                setTaskName(msg);
-            }
-        }
-    }
-
-    /** wrapped ant logger (IntelliJ's own logger) */
-    DefaultLogger logger;
-
-    /** flag - is this the first target we encounter? */
-    boolean firstTarget = true;
-
-    /** flag - should subsequenet failures be suppressed ? */
-    boolean suppressTaskFailures = false;
-
-    /** flag - have we ran into a javac crash ? */
-    boolean crashFound = false;
-
-    /** stack of status changes associated with pending targets */
-    Stack<StatusEvent> statusEvents = new Stack<>();
-
-    /** stack of pending tasks */
-    Stack<Task> tasks = new Stack<>();
-
-    public LangtoolsIdeaAntLogger(Project project) {
-        for (Object o : project.getBuildListeners()) {
-            if (o instanceof DefaultLogger) {
-                this.logger = (DefaultLogger)o;
-                project.removeBuildListener((BuildListener)o);
-                project.addBuildListener(this);
-            }
-        }
-        logger.setMessageOutputLevel(3);
-        tasks.push(Task.ROOT);
-    }
-
-    @Override
-    public void buildStarted(BuildEvent event) {
-        //do nothing
-    }
-
-    @Override
-    public void buildFinished(BuildEvent event) {
-        //do nothing
-    }
-
-    @Override
-    public void targetStarted(BuildEvent event) {
-        EnumSet<Target> statusKinds = firstTarget ?
-                EnumSet.allOf(Target.class) :
-                EnumSet.complementOf(EnumSet.of(Target.ANY));
-
-        String targetName = event.getTarget().getName();
-
-        for (Target statusKind : statusKinds) {
-            if (statusKind.matches(targetName)) {
-                StatusEvent statusEvent = new StatusEvent(event, statusKind);
-                statusEvents.push(statusEvent);
-                logger.taskStarted(statusEvent);
-                firstTarget = false;
-                return;
-            }
-        }
-    }
-
-    @Override
-    public void targetFinished(BuildEvent event) {
-        if (!statusEvents.isEmpty()) {
-            StatusEvent lastEvent = statusEvents.pop();
-            if (lastEvent.target.matches(event.getTarget().getName())) {
-                logger.taskFinished(lastEvent);
-            }
-        }
-    }
-
-    @Override
-    public void taskStarted(BuildEvent event) {
-        String taskName = event.getTask().getTaskName();
-        for (Task task : Task.values()) {
-            if (task.matches(taskName)) {
-                tasks.push(task);
-                return;
-            }
-        }
-    }
-
-    @Override
-    public void taskFinished(BuildEvent event) {
-        if (tasks.peek() == Task.ROOT) {
-            //we need to 'close' the root task to get nicer output
-            logger.taskFinished(event);
-        } else if (!suppressTaskFailures && event.getException() != null) {
-            //the first (innermost) task failure should always be logged
-            event.setMessage(event.getException().toString(), 0);
-            event.setException(null);
-            //note: we turn this into a plain message to avoid stack trace being logged by Idea
-            logger.messageLogged(event);
-            suppressTaskFailures = true;
-        }
-        tasks.pop();
-    }
-
-    @Override
-    public void messageLogged(BuildEvent event) {
-        String msg = event.getMessage();
-
-        boolean processed = false;
-
-        if (!tasks.isEmpty()) {
-            Task task = tasks.peek();
-            for (MessageKind messageKind : task.msgs) {
-                if (messageKind.matches(msg)) {
-                    event.setMessage(msg, messageKind.priority);
-                    processed = true;
-                    if (messageKind == MessageKind.JAVAC_CRASH) {
-                        crashFound = true;
-                    }
-                    break;
-                }
-            }
-        }
-
-        if (event.getPriority() == MSG_ERR || crashFound) {
-            //we log errors regardless of owning task
-            logger.messageLogged(event);
-            suppressTaskFailures = true;
-        } else if (processed) {
-            logger.messageLogged(event);
-        }
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/langtools/intellij/template/ant.xml	Wed Aug 29 11:25:51 2018 +0100
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="AntConfiguration">
+    <buildFile url="file://$PROJECT_DIR$/make/langtools/intellij/build.xml">
+      <properties>
+	    <property name="langtools.jdk.home" value="@IDEA_TARGET_JDK@" />
+        <property name="intellij.ismake" value="$IsMake$" />
+        <property name="idea.dir" value="$ModuleFileDir$" />
+      </properties>
+      <executeOn event="afterCompilation" target="post-make" />
+    </buildFile>
+  </component>
+</project>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/langtools/intellij/template/codeStyleSettings.xml	Wed Aug 29 11:25:51 2018 +0100
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectCodeStyleSettingsManager">
+    <option name="PER_PROJECT_SETTINGS">
+      <value>
+        <option name="INSERT_INNER_CLASS_IMPORTS" value="true" />
+        <option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="999" />
+        <option name="NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND" value="999" />
+        <option name="RIGHT_MARGIN" value="100" />
+        <option name="JD_DO_NOT_WRAP_ONE_LINE_COMMENTS" value="true" />
+        <XML>
+          <option name="XML_LEGACY_SETTINGS_IMPORTED" value="true" />
+        </XML>
+        <codeStyleSettings language="JAVA">
+          <option name="SPACE_AFTER_TYPE_CAST" value="false" />
+        </codeStyleSettings>
+      </value>
+    </option>
+    <option name="USE_PER_PROJECT_SETTINGS" value="true" />
+  </component>
+</project>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/langtools/intellij/template/compiler.xml	Wed Aug 29 11:25:51 2018 +0100
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CompilerConfiguration">
+    <option name="DEFAULT_COMPILER" value="Javac" />
+    <excludeFromCompile>
+      <directory url="file://$PROJECT_DIR$/src" includeSubdirectories="true" />
+      <directory url="file://$PROJECT_DIR$/test" includeSubdirectories="true" />
+      <directory url="file://$PROJECT_DIR$/build" includeSubdirectories="true" />
+      <directory url="file://$PROJECT_DIR$/make" includeSubdirectories="true" />
+    </excludeFromCompile>
+    <resourceExtensions />
+    <wildcardResourcePatterns />
+    <annotationProcessing>
+      <profile default="true" name="Default" enabled="false">
+        <processorPath useClasspath="true" />
+      </profile>
+    </annotationProcessing>
+  </component>
+</project>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/langtools/intellij/template/copyright/langtools.xml	Wed Aug 29 11:25:51 2018 +0100
@@ -0,0 +1,9 @@
+<component name="CopyrightManager">
+  <copyright>
+    <option name="notice" value="Copyright (c) &amp;#36;today.year, Oracle and/or its affiliates. All rights reserved.&#10;DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.&#10;&#10;This code is free software; you can redistribute it and/or modify it&#10;under the terms of the GNU General Public License version 2 only, as&#10;published by the Free Software Foundation.  Oracle designates this&#10;particular file as subject to the &quot;Classpath&quot; exception as provided&#10;by Oracle in the LICENSE file that accompanied this code.&#10;&#10;This code is distributed in the hope that it will be useful, but WITHOUT&#10;ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or&#10;FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License&#10;version 2 for more details (a copy is included in the LICENSE file that&#10;accompanied this code).&#10;&#10;You should have received a copy of the GNU General Public License version&#10;2 along with this work; if not, write to the Free Software Foundation,&#10;Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.&#10;&#10;Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA&#10;or visit www.oracle.com if you need additional information or have any&#10;questions." />
+    <option name="keyword" value="Copyright" />
+    <option name="allowReplaceKeyword" value="" />
+    <option name="myName" value="langtools" />
+    <option name="myLocal" value="true" />
+  </copyright>
+</component>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/langtools/intellij/template/copyright/profiles_settings.xml	Wed Aug 29 11:25:51 2018 +0100
@@ -0,0 +1,7 @@
+<component name="CopyrightManager">
+  <settings default="langtools">
+    <LanguageOptions name="JAVA">
+      <option name="fileLocation" value="1" />
+    </LanguageOptions>
+  </settings>
+</component>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/langtools/intellij/template/inspectionProfiles/langtools.xml	Wed Aug 29 11:25:51 2018 +0100
@@ -0,0 +1,30 @@
+<component name="InspectionProjectProfileManager">
+  <profile version="1.0" is_locked="false">
+    <option name="myName" value="langtools" />
+    <option name="myLocal" value="false" />
+    <inspection_tool class="LoggerInitializedWithForeignClass" enabled="false" level="WARNING" enabled_by_default="false">
+      <option name="loggerClassName" value="org.apache.log4j.Logger,org.slf4j.LoggerFactory,org.apache.commons.logging.LogFactory,java.util.logging.Logger" />
+      <option name="loggerFactoryMethodName" value="getLogger,getLogger,getLog,getLogger" />
+    </inspection_tool>
+    <inspection_tool class="MismatchedCollectionQueryUpdate" enabled="false" level="WARNING" enabled_by_default="false">
+      <option name="queryNames">
+        <value />
+      </option>
+      <option name="updateNames">
+        <value />
+      </option>
+    </inspection_tool>
+    <inspection_tool class="RawUseOfParameterizedType" enabled="true" level="WARNING" enabled_by_default="true">
+      <option name="ignoreObjectConstruction" value="false" />
+      <option name="ignoreUncompilable" value="true" />
+    </inspection_tool>
+    <inspection_tool class="SpellCheckingInspection" enabled="true" level="TYPO" enabled_by_default="true">
+      <option name="processCode" value="false" />
+      <option name="processLiterals" value="false" />
+      <option name="processComments" value="false" />
+    </inspection_tool>
+    <inspection_tool class="SuspiciousMethodCalls" enabled="true" level="WARNING" enabled_by_default="true">
+      <option name="REPORT_CONVERTIBLE_METHOD_CALLS" value="false" />
+    </inspection_tool>
+  </profile>
+</component>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/langtools/intellij/template/inspectionProfiles/profiles_settings.xml	Wed Aug 29 11:25:51 2018 +0100
@@ -0,0 +1,7 @@
+<component name="InspectionProjectProfileManager">
+  <settings>
+    <option name="PROJECT_PROFILE" value="langtools" />
+    <option name="USE_PROJECT_PROFILE" value="true" />
+    <version value="1.0" />
+  </settings>
+</component>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/langtools/intellij/template/langtools.iml	Wed Aug 29 11:25:51 2018 +0100
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src/java.compiler/share/classes" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/jdk.compiler/share/classes" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/jdk.javadoc/share/classes" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/jdk.jdeps/share/classes" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/jdk.jshell/share/classes" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/build/langtools/gensrc/jdk.compiler" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/build/langtools/gensrc/jdk.javadoc" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/build/langtools/gensrc/jdk.jdeps" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/make/langtools/tools" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/make/langtools/src/classes" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/build/langtools/gensrc/jdk.compiler" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/build/langtools/gensrc/jdk.javadoc" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/build/langtools/gensrc/jdk.jdeps" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/build/langtools/gensrc/jdk.jshell" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/jdk.compiler" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/java.compiler" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/jdk.jdeps" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/jdk.jshell" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/jdk.javadoc" isTestSource="false" />
+      <excludeFolder url="file://$MODULE_DIR$/build" />
+    </content>
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="inheritedJdk" />
+  </component>
+</module>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/langtools/intellij/template/misc.xml	Wed Aug 29 11:25:51 2018 +0100
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="EntryPointsManager">
+    <entry_points version="2.0" />
+  </component>
+  <component name="JTRegService">
+    <path>@IDEA_JTREG_HOME@</path>
+    <workDir>build</workDir>
+    <jre alt="true" value="@IDEA_TARGET_JDK@" />
+    <options>@XPATCH@</options>
+    <ant>
+      <target file="file://$PROJECT_DIR$/make/langtools/intellij/build.xml" name="build-all-classes" />
+    </ant>
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/build/.idea-support/out" />
+  </component>
+</project>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/langtools/intellij/template/modules.xml	Wed Aug 29 11:25:51 2018 +0100
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/langtools.iml" filepath="$PROJECT_DIR$/.idea/langtools.iml" />
+    </modules>
+  </component>
+</project>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/langtools/intellij/template/runConfigurations/javac.xml	Wed Aug 29 11:25:51 2018 +0100
@@ -0,0 +1,22 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="javac" type="Application" factoryName="Application">
+    <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
+    <option name="MAIN_CLASS_NAME" value="com.sun.tools.javac.Main" />
+    <option name="VM_PARAMETERS" value='@XPATCH@' />
+    <option name="PROGRAM_PARAMETERS" value="" />
+    <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
+    <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
+    <option name="ALTERNATIVE_JRE_PATH" value="@IDEA_TARGET_JDK@" />
+    <option name="ENABLE_SWING_INSPECTOR" value="false" />
+    <option name="ENV_VARIABLES" />
+    <option name="PASS_PARENT_ENVS" value="true" />
+    <module name="langtools" />
+    <envs />
+    <RunnerSettings RunnerId="Run" />
+    <ConfigurationWrapper RunnerId="Run" />
+    <method>
+      <option name="Make" enabled="false" />
+      <option name="AntTarget" enabled="true" antfile="file://$PROJECT_DIR$/.idea/build.xml" target="build-all-classes" />
+    </method>
+  </configuration>
+</component>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/langtools/intellij/template/runConfigurations/javadoc.xml	Wed Aug 29 11:25:51 2018 +0100
@@ -0,0 +1,22 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="javadoc" type="Application" factoryName="Application">
+    <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
+    <option name="MAIN_CLASS_NAME" value="jdk.javadoc.internal.tool.Main" />
+    <option name="VM_PARAMETERS" value='@XPATCH@ --add-exports=jdk.javadoc/jdk.javadoc.internal.tool=ALL-UNNAMED' />
+    <option name="PROGRAM_PARAMETERS" value="" />
+    <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
+    <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
+    <option name="ALTERNATIVE_JRE_PATH" value="@IDEA_TARGET_JDK@" />
+    <option name="ENABLE_SWING_INSPECTOR" value="false" />
+    <option name="ENV_VARIABLES" />
+    <option name="PASS_PARENT_ENVS" value="true" />
+    <module name="langtools" />
+    <envs />
+    <RunnerSettings RunnerId="Run" />
+    <ConfigurationWrapper RunnerId="Run" />
+    <method>
+      <option name="Make" enabled="false" />
+      <option name="AntTarget" enabled="true" antfile="file://$PROJECT_DIR$/.idea/build.xml" target="build-all-classes" />
+    </method>
+  </configuration>
+</component>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/langtools/intellij/template/runConfigurations/javap.xml	Wed Aug 29 11:25:51 2018 +0100
@@ -0,0 +1,22 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="javap" type="Application" factoryName="Application">
+    <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
+    <option name="MAIN_CLASS_NAME" value="com.sun.tools.javap.Main" />
+    <option name="VM_PARAMETERS" value='@XPATCH@ --add-exports=jdk.jdeps/com.sun.tools.javap=ALL-UNNAMED' />
+    <option name="PROGRAM_PARAMETERS" value="" />
+    <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
+    <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
+    <option name="ALTERNATIVE_JRE_PATH" value="@IDEA_TARGET_JDK@" />
+    <option name="ENABLE_SWING_INSPECTOR" value="false" />
+    <option name="ENV_VARIABLES" />
+    <option name="PASS_PARENT_ENVS" value="true" />
+    <module name="langtools" />
+    <envs />
+    <RunnerSettings RunnerId="Run" />
+    <ConfigurationWrapper RunnerId="Run" />
+    <method>
+      <option name="Make" enabled="false" />
+      <option name="AntTarget" enabled="true" antfile="file://$PROJECT_DIR$/.idea/build.xml" target="build-all-classes" />
+    </method>
+  </configuration>
+</component>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/langtools/intellij/template/runConfigurations/jshell.xml	Wed Aug 29 11:25:51 2018 +0100
@@ -0,0 +1,20 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="jshell" type="Application" factoryName="Application">
+    <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
+    <option name="MAIN_CLASS_NAME" value="jdk.internal.jshell.tool.JShellToolProvider" />
+    <option name="VM_PARAMETERS" value='@XPATCH@ --add-exports=jdk.jshell/jdk.internal.jshell.tool=ALL-UNNAMED' />
+    <option name="PROGRAM_PARAMETERS" value="" />
+    <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
+    <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
+    <option name="ALTERNATIVE_JRE_PATH" value="@IDEA_TARGET_JDK@" />
+    <option name="ENABLE_SWING_INSPECTOR" value="false" />
+    <option name="ENV_VARIABLES" />
+    <option name="PASS_PARENT_ENVS" value="true" />
+    <module name="langtools" />
+    <envs />
+    <method>
+      <option name="Make" enabled="false" />
+      <option name="AntTarget" enabled="true" antfile="file://$PROJECT_DIR$/.idea/build.xml" target="build-all-classes" />
+    </method>
+  </configuration>
+</component>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/langtools/intellij/template/runConfigurations/sjavac.xml	Wed Aug 29 11:25:51 2018 +0100
@@ -0,0 +1,22 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="sjavac" type="Application" factoryName="Application">
+    <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
+    <option name="MAIN_CLASS_NAME" value="com.sun.tools.sjavac.Main" />
+    <option name="VM_PARAMETERS" value='@XPATCH@ --add-exports=jdk.compiler/com.sun.tools.sjavac=ALL-UNNAMED' />
+    <option name="PROGRAM_PARAMETERS" value="" />
+    <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
+    <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
+    <option name="ALTERNATIVE_JRE_PATH" value="@IDEA_TARGET_JDK@" />
+    <option name="ENABLE_SWING_INSPECTOR" value="false" />
+    <option name="ENV_VARIABLES" />
+    <option name="PASS_PARENT_ENVS" value="true" />
+    <module name="langtools" />
+    <envs />
+    <RunnerSettings RunnerId="Run" />
+    <ConfigurationWrapper RunnerId="Run" />
+    <method>
+      <option name="Make" enabled="false" />
+      <option name="AntTarget" enabled="true" antfile="file://$PROJECT_DIR$/.idea/build.xml" target="build-all-classes" />
+    </method>
+  </configuration>
+</component>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/langtools/intellij/template/src/idea/LangtoolsIdeaAntLogger.java	Wed Aug 29 11:25:51 2018 +0100
@@ -0,0 +1,364 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package idea;
+
+import org.apache.tools.ant.BuildEvent;
+import org.apache.tools.ant.BuildListener;
+import org.apache.tools.ant.DefaultLogger;
+import org.apache.tools.ant.Project;
+
+import java.util.EnumSet;
+import java.util.Stack;
+
+import static org.apache.tools.ant.Project.*;
+
+/**
+ * This class is used to wrap the IntelliJ ant logger in order to provide more meaningful
+ * output when building langtools. The basic ant output in IntelliJ can be quite cumbersome to
+ * work with, as it provides two separate views: (i) a tree view, which is good to display build task
+ * in a hierarchical fashion as they are processed; and a (ii) plain text view, which gives you
+ * the full ant output. The main problem is that javac-related messages are buried into the
+ * ant output (which is made very verbose by IntelliJ in order to support the tree view). It is
+ * not easy to figure out which node to expand in order to see the error message; switching
+ * to plain text doesn't help either, as now the output is totally flat.
+ *
+ * This logger class removes a lot of verbosity from the IntelliJ ant logger by not propagating
+ * all the events to the IntelliJ's logger. In addition, certain events are handled in a custom
+ * fashion, to generate better output during the build.
+ */
+public final class LangtoolsIdeaAntLogger extends DefaultLogger {
+
+    /**
+     * This is just a way to pass in customized binary string predicates;
+     *
+     * TODO: replace with @code{BiPredicate<String, String>} and method reference when moving to 8
+     */
+    enum StringBinaryPredicate {
+        CONTAINS() {
+            @Override
+            boolean apply(String s1, String s2) {
+                return s1.contains(s2);
+            }
+        },
+        STARTS_WITH {
+            @Override
+            boolean apply(String s1, String s2) {
+                return s1.startsWith(s2);
+            }
+        };
+
+        abstract boolean apply(String s1, String s2);
+    }
+
+    /**
+     * Various kinds of ant messages that we shall intercept
+     */
+    enum MessageKind {
+
+        /** a javac error */
+        JAVAC_ERROR(StringBinaryPredicate.CONTAINS, MSG_ERR, "error:", "compiler.err"),
+        /** a javac warning */
+        JAVAC_WARNING(StringBinaryPredicate.CONTAINS, MSG_WARN, "warning:", "compiler.warn"),
+        /** a javac note */
+        JAVAC_NOTE(StringBinaryPredicate.CONTAINS, MSG_INFO, "note:", "compiler.note"),
+        /** a javac raw error (these typically come from a build misconfiguration - such as a bad javac flag) */
+        JAVAC_RAW_ERROR(StringBinaryPredicate.STARTS_WITH, MSG_INFO, "javac: "),
+        /** continuation of some javac error message */
+        JAVAC_NESTED_DIAG(StringBinaryPredicate.STARTS_WITH, MSG_INFO, "  "),
+        /** a javac crash */
+        JAVAC_CRASH(StringBinaryPredicate.STARTS_WITH, MSG_ERR, "An exception has occurred in the compiler"),
+        /** jtreg test success */
+        JTREG_TEST_PASSED(StringBinaryPredicate.STARTS_WITH, MSG_INFO, "Passed: "),
+        /** jtreg test failure */
+        JTREG_TEST_FAILED(StringBinaryPredicate.STARTS_WITH, MSG_ERR, "FAILED: "),
+        /** jtreg test error */
+        JTREG_TEST_ERROR(StringBinaryPredicate.STARTS_WITH, MSG_ERR, "Error: "),
+        /** jtreg report */
+        JTREG_TEST_REPORT(StringBinaryPredicate.STARTS_WITH, MSG_INFO, "Report written");
+
+        StringBinaryPredicate sbp;
+        int priority;
+        String[] keys;
+
+        MessageKind(StringBinaryPredicate sbp, int priority, String... keys) {
+            this.sbp = sbp;
+            this.priority = priority;
+            this.keys = keys;
+        }
+
+        /**
+         * Does a given message string matches this kind?
+         */
+        boolean matches(String s) {
+            for (String key : keys) {
+                if (sbp.apply(s, key)) {
+                    return true;
+                }
+            }
+            return false;
+        }
+    }
+
+    /**
+     * This enum is used to represent the list of tasks we need to keep track of during logging.
+     */
+    enum Task {
+        /** exec task - invoked during compilation */
+        JAVAC("exec", MessageKind.JAVAC_ERROR, MessageKind.JAVAC_WARNING, MessageKind.JAVAC_NOTE,
+                       MessageKind.JAVAC_RAW_ERROR, MessageKind.JAVAC_NESTED_DIAG, MessageKind.JAVAC_CRASH),
+        /** jtreg task - invoked during test execution */
+        JTREG("jtreg", MessageKind.JTREG_TEST_PASSED, MessageKind.JTREG_TEST_FAILED, MessageKind.JTREG_TEST_ERROR, MessageKind.JTREG_TEST_REPORT),
+        /** initial synthetic task when the logger is created */
+        ROOT("") {
+            @Override
+            boolean matches(String s) {
+                return false;
+            }
+        },
+        /** synthetic task catching any other tasks not in this list */
+        ANY("") {
+            @Override
+            boolean matches(String s) {
+                return true;
+            }
+        };
+
+        String taskName;
+        MessageKind[] msgs;
+
+        Task(String taskName, MessageKind... msgs) {
+            this.taskName = taskName;
+            this.msgs = msgs;
+        }
+
+        boolean matches(String s) {
+            return s.equals(taskName);
+        }
+    }
+
+    /**
+     * This enum is used to represent the list of targets we need to keep track of during logging.
+     * A regular expression is used to match a given target name.
+     */
+    enum Target {
+        /** jtreg target - executed when launching tests */
+        JTREG("jtreg") {
+            @Override
+            String getDisplayMessage(BuildEvent e) {
+                return "Running jtreg tests: " + e.getProject().getProperty("jtreg.tests");
+            }
+        },
+        /** build bootstrap tool target - executed when bootstrapping javac */
+        BUILD_BOOTSTRAP_JAVAC("build-bootstrap-javac-classes") {
+            @Override
+            String getDisplayMessage(BuildEvent e) {
+                return "Building bootstrap javac...";
+            }
+        },
+        /** build classes target - executed when building classes of given tool */
+        BUILD_ALL_CLASSES("build-all-classes") {
+            @Override
+            String getDisplayMessage(BuildEvent e) {
+                return "Building all classes...";
+            }
+        },
+        /** synthetic target catching any other target not in this list */
+        ANY("") {
+            @Override
+            String getDisplayMessage(BuildEvent e) {
+                return "Executing Ant target(s): " + e.getProject().getProperty("ant.project.invoked-targets");
+            }
+            @Override
+            boolean matches(String msg) {
+                return true;
+            }
+        };
+
+        String targetName;
+
+        Target(String targetName) {
+            this.targetName = targetName;
+        }
+
+        boolean matches(String msg) {
+            return msg.equals(targetName);
+        }
+
+        abstract String getDisplayMessage(BuildEvent e);
+    }
+
+    /**
+     * A custom build event used to represent status changes which should be notified inside
+     * Intellij
+     */
+    static class StatusEvent extends BuildEvent {
+
+        /** the target to which the status update refers */
+        Target target;
+
+        StatusEvent(BuildEvent e, Target target) {
+            super(new StatusTask(e, target.getDisplayMessage(e)));
+            this.target = target;
+            setMessage(getTask().getTaskName(), 2);
+        }
+
+        /**
+         * A custom task used to channel info regarding a status change
+         */
+        static class StatusTask extends org.apache.tools.ant.Task {
+            StatusTask(BuildEvent event, String msg) {
+                setProject(event.getProject());
+                setOwningTarget(event.getTarget());
+                setTaskName(msg);
+            }
+        }
+    }
+
+    /** wrapped ant logger (IntelliJ's own logger) */
+    DefaultLogger logger;
+
+    /** flag - is this the first target we encounter? */
+    boolean firstTarget = true;
+
+    /** flag - should subsequenet failures be suppressed ? */
+    boolean suppressTaskFailures = false;
+
+    /** flag - have we ran into a javac crash ? */
+    boolean crashFound = false;
+
+    /** stack of status changes associated with pending targets */
+    Stack<StatusEvent> statusEvents = new Stack<>();
+
+    /** stack of pending tasks */
+    Stack<Task> tasks = new Stack<>();
+
+    public LangtoolsIdeaAntLogger(Project project) {
+        for (Object o : project.getBuildListeners()) {
+            if (o instanceof DefaultLogger) {
+                this.logger = (DefaultLogger)o;
+                project.removeBuildListener((BuildListener)o);
+                project.addBuildListener(this);
+            }
+        }
+        logger.setMessageOutputLevel(3);
+        tasks.push(Task.ROOT);
+    }
+
+    @Override
+    public void buildStarted(BuildEvent event) {
+        //do nothing
+    }
+
+    @Override
+    public void buildFinished(BuildEvent event) {
+        //do nothing
+    }
+
+    @Override
+    public void targetStarted(BuildEvent event) {
+        EnumSet<Target> statusKinds = firstTarget ?
+                EnumSet.allOf(Target.class) :
+                EnumSet.complementOf(EnumSet.of(Target.ANY));
+
+        String targetName = event.getTarget().getName();
+
+        for (Target statusKind : statusKinds) {
+            if (statusKind.matches(targetName)) {
+                StatusEvent statusEvent = new StatusEvent(event, statusKind);
+                statusEvents.push(statusEvent);
+                logger.taskStarted(statusEvent);
+                firstTarget = false;
+                return;
+            }
+        }
+    }
+
+    @Override
+    public void targetFinished(BuildEvent event) {
+        if (!statusEvents.isEmpty()) {
+            StatusEvent lastEvent = statusEvents.pop();
+            if (lastEvent.target.matches(event.getTarget().getName())) {
+                logger.taskFinished(lastEvent);
+            }
+        }
+    }
+
+    @Override
+    public void taskStarted(BuildEvent event) {
+        String taskName = event.getTask().getTaskName();
+        for (Task task : Task.values()) {
+            if (task.matches(taskName)) {
+                tasks.push(task);
+                return;
+            }
+        }
+    }
+
+    @Override
+    public void taskFinished(BuildEvent event) {
+        if (tasks.peek() == Task.ROOT) {
+            //we need to 'close' the root task to get nicer output
+            logger.taskFinished(event);
+        } else if (!suppressTaskFailures && event.getException() != null) {
+            //the first (innermost) task failure should always be logged
+            event.setMessage(event.getException().toString(), 0);
+            event.setException(null);
+            //note: we turn this into a plain message to avoid stack trace being logged by Idea
+            logger.messageLogged(event);
+            suppressTaskFailures = true;
+        }
+        tasks.pop();
+    }
+
+    @Override
+    public void messageLogged(BuildEvent event) {
+        String msg = event.getMessage();
+
+        boolean processed = false;
+
+        if (!tasks.isEmpty()) {
+            Task task = tasks.peek();
+            for (MessageKind messageKind : task.msgs) {
+                if (messageKind.matches(msg)) {
+                    event.setMessage(msg, messageKind.priority);
+                    processed = true;
+                    if (messageKind == MessageKind.JAVAC_CRASH) {
+                        crashFound = true;
+                    }
+                    break;
+                }
+            }
+        }
+
+        if (event.getPriority() == MSG_ERR || crashFound) {
+            //we log errors regardless of owning task
+            logger.messageLogged(event);
+            suppressTaskFailures = true;
+        } else if (processed) {
+            logger.messageLogged(event);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/langtools/intellij/template/vcs.xml	Wed Aug 29 11:25:51 2018 +0100
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="hg4idea" />
+  </component>
+</project>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/langtools/intellij/template/workspace.xml	Wed Aug 29 11:25:51 2018 +0100
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="StructureViewFactory">
+    <option name="ACTIVE_ACTIONS" value=",ALPHA_COMPARATOR" />
+  </component>
+  <component name="antWorkspaceConfiguration">
+    <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
+    <option name="FILTER_TARGETS" value="false" />
+    <buildFile url="file://$PROJECT_DIR$/make/langtools/intellij/build.xml">
+      <runInBackground value="false" />
+      <targetFilters>
+        <filter targetName="build-all-tools" isVisible="true" />
+        <filter targetName="build-all-classes" isVisible="true" />
+        <filter targetName="clean" isVisible="true" />
+        <filter targetName="crules" isVisible="true" />
+      </targetFilters>
+      <viewClosedWhenNoErrors value="true" />
+      <expanded value="false" />
+      <treeView value="false" />
+    </buildFile>
+  </component>
+</project>
--- a/make/langtools/intellij/vcs.xml	Wed Aug 29 14:10:19 2018 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="VcsDirectoryMappings">
-    <mapping directory="$PROJECT_DIR$" vcs="hg4idea" />
-  </component>
-</project>
-
--- a/make/langtools/intellij/workspace.xml	Wed Aug 29 14:10:19 2018 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="StructureViewFactory">
-    <option name="ACTIVE_ACTIONS" value=",ALPHA_COMPARATOR" />
-  </component>
-  <component name="antWorkspaceConfiguration">
-    <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
-    <option name="FILTER_TARGETS" value="false" />
-    <buildFile url="file://$PROJECT_DIR$/.idea/build.xml">
-      <runInBackground value="false" />
-      <targetFilters>
-        <filter targetName="build-all-tools" isVisible="true" />
-        <filter targetName="build-all-classes" isVisible="true" />
-        <filter targetName="clean" isVisible="true" />
-        <filter targetName="crules" isVisible="true" />
-      </targetFilters>
-      <viewClosedWhenNoErrors value="true" />
-      <expanded value="false" />
-      <treeView value="false" />
-    </buildFile>
-  </component>
-</project>