changeset 18158:31ad929e1afd

factored out _netbeansinit_project function
author Doug Simon <doug.simon@oracle.com>
date Wed, 22 Oct 2014 20:20:42 +0200
parents 9db0af368bb4
children 2d6646ca59be
files mxtool/mx.py
diffstat 1 files changed, 175 insertions(+), 170 deletions(-) [+]
line wrap: on
line diff
--- a/mxtool/mx.py	Wed Oct 22 14:50:09 2014 +0200
+++ b/mxtool/mx.py	Wed Oct 22 20:20:42 2014 +0200
@@ -4097,109 +4097,91 @@
     for suite in suites(True):
         _netbeansinit_suite(args, suite, refreshOnly, buildProcessorJars)
 
-def _netbeansinit_suite(args, suite, refreshOnly=False, buildProcessorJars=True):
-    configZip = TimeStampFile(join(suite.mxDir, 'netbeans-config.zip'))
-    configLibsZip = join(suite.mxDir, 'eclipse-config-libs.zip')
-    if refreshOnly and not configZip.exists():
-        return
-
-    if _check_ide_timestamp(suite, configZip, 'netbeans'):
-        logv('[NetBeans configurations are up to date - skipping]')
-        return
-
-    updated = False
-    files = []
-    libFiles = []
-    jdks = set()
-    for p in suite.projects:
-        if p.native:
-            continue
-
-        if exists(join(p.dir, 'plugin.xml')):  # eclipse plugin project
-            continue
-
-        if not exists(join(p.dir, 'nbproject')):
-            os.makedirs(join(p.dir, 'nbproject'))
-
-        jdk = java(p.javaCompliance)
-        assert jdk
-
+def _netbeansinit_project(p, jdks=None, files=None, libFiles=None):
+    if not exists(join(p.dir, 'nbproject')):
+        os.makedirs(join(p.dir, 'nbproject'))
+
+    jdk = java(p.javaCompliance)
+    assert jdk
+
+    if jdks:
         jdks.add(jdk)
 
-        out = XMLDoc()
-        out.open('project', {'name' : p.name, 'default' : 'default', 'basedir' : '.'})
-        out.element('description', data='Builds, tests, and runs the project ' + p.name + '.')
-        out.element('import', {'file' : 'nbproject/build-impl.xml'})
-        out.open('target', {'name' : '-post-compile'})
-        out.open('exec', {'executable' : sys.executable})
-        out.element('env', {'key' : 'JAVA_HOME', 'value' : jdk.jdk})
-        out.element('arg', {'value' : os.path.abspath(__file__)})
-        out.element('arg', {'value' : 'archive'})
-        out.element('arg', {'value' : '@GRAAL'})
-        out.close('exec')
-        out.close('target')
-        out.close('project')
-        updated = update_file(join(p.dir, 'build.xml'), out.xml(indent='\t', newl='\n')) or updated
+    out = XMLDoc()
+    out.open('project', {'name' : p.name, 'default' : 'default', 'basedir' : '.'})
+    out.element('description', data='Builds, tests, and runs the project ' + p.name + '.')
+    out.element('import', {'file' : 'nbproject/build-impl.xml'})
+    out.open('target', {'name' : '-post-compile'})
+    out.open('exec', {'executable' : sys.executable})
+    out.element('env', {'key' : 'JAVA_HOME', 'value' : jdk.jdk})
+    out.element('arg', {'value' : os.path.abspath(__file__)})
+    out.element('arg', {'value' : 'archive'})
+    out.element('arg', {'value' : '@GRAAL'})
+    out.close('exec')
+    out.close('target')
+    out.close('project')
+    update_file(join(p.dir, 'build.xml'), out.xml(indent='\t', newl='\n'))
+    if files:
         files.append(join(p.dir, 'build.xml'))
 
-        out = XMLDoc()
-        out.open('project', {'xmlns' : 'http://www.netbeans.org/ns/project/1'})
-        out.element('type', data='org.netbeans.modules.java.j2seproject')
-        out.open('configuration')
-        out.open('data', {'xmlns' : 'http://www.netbeans.org/ns/j2se-project/3'})
-        out.element('name', data=p.name)
-        out.element('explicit-platform', {'explicit-source-supported' : 'true'})
-        out.open('source-roots')
-        out.element('root', {'id' : 'src.dir'})
-        if len(p.annotation_processors()) > 0:
-            out.element('root', {'id' : 'src.ap-source-output.dir', 'name' : 'Generated Packages'})
-        out.close('source-roots')
-        out.open('test-roots')
-        out.close('test-roots')
-        out.close('data')
-
-        firstDep = True
-        for dep in p.all_deps([], includeLibs=False, includeAnnotationProcessors=True):
-            if dep == p:
-                continue
-
-            if dep.isProject():
-                n = dep.name.replace('.', '_')
-                if firstDep:
-                    out.open('references', {'xmlns' : 'http://www.netbeans.org/ns/ant-project-references/1'})
-                    firstDep = False
-
-                out.open('reference')
-                out.element('foreign-project', data=n)
-                out.element('artifact-type', data='jar')
-                out.element('script', data='build.xml')
-                out.element('target', data='jar')
-                out.element('clean-target', data='clean')
-                out.element('id', data='jar')
-                out.close('reference')
-
-        if not firstDep:
-            out.close('references')
-
-        out.close('configuration')
-        out.close('project')
-        updated = update_file(join(p.dir, 'nbproject', 'project.xml'), out.xml(indent='    ', newl='\n')) or updated
+    out = XMLDoc()
+    out.open('project', {'xmlns' : 'http://www.netbeans.org/ns/project/1'})
+    out.element('type', data='org.netbeans.modules.java.j2seproject')
+    out.open('configuration')
+    out.open('data', {'xmlns' : 'http://www.netbeans.org/ns/j2se-project/3'})
+    out.element('name', data=p.name)
+    out.element('explicit-platform', {'explicit-source-supported' : 'true'})
+    out.open('source-roots')
+    out.element('root', {'id' : 'src.dir'})
+    if len(p.annotation_processors()) > 0:
+        out.element('root', {'id' : 'src.ap-source-output.dir', 'name' : 'Generated Packages'})
+    out.close('source-roots')
+    out.open('test-roots')
+    out.close('test-roots')
+    out.close('data')
+
+    firstDep = True
+    for dep in p.all_deps([], includeLibs=False, includeAnnotationProcessors=True):
+        if dep == p:
+            continue
+
+        if dep.isProject():
+            n = dep.name.replace('.', '_')
+            if firstDep:
+                out.open('references', {'xmlns' : 'http://www.netbeans.org/ns/ant-project-references/1'})
+                firstDep = False
+
+            out.open('reference')
+            out.element('foreign-project', data=n)
+            out.element('artifact-type', data='jar')
+            out.element('script', data='build.xml')
+            out.element('target', data='jar')
+            out.element('clean-target', data='clean')
+            out.element('id', data='jar')
+            out.close('reference')
+
+    if not firstDep:
+        out.close('references')
+
+    out.close('configuration')
+    out.close('project')
+    update_file(join(p.dir, 'nbproject', 'project.xml'), out.xml(indent='    ', newl='\n'))
+    if files:
         files.append(join(p.dir, 'nbproject', 'project.xml'))
 
-        out = StringIO.StringIO()
-        jdkPlatform = 'JDK_' + str(jdk.version)
-
-        annotationProcessorEnabled = "false"
-        annotationProcessorReferences = ""
-        annotationProcessorSrcFolder = ""
-        if len(p.annotation_processors()) > 0:
-            annotationProcessorEnabled = "true"
-            genSrcDir = p.source_gen_dir()
-            if not exists(genSrcDir):
-                os.makedirs(genSrcDir)
-            annotationProcessorSrcFolder = "src.ap-source-output.dir=" + genSrcDir
-
-        content = """
+    out = StringIO.StringIO()
+    jdkPlatform = 'JDK_' + str(jdk.version)
+
+    annotationProcessorEnabled = "false"
+    annotationProcessorSrcFolder = ""
+    if len(p.annotation_processors()) > 0:
+        annotationProcessorEnabled = "true"
+        genSrcDir = p.source_gen_dir()
+        if not exists(genSrcDir):
+            os.makedirs(genSrcDir)
+        annotationProcessorSrcFolder = "src.ap-source-output.dir=" + genSrcDir
+
+    content = """
 annotation.processing.enabled=""" + annotationProcessorEnabled + """
 annotation.processing.enabled.in.editor=""" + annotationProcessorEnabled + """
 annotation.processing.processors.list=
@@ -4218,9 +4200,9 @@
 # Uncomment to specify the preferred debugger connection transport:
 #debug.transport=dt_socket
 debug.classpath=\\
-    ${run.classpath}
+${run.classpath}
 debug.test.classpath=\\
-    ${run.test.classpath}
+${run.test.classpath}
 # This directory is removed when the project is cleaned:
 dist.dir=dist
 dist.jar=${dist.dir}/""" + p.name + """.jar
@@ -4235,8 +4217,8 @@
 javac.source=""" + str(p.javaCompliance) + """
 javac.target=""" + str(p.javaCompliance) + """
 javac.test.classpath=\\
-    ${javac.classpath}:\\
-    ${build.classes.dir}
+${javac.classpath}:\\
+${build.classes.dir}
 javadoc.additionalparam=
 javadoc.author=false
 javadoc.encoding=${source.encoding}
@@ -4255,87 +4237,110 @@
 platforms.""" + jdkPlatform + """.home=""" + jdk.jdk + """
 platform.active=""" + jdkPlatform + """
 run.classpath=\\
-    ${javac.classpath}:\\
-    ${build.classes.dir}
+${javac.classpath}:\\
+${build.classes.dir}
 # Space-separated list of JVM arguments used when running the project
 # (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value
 # or test-sys-prop.name=value to set system properties for unit tests):
 run.jvmargs=
 run.test.classpath=\\
-    ${javac.test.classpath}:\\
-    ${build.test.classes.dir}
+${javac.test.classpath}:\\
+${build.test.classes.dir}
 test.src.dir=./test
 """ + annotationProcessorSrcFolder + """
 source.encoding=UTF-8""".replace(':', os.pathsep).replace('/', os.sep)
-        print >> out, content
-
-        mainSrc = True
-        for src in p.srcDirs:
-            srcDir = join(p.dir, src)
-            if not exists(srcDir):
-                os.mkdir(srcDir)
-            ref = 'file.reference.' + p.name + '-' + src
-            print >> out, ref + '=' + src
-            if mainSrc:
-                print >> out, 'src.dir=${' + ref + '}'
-                mainSrc = False
-            else:
-                print >> out, 'src.' + src + '.dir=${' + ref + '}'
-
-        javacClasspath = []
-
-        deps = p.all_deps([], True)
-        annotationProcessorOnlyDeps = []
-        if len(p.annotation_processors()) > 0:
-            for ap in p.annotation_processors():
-                apDep = dependency(ap)
-                if not apDep in deps:
-                    deps.append(apDep)
-                    annotationProcessorOnlyDeps.append(apDep)
-
-        annotationProcessorReferences = []
-
-        for dep in deps:
-            if dep == p:
-                continue
-
-            if dep.isLibrary():
-                path = dep.get_path(resolve=True)
-                if path:
-                    if os.sep == '\\':
-                        path = path.replace('\\', '\\\\')
-                    ref = 'file.reference.' + dep.name + '-bin'
-                    print >> out, ref + '=' + path
+    print >> out, content
+
+    mainSrc = True
+    for src in p.srcDirs:
+        srcDir = join(p.dir, src)
+        if not exists(srcDir):
+            os.mkdir(srcDir)
+        ref = 'file.reference.' + p.name + '-' + src
+        print >> out, ref + '=' + src
+        if mainSrc:
+            print >> out, 'src.dir=${' + ref + '}'
+            mainSrc = False
+        else:
+            print >> out, 'src.' + src + '.dir=${' + ref + '}'
+
+    javacClasspath = []
+
+    deps = p.all_deps([], True)
+    annotationProcessorOnlyDeps = []
+    if len(p.annotation_processors()) > 0:
+        for ap in p.annotation_processors():
+            apDep = dependency(ap)
+            if not apDep in deps:
+                deps.append(apDep)
+                annotationProcessorOnlyDeps.append(apDep)
+
+    annotationProcessorReferences = []
+
+    for dep in deps:
+        if dep == p:
+            continue
+
+        if dep.isLibrary():
+            path = dep.get_path(resolve=True)
+            if path:
+                if os.sep == '\\':
+                    path = path.replace('\\', '\\\\')
+                ref = 'file.reference.' + dep.name + '-bin'
+                print >> out, ref + '=' + path
+                if libFiles:
                     libFiles.append(path)
 
-            elif dep.isProject():
-                n = dep.name.replace('.', '_')
-                relDepPath = os.path.relpath(dep.dir, p.dir).replace(os.sep, '/')
-                ref = 'reference.' + n + '.jar'
-                print >> out, 'project.' + n + '=' + relDepPath
-                print >> out, ref + '=${project.' + n + '}/dist/' + dep.name + '.jar'
-
-            if not dep in annotationProcessorOnlyDeps:
-                javacClasspath.append('${' + ref + '}')
-            else:
-                annotationProcessorReferences.append('${' + ref + '}')
-
-        print >> out, 'javac.classpath=\\\n    ' + (os.pathsep + '\\\n    ').join(javacClasspath)
-        print >> out, 'javac.processorpath=' + (os.pathsep + '\\\n    ').join(['${javac.classpath}'] + annotationProcessorReferences)
-        print >> out, 'javac.test.processorpath=' + (os.pathsep + '\\\n    ').join(['${javac.test.classpath}'] + annotationProcessorReferences)
-
-        updated = update_file(join(p.dir, 'nbproject', 'project.properties'), out.getvalue()) or updated
-        out.close()
+        elif dep.isProject():
+            n = dep.name.replace('.', '_')
+            relDepPath = os.path.relpath(dep.dir, p.dir).replace(os.sep, '/')
+            ref = 'reference.' + n + '.jar'
+            print >> out, 'project.' + n + '=' + relDepPath
+            print >> out, ref + '=${project.' + n + '}/dist/' + dep.name + '.jar'
+
+        if not dep in annotationProcessorOnlyDeps:
+            javacClasspath.append('${' + ref + '}')
+        else:
+            annotationProcessorReferences.append('${' + ref + '}')
+
+    print >> out, 'javac.classpath=\\\n    ' + (os.pathsep + '\\\n    ').join(javacClasspath)
+    print >> out, 'javac.processorpath=' + (os.pathsep + '\\\n    ').join(['${javac.classpath}'] + annotationProcessorReferences)
+    print >> out, 'javac.test.processorpath=' + (os.pathsep + '\\\n    ').join(['${javac.test.classpath}'] + annotationProcessorReferences)
+
+    update_file(join(p.dir, 'nbproject', 'project.properties'), out.getvalue())
+    out.close()
+    if files:
         files.append(join(p.dir, 'nbproject', 'project.properties'))
 
-    if updated:
-        log('If using NetBeans:')
-        # http://stackoverflow.com/questions/24720665/cant-resolve-jdk-internal-package
-        log('  1. Edit etc/netbeans.conf in your NetBeans installation and modify netbeans_default_options variable to include "-J-DCachingArchiveProvider.disableCtSym=true"')
-        log('  2. Ensure that the following platform(s) are defined (Tools -> Java Platforms):')
-        for jdk in jdks:
-            log('        JDK_' + str(jdk.version))
-        log('  3. Open/create a Project Group for the directory containing the projects (File -> Project Group -> New Group... -> Folder of Projects)')
+def _netbeansinit_suite(args, suite, refreshOnly=False, buildProcessorJars=True):
+    configZip = TimeStampFile(join(suite.mxDir, 'netbeans-config.zip'))
+    configLibsZip = join(suite.mxDir, 'eclipse-config-libs.zip')
+    if refreshOnly and not configZip.exists():
+        return
+
+    if _check_ide_timestamp(suite, configZip, 'netbeans'):
+        logv('[NetBeans configurations are up to date - skipping]')
+        return
+
+    files = []
+    libFiles = []
+    jdks = set()
+    for p in suite.projects:
+        if p.native:
+            continue
+
+        if exists(join(p.dir, 'plugin.xml')):  # eclipse plugin project
+            continue
+
+        _netbeansinit_project(p, jdks, files, libFiles)
+
+    log('If using NetBeans:')
+    # http://stackoverflow.com/questions/24720665/cant-resolve-jdk-internal-package
+    log('  1. Edit etc/netbeans.conf in your NetBeans installation and modify netbeans_default_options variable to include "-J-DCachingArchiveProvider.disableCtSym=true"')
+    log('  2. Ensure that the following platform(s) are defined (Tools -> Java Platforms):')
+    for jdk in jdks:
+        log('        JDK_' + str(jdk.version))
+    log('  3. Open/create a Project Group for the directory containing the projects (File -> Project Group -> New Group... -> Folder of Projects)')
 
     _zip_files(files, suite.dir, configZip.path)
     _zip_files(libFiles, suite.dir, configLibsZip)