mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
alternative jre schould provide not only executable but also jars (IDEA-55638)
This commit is contained in:
+19
-12
@@ -21,10 +21,11 @@ import com.intellij.openapi.actionSystem.DataKey;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.projectRoots.Sdk;
|
||||
import com.intellij.openapi.roots.ModuleRootManager;
|
||||
import com.intellij.openapi.roots.OrderEnumerator;
|
||||
import com.intellij.openapi.roots.*;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.encoding.EncodingProjectManager;
|
||||
import com.intellij.util.PairFunction;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.nio.charset.Charset;
|
||||
|
||||
@@ -64,15 +65,22 @@ public class JavaParameters extends SimpleJavaParameters {
|
||||
}
|
||||
|
||||
setDefaultCharset(module.getProject());
|
||||
configureJdkAccordingToJreSelected(jdk);
|
||||
configureEnumerator(OrderEnumerator.orderEntries(module).runtimeOnly().recursively().withoutSdk(), classPathType).collectPaths(getClassPath());
|
||||
final PairFunction<OrderEntry, OrderRootType, VirtualFile[]> substitutor = computeSubstitutor(classPathType, jdk);
|
||||
configureEnumerator(OrderEnumerator.orderEntries(module).runtimeOnly().recursively().substituteFiles(substitutor)
|
||||
, classPathType).classes().collectPaths(getClassPath());
|
||||
}
|
||||
|
||||
private void configureJdkAccordingToJreSelected(Sdk jdk) {
|
||||
final Sdk currentJdk = getJdk();
|
||||
if (currentJdk != null) {
|
||||
getClassPath().addVirtualFiles(jdk.getRootProvider().getFiles(OrderRootType.CLASSES));
|
||||
}
|
||||
@Nullable
|
||||
private static PairFunction<OrderEntry, OrderRootType, VirtualFile[]> computeSubstitutor(int classPathType, final Sdk jdk) {
|
||||
return (classPathType & JDK_ONLY) == 0 ? null : new PairFunction<OrderEntry, OrderRootType, VirtualFile[]>() {
|
||||
@Override
|
||||
public VirtualFile[] fun(OrderEntry orderEntry, OrderRootType orderRootType) {
|
||||
if (orderEntry instanceof JdkOrderEntry) {
|
||||
return jdk.getRootProvider().getFiles(orderRootType);
|
||||
}
|
||||
return orderEntry.getFiles(orderRootType);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public void setDefaultCharset(final Project project) {
|
||||
@@ -109,9 +117,8 @@ public class JavaParameters extends SimpleJavaParameters {
|
||||
if ((classPathType & CLASSES_ONLY) == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
configureJdkAccordingToJreSelected(getJdk());
|
||||
configureEnumerator(OrderEnumerator.orderEntries(project).runtimeOnly().withoutSdk(), classPathType).collectPaths(getClassPath());
|
||||
final PairFunction<OrderEntry, OrderRootType, VirtualFile[]> substitutor = computeSubstitutor(classPathType, jdk);
|
||||
configureEnumerator(OrderEnumerator.orderEntries(project).runtimeOnly().substituteFiles(substitutor), classPathType).classes().collectPaths(getClassPath());
|
||||
}
|
||||
|
||||
private static OrderEnumerator configureEnumerator(OrderEnumerator enumerator, int classPathType) {
|
||||
|
||||
@@ -21,6 +21,7 @@ import com.intellij.openapi.roots.libraries.Library;
|
||||
import com.intellij.openapi.roots.ui.configuration.ModulesProvider;
|
||||
import com.intellij.openapi.util.Condition;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.util.PairFunction;
|
||||
import com.intellij.util.PathsList;
|
||||
import com.intellij.util.Processor;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -188,4 +189,7 @@ public abstract class OrderEnumerator {
|
||||
public static OrderEnumerator orderEntries(@NotNull Project project) {
|
||||
return ProjectRootManager.getInstance(project).orderEntries();
|
||||
}
|
||||
|
||||
public abstract OrderEnumerator substituteFiles(PairFunction<OrderEntry, OrderRootType, VirtualFile[]> substitutor);
|
||||
public abstract OrderEnumerator substituteUrls(PairFunction<OrderEntry, OrderRootType, String[]> substitutor);
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ import com.intellij.openapi.roots.ui.configuration.ModulesProvider;
|
||||
import com.intellij.openapi.util.Condition;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.VirtualFileManager;
|
||||
import com.intellij.util.PairFunction;
|
||||
import com.intellij.util.Processor;
|
||||
import com.intellij.util.SmartList;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
@@ -51,6 +52,8 @@ abstract class OrderEnumeratorBase extends OrderEnumerator {
|
||||
private boolean myRecursivelyExportedOnly;
|
||||
private boolean myExportedOnly;
|
||||
private Condition<OrderEntry> myCondition;
|
||||
private PairFunction<OrderEntry, OrderRootType, VirtualFile[]> myFileSubstitutor;
|
||||
private PairFunction<OrderEntry, OrderRootType, String[]> myUrlsSubstitutor;
|
||||
private List<OrderEnumerationHandler> myCustomHandlers;
|
||||
private ModulesProvider myModulesProvider;
|
||||
private OrderRootsCache myCache;
|
||||
@@ -138,6 +141,18 @@ abstract class OrderEnumeratorBase extends OrderEnumerator {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public OrderEnumerator substituteFiles(PairFunction<OrderEntry, OrderRootType, VirtualFile[]> substitutor) {
|
||||
myFileSubstitutor = substitutor;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public OrderEnumerator substituteUrls(PairFunction<OrderEntry, OrderRootType, String[]> substitutor) {
|
||||
myUrlsSubstitutor = substitutor;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public OrderRootsEnumerator classes() {
|
||||
return new OrderRootsEnumeratorImpl(this, OrderRootType.CLASSES);
|
||||
@@ -306,6 +321,18 @@ abstract class OrderEnumeratorBase extends OrderEnumerator {
|
||||
return false;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public VirtualFile[] substituteFiles(OrderEntry orderEntry, OrderRootType rootType) {
|
||||
if (myFileSubstitutor != null) return myFileSubstitutor.fun(orderEntry, rootType);
|
||||
return orderEntry.getFiles(rootType);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public String[] substituteUrls(OrderEntry orderEntry, OrderRootType rootType) {
|
||||
if (myUrlsSubstitutor != null) return myUrlsSubstitutor.fun(orderEntry, rootType);
|
||||
return orderEntry.getUrls(rootType);
|
||||
}
|
||||
|
||||
private class OrderEntryProcessor<R> implements Processor<OrderEntry> {
|
||||
private R myValue;
|
||||
private final RootPolicy<R> myPolicy;
|
||||
|
||||
+2
-2
@@ -97,7 +97,7 @@ public class OrderRootsEnumeratorImpl implements OrderRootsEnumerator {
|
||||
}
|
||||
}
|
||||
else {
|
||||
Collections.addAll(result, orderEntry.getFiles(myRootType));
|
||||
Collections.addAll(result, myOrderEnumerator.substituteFiles(orderEntry, myRootType));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -124,7 +124,7 @@ public class OrderRootsEnumeratorImpl implements OrderRootsEnumerator {
|
||||
}
|
||||
}
|
||||
else {
|
||||
Collections.addAll(result, orderEntry.getUrls(myRootType));
|
||||
Collections.addAll(result, myOrderEnumerator.substituteUrls(orderEntry, myRootType));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user