JPS plugin: refactoring:
- extract utility methods from KotlinBuilder;
- use StringUtil#join instead for iteration;
- add private constructor to LibraryUtils.
Original commit: dd553ef671
This commit is contained in:
@@ -0,0 +1,73 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2013 JetBrains s.r.o.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.jet.jps.build;
|
||||||
|
|
||||||
|
import com.intellij.util.Consumer;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.jet.utils.LibraryUtils;
|
||||||
|
import org.jetbrains.jps.incremental.ModuleBuildTarget;
|
||||||
|
import org.jetbrains.jps.model.java.JavaSourceRootType;
|
||||||
|
import org.jetbrains.jps.model.java.JpsJavaModuleType;
|
||||||
|
import org.jetbrains.jps.model.library.JpsLibrary;
|
||||||
|
import org.jetbrains.jps.model.library.JpsLibraryRoot;
|
||||||
|
import org.jetbrains.jps.model.library.JpsOrderRootType;
|
||||||
|
import org.jetbrains.jps.model.module.JpsModule;
|
||||||
|
import org.jetbrains.jps.model.module.JpsModuleSourceRoot;
|
||||||
|
import org.jetbrains.jps.util.JpsPathUtil;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
class JpsJsModuleUtils {
|
||||||
|
private JpsJsModuleUtils() {}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
static Set<String> getLibraryFilesAndDependencies(@NotNull ModuleBuildTarget target) {
|
||||||
|
Set<String> result = new HashSet<String>();
|
||||||
|
getLibraryFiles(target, result);
|
||||||
|
getDependencyModulesAndSources(target, result);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void getLibraryFiles(@NotNull ModuleBuildTarget target, @NotNull Set<String> result) {
|
||||||
|
Set<JpsLibrary> libraries = JpsUtils.getAllDependencies(target).getLibraries();
|
||||||
|
for (JpsLibrary library : libraries) {
|
||||||
|
for (JpsLibraryRoot root : library.getRoots(JpsOrderRootType.COMPILED)) {
|
||||||
|
String path = JpsPathUtil.urlToOsPath(root.getUrl());
|
||||||
|
// TODO: Do we need to add to dependency all libraries?
|
||||||
|
if (LibraryUtils.isJsRuntimeLibrary(JpsPathUtil.urlToFile(path))) {
|
||||||
|
result.add(path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void getDependencyModulesAndSources(@NotNull final ModuleBuildTarget target, @NotNull final Set<String> result) {
|
||||||
|
JpsUtils.getAllDependencies(target).processModules(new Consumer<JpsModule>() {
|
||||||
|
@Override
|
||||||
|
public void consume(JpsModule module) {
|
||||||
|
if (module == target.getModule() || module.getModuleType() != JpsJavaModuleType.INSTANCE) return;
|
||||||
|
|
||||||
|
result.add("@" + module.getName());
|
||||||
|
|
||||||
|
for (JpsModuleSourceRoot root : module.getSourceRoots(JavaSourceRootType.SOURCE)) {
|
||||||
|
result.add(JpsPathUtil.urlToOsPath(root.getUrl()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
+22
-2
@@ -17,15 +17,35 @@
|
|||||||
package org.jetbrains.jet.jps.build;
|
package org.jetbrains.jet.jps.build;
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.jet.utils.LibraryUtils;
|
||||||
import org.jetbrains.jps.incremental.ModuleBuildTarget;
|
import org.jetbrains.jps.incremental.ModuleBuildTarget;
|
||||||
import org.jetbrains.jps.model.java.JpsJavaClasspathKind;
|
import org.jetbrains.jps.model.java.JpsJavaClasspathKind;
|
||||||
import org.jetbrains.jps.model.java.JpsJavaDependenciesEnumerator;
|
import org.jetbrains.jps.model.java.JpsJavaDependenciesEnumerator;
|
||||||
import org.jetbrains.jps.model.java.JpsJavaExtensionService;
|
import org.jetbrains.jps.model.java.JpsJavaExtensionService;
|
||||||
|
import org.jetbrains.jps.model.library.JpsLibrary;
|
||||||
|
import org.jetbrains.jps.model.library.JpsLibraryRoot;
|
||||||
|
import org.jetbrains.jps.model.library.JpsOrderRootType;
|
||||||
|
import org.jetbrains.jps.util.JpsPathUtil;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
class JpsUtils {
|
||||||
|
private JpsUtils() {}
|
||||||
|
|
||||||
public class JpsUtil {
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public static JpsJavaDependenciesEnumerator getAllDependencies(@NotNull ModuleBuildTarget target) {
|
static JpsJavaDependenciesEnumerator getAllDependencies(@NotNull ModuleBuildTarget target) {
|
||||||
return JpsJavaExtensionService.dependencies(target.getModule()).recursively().exportedOnly()
|
return JpsJavaExtensionService.dependencies(target.getModule()).recursively().exportedOnly()
|
||||||
.includedIn(JpsJavaClasspathKind.compile(target.isTests()));
|
.includedIn(JpsJavaClasspathKind.compile(target.isTests()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static boolean isJsKotlinModule(@NotNull ModuleBuildTarget target) {
|
||||||
|
Set<JpsLibrary> libraries = getAllDependencies(target).getLibraries();
|
||||||
|
for (JpsLibrary library : libraries) {
|
||||||
|
for (JpsLibraryRoot root : library.getRoots(JpsOrderRootType.COMPILED)) {
|
||||||
|
if (LibraryUtils.isJsRuntimeLibrary(JpsPathUtil.urlToFile(root.getUrl())))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -17,7 +17,6 @@
|
|||||||
package org.jetbrains.jet.jps.build;
|
package org.jetbrains.jet.jps.build;
|
||||||
|
|
||||||
import com.intellij.openapi.util.text.StringUtil;
|
import com.intellij.openapi.util.text.StringUtil;
|
||||||
import com.intellij.util.Consumer;
|
|
||||||
import com.intellij.util.Function;
|
import com.intellij.util.Function;
|
||||||
import com.intellij.util.containers.ContainerUtil;
|
import com.intellij.util.containers.ContainerUtil;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
@@ -26,7 +25,6 @@ import org.jetbrains.jet.cli.common.messages.CompilerMessageLocation;
|
|||||||
import org.jetbrains.jet.cli.common.messages.CompilerMessageSeverity;
|
import org.jetbrains.jet.cli.common.messages.CompilerMessageSeverity;
|
||||||
import org.jetbrains.jet.cli.common.messages.MessageCollector;
|
import org.jetbrains.jet.cli.common.messages.MessageCollector;
|
||||||
import org.jetbrains.jet.compiler.runner.*;
|
import org.jetbrains.jet.compiler.runner.*;
|
||||||
import org.jetbrains.jet.utils.LibraryUtils;
|
|
||||||
import org.jetbrains.jet.utils.PathUtil;
|
import org.jetbrains.jet.utils.PathUtil;
|
||||||
import org.jetbrains.jps.ModuleChunk;
|
import org.jetbrains.jps.ModuleChunk;
|
||||||
import org.jetbrains.jps.builders.DirtyFilesHolder;
|
import org.jetbrains.jps.builders.DirtyFilesHolder;
|
||||||
@@ -35,14 +33,7 @@ import org.jetbrains.jps.incremental.*;
|
|||||||
import org.jetbrains.jps.incremental.java.JavaBuilder;
|
import org.jetbrains.jps.incremental.java.JavaBuilder;
|
||||||
import org.jetbrains.jps.incremental.messages.BuildMessage;
|
import org.jetbrains.jps.incremental.messages.BuildMessage;
|
||||||
import org.jetbrains.jps.incremental.messages.CompilerMessage;
|
import org.jetbrains.jps.incremental.messages.CompilerMessage;
|
||||||
import org.jetbrains.jps.model.java.JavaSourceRootType;
|
|
||||||
import org.jetbrains.jps.model.java.JpsJavaModuleType;
|
|
||||||
import org.jetbrains.jps.model.library.JpsLibrary;
|
|
||||||
import org.jetbrains.jps.model.library.JpsLibraryRoot;
|
|
||||||
import org.jetbrains.jps.model.library.JpsOrderRootType;
|
|
||||||
import org.jetbrains.jps.model.module.JpsModule;
|
import org.jetbrains.jps.model.module.JpsModule;
|
||||||
import org.jetbrains.jps.model.module.JpsModuleSourceRoot;
|
|
||||||
import org.jetbrains.jps.util.JpsPathUtil;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -126,7 +117,7 @@ public class KotlinBuilder extends ModuleLevelBuilder {
|
|||||||
|
|
||||||
OutputItemsCollectorImpl outputItemCollector = new OutputItemsCollectorImpl(outputDir);
|
OutputItemsCollectorImpl outputItemCollector = new OutputItemsCollectorImpl(outputDir);
|
||||||
|
|
||||||
if (isJsKotlinModule(representativeTarget)) {
|
if (JpsUtils.isJsKotlinModule(representativeTarget)) {
|
||||||
File outputFile = new File(outputDir, representativeTarget.getModule().getName() + ".js");
|
File outputFile = new File(outputDir, representativeTarget.getModule().getName() + ".js");
|
||||||
|
|
||||||
KotlinCompilerRunner.runK2JsCompiler(
|
KotlinCompilerRunner.runK2JsCompiler(
|
||||||
@@ -134,7 +125,7 @@ public class KotlinBuilder extends ModuleLevelBuilder {
|
|||||||
environment,
|
environment,
|
||||||
outputItemCollector,
|
outputItemCollector,
|
||||||
sourceFiles,
|
sourceFiles,
|
||||||
getLibraryFilesAndDependencies(representativeTarget),
|
JpsJsModuleUtils.getLibraryFilesAndDependencies(representativeTarget),
|
||||||
outputFile);
|
outputFile);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -229,50 +220,4 @@ public class KotlinBuilder extends ModuleLevelBuilder {
|
|||||||
public List<String> getCompilableFileExtensions() {
|
public List<String> getCompilableFileExtensions() {
|
||||||
return COMPILABLE_FILE_EXTENSIONS;
|
return COMPILABLE_FILE_EXTENSIONS;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isJsKotlinModule(@NotNull ModuleBuildTarget target) {
|
|
||||||
Set<JpsLibrary> libraries = JpsUtil.getAllDependencies(target).getLibraries();
|
|
||||||
for (JpsLibrary library : libraries) {
|
|
||||||
for (JpsLibraryRoot root : library.getRoots(JpsOrderRootType.COMPILED)) {
|
|
||||||
if (LibraryUtils.isJsRuntimeLibrary(JpsPathUtil.urlToFile(root.getUrl())))
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
private static Set<String> getLibraryFilesAndDependencies(@NotNull ModuleBuildTarget target) {
|
|
||||||
Set<String> result = new HashSet<String>();
|
|
||||||
getLibraryPaths(target, result);
|
|
||||||
getDependencyModulesAndSources(target, result);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void getLibraryPaths(@NotNull ModuleBuildTarget target, Set<String> result) {
|
|
||||||
Set<JpsLibrary> libraries = JpsUtil.getAllDependencies(target).getLibraries();
|
|
||||||
for (JpsLibrary library : libraries) {
|
|
||||||
for (JpsLibraryRoot root : library.getRoots(JpsOrderRootType.COMPILED)) {
|
|
||||||
String path = JpsPathUtil.urlToOsPath(root.getUrl());
|
|
||||||
if (path.endsWith(PathUtil.JS_LIB_JAR_NAME)) {
|
|
||||||
result.add(path);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void getDependencyModulesAndSources(@NotNull final ModuleBuildTarget target, final Set<String> result) {
|
|
||||||
JpsUtil.getAllDependencies(target).processModules(new Consumer<JpsModule>() {
|
|
||||||
@Override
|
|
||||||
public void consume(JpsModule module) {
|
|
||||||
if (module == target.getModule() || module.getModuleType() != JpsJavaModuleType.INSTANCE) return;
|
|
||||||
|
|
||||||
result.add("@" + module.getName());
|
|
||||||
|
|
||||||
for (JpsModuleSourceRoot root : module.getSourceRoots(JavaSourceRootType.SOURCE)) {
|
|
||||||
result.add(JpsPathUtil.urlToOsPath(root.getUrl()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -43,7 +43,7 @@ import java.util.Collections;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static org.jetbrains.jet.compiler.runner.KotlinModuleDescriptionGenerator.DependencyProvider;
|
import static org.jetbrains.jet.compiler.runner.KotlinModuleDescriptionGenerator.DependencyProvider;
|
||||||
import static org.jetbrains.jet.jps.build.JpsUtil.getAllDependencies;
|
import static org.jetbrains.jet.jps.build.JpsUtils.getAllDependencies;
|
||||||
|
|
||||||
public class KotlinBuilderModuleScriptGenerator {
|
public class KotlinBuilderModuleScriptGenerator {
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user