--- ScalaGlobal.java +++ ScalaGlobal.java @@ -46,7 +46,9 @@ import java.net.URI; import java.net.URISyntaxException; import java.net.URL; +import java.util.ArrayList; import java.util.Iterator; +import java.util.List; import java.util.Map; import java.util.WeakHashMap; import org.netbeans.api.java.classpath.ClassPath; @@ -92,9 +94,9 @@ private static class SrcOutDirs { - FileObject srcDir; + FileObject[] srcDirs; FileObject outDir; - FileObject testSrcDir; + FileObject[] testSrcDirs; FileObject testOutDir; } @@ -138,11 +140,14 @@ // is fo under test source? boolean forTest = false; - if (dirs.testSrcDir != null && - (dirs.testSrcDir.equals(fo) || FileUtil.isParentOf(dirs.testSrcDir, fo))) { - + if (dirs.testSrcDirs != null) { + for (FileObject f : dirs.testSrcDirs) { + if (f.equals(fo) || FileUtil.isParentOf(f, fo)) { forTest = true; + break; } + } + } // Do not use srcCp as the key, different fo under same src dir seems returning diff instance of srcCp Reference globalRef = forTest ? ProjectToGlobalForTest.get(project) : ProjectToGlobal.get(project); @@ -153,13 +158,31 @@ } } - String srcPath = ""; - String outPath = ""; + String[] srcPath; + String outPath; if (forTest) { - srcPath = dirs.testSrcDir == null ? "" : FileUtil.toFile(dirs.testSrcDir).getAbsolutePath(); + if (dirs.testSrcDirs == null) { + srcPath = new String[] {""}; + } else { + srcPath = new String[dirs.testSrcDirs.length]; + int ind = 0; + for (FileObject f : dirs.testSrcDirs) { + srcPath[ind] = FileUtil.toFile(f).getAbsolutePath(); + ind++; + } + } outPath = dirs.testOutDir == null ? "" : FileUtil.toFile(dirs.testOutDir).getAbsolutePath(); } else { - srcPath = dirs.srcDir == null ? "" : FileUtil.toFile(dirs.srcDir).getAbsolutePath(); + if (dirs.srcDirs == null) { + srcPath = new String[] {""}; + } else { + srcPath = new String[dirs.srcDirs.length]; + int ind = 0; + for (FileObject f : dirs.srcDirs) { + srcPath[ind] = FileUtil.toFile(f).getAbsolutePath(); + ind++; + } + } outPath = dirs.outDir == null ? "" : FileUtil.toFile(dirs.outDir).getAbsolutePath(); } @@ -170,8 +193,7 @@ } else { settings.verbose().value_$eq(false); } - - settings.sourcepath().tryToSet(scala.netbeans.Wrapper$.MODULE$.stringList(new String[]{srcPath})); +// settings.sourcepath().tryToSetColon(scala.netbeans.Wrapper$.MODULE$.stringList(srcPath)); //settings.outdir().tryToSet(scala.netbeans.Wrapper$.MODULE$.stringList(new String[]{"-d", outPath})); settings.outputDirs().setSingleOutput(outPath); @@ -198,6 +220,13 @@ settings.bootclasspath().tryToSet(scala.netbeans.Wrapper$.MODULE$.stringList(new String[]{sb.toString()})); sb.delete(0, sb.length()); + for (String s : srcPath) { + sb.append(s).append(File.pathSeparator); + } + if (compCp.entries().size() == 0) { + sb.setLength(sb.length() - 1); + } + System.out.println("cp1=" + sb.toString()); computeClassPath(project, sb, compCp); if (forTest && !inStdLib && dirs.outDir != null) { sb.append(File.pathSeparator).append(dirs.outDir); @@ -301,20 +330,28 @@ private static SrcOutDirs findDirsInfo(Project project) { SrcOutDirs dirs = new SrcOutDirs(); - SourceGroup[] sgs = ProjectUtils.getSources(project).getSourceGroups(SOURCES_TYPE_SCALA); - if (sgs.length == 0) { - //as a fallback use java ones.. - sgs = ProjectUtils.getSources(project).getSourceGroups(JavaProjectConstants.SOURCES_TYPE_JAVA); + SourceGroup[] sgs1 = ProjectUtils.getSources(project).getSourceGroups(SOURCES_TYPE_SCALA); + SourceGroup[] sgs2 = ProjectUtils.getSources(project).getSourceGroups(JavaProjectConstants.SOURCES_TYPE_JAVA); + List sources = new ArrayList(); + List testsources = new ArrayList(); + if (sgs1.length > 0) { + sources.add(sgs1[0].getRootFolder()); + dirs.outDir = findOutDir(project, sgs1[0].getRootFolder()); + if (sgs1.length > 1) { + testsources.add(sgs1[1].getRootFolder()); + dirs.testOutDir = findOutDir(project, sgs1[1].getRootFolder()); } - if (sgs.length > 0) { - dirs.srcDir = sgs[0].getRootFolder(); - dirs.outDir = findOutDir(project, dirs.srcDir); - if (sgs.length > 1) { - dirs.testSrcDir = sgs[1].getRootFolder(); - dirs.testOutDir = findOutDir(project, dirs.testSrcDir); } + if (sgs2.length > 0) { + sources.add(sgs2[0].getRootFolder()); + dirs.outDir = findOutDir(project, sgs2[0].getRootFolder()); + if (sgs2.length > 1) { + testsources.add(sgs2[1].getRootFolder()); + dirs.testOutDir = findOutDir(project, sgs2[1].getRootFolder()); } - + } + dirs.srcDirs = sources.toArray(new FileObject[0]); + dirs.testSrcDirs = testsources.toArray(new FileObject[0]); return dirs; }