mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
check whether target scope contains module-based targets only
This commit is contained in:
@@ -24,16 +24,15 @@ import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.util.concurrency.SequentialTaskExecutor;
|
||||
import com.intellij.util.io.DataOutputStream;
|
||||
import gnu.trove.THashMap;
|
||||
import org.jboss.netty.channel.Channel;
|
||||
import org.jboss.netty.channel.Channels;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jps.api.*;
|
||||
import org.jetbrains.jps.builders.BuildRootDescriptor;
|
||||
import org.jetbrains.jps.builders.BuildTargetIndex;
|
||||
import org.jetbrains.jps.builders.BuildTargetRegistry;
|
||||
import org.jetbrains.jps.builders.ModuleBasedTarget;
|
||||
import org.jetbrains.jps.builders.*;
|
||||
import org.jetbrains.jps.builders.java.JavaModuleBuildTargetType;
|
||||
import org.jetbrains.jps.builders.java.dependencyView.Callbacks;
|
||||
import org.jetbrains.jps.incremental.BuilderService;
|
||||
import org.jetbrains.jps.incremental.MessageHandler;
|
||||
import org.jetbrains.jps.incremental.Utils;
|
||||
import org.jetbrains.jps.incremental.fs.BuildFSState;
|
||||
@@ -41,9 +40,12 @@ import org.jetbrains.jps.incremental.fs.FSState;
|
||||
import org.jetbrains.jps.incremental.messages.*;
|
||||
import org.jetbrains.jps.incremental.storage.Timestamps;
|
||||
import org.jetbrains.jps.model.module.JpsModule;
|
||||
import org.jetbrains.jps.service.JpsServiceManager;
|
||||
import org.jetbrains.jps.service.SharedThreadPool;
|
||||
|
||||
import java.io.*;
|
||||
import java.lang.reflect.ParameterizedType;
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.Future;
|
||||
@@ -229,15 +231,52 @@ final class BuildSession implements Runnable, CanceledStatus {
|
||||
}
|
||||
|
||||
private static boolean scopeContainsModulesOnly(List<TargetTypeBuildScope> scopes) {
|
||||
Map<String, BuildTargetType<?>> allTypes = null;
|
||||
for (TargetTypeBuildScope scope : scopes) {
|
||||
String typeId = scope.getTypeId();
|
||||
if (!typeId.equals(JavaModuleBuildTargetType.PRODUCTION.getTypeId()) && !typeId.equals(JavaModuleBuildTargetType.TEST.getTypeId())) {
|
||||
final String typeId = scope.getTypeId();
|
||||
if (isJavaModuleBuildType(typeId)) { // fast check
|
||||
continue;
|
||||
}
|
||||
if (allTypes == null) {
|
||||
// lazy init
|
||||
allTypes = new THashMap<String, BuildTargetType<?>>();
|
||||
for (BuilderService builderService : JpsServiceManager.getInstance().getExtensions(BuilderService.class)) {
|
||||
for (BuildTargetType<?> targetType : builderService.getTargetTypes()) {
|
||||
allTypes.put(targetType.getTypeId(), targetType);
|
||||
}
|
||||
}
|
||||
}
|
||||
final BuildTargetType<?> targetType = allTypes.get(typeId);
|
||||
if (targetType != null && !isModuleBasedTargetType(targetType)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private static boolean isJavaModuleBuildType(String typeId) {
|
||||
for (JavaModuleBuildTargetType moduleBuildTargetType : JavaModuleBuildTargetType.ALL_TYPES) {
|
||||
if (moduleBuildTargetType.getTypeId().equals(typeId)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static boolean isModuleBasedTargetType(final BuildTargetType targetType) {
|
||||
Class<?> aClass = targetType.getClass();
|
||||
while (!BuildTargetType.class.equals(aClass.getSuperclass())) {
|
||||
aClass = aClass.getSuperclass();
|
||||
}
|
||||
final ParameterizedType generic = (ParameterizedType)aClass.getGenericSuperclass();
|
||||
for (Type type : generic.getActualTypeArguments()) {
|
||||
if (type instanceof Class && ModuleBasedTarget.class.isAssignableFrom((Class)type)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void saveData(final BuildFSState fsState, File dataStorageRoot) {
|
||||
final boolean wasInterrupted = Thread.interrupted();
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user