mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
distinguish scopes per file (IDEA-68759)
This commit is contained in:
+47
-1
@@ -19,11 +19,14 @@ package com.intellij.packageDependencies;
|
||||
import com.intellij.ide.IdeBundle;
|
||||
import com.intellij.ide.impl.ContentManagerWatcher;
|
||||
import com.intellij.openapi.components.State;
|
||||
import com.intellij.openapi.components.StateSplitter;
|
||||
import com.intellij.openapi.components.Storage;
|
||||
import com.intellij.openapi.components.StorageScheme;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.startup.StartupManager;
|
||||
import com.intellij.openapi.util.*;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.wm.ToolWindow;
|
||||
import com.intellij.openapi.wm.ToolWindowAnchor;
|
||||
import com.intellij.openapi.wm.ToolWindowId;
|
||||
@@ -32,6 +35,8 @@ import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.search.scope.packageSet.*;
|
||||
import com.intellij.ui.content.Content;
|
||||
import com.intellij.ui.content.ContentManager;
|
||||
import com.intellij.util.text.UniqueNameGenerator;
|
||||
import org.jdom.Attribute;
|
||||
import org.jdom.Element;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -46,7 +51,8 @@ import java.util.*;
|
||||
@Storage(
|
||||
id="other",
|
||||
file = "$PROJECT_FILE$"
|
||||
)}
|
||||
), @Storage(id = "dir", file = "$PROJECT_CONFIG_DIR$/scopes/", scheme = StorageScheme.DIRECTORY_BASED,
|
||||
stateSplitter = DependencyValidationManagerImpl.ScopesStateSplitter.class)}
|
||||
)
|
||||
public class DependencyValidationManagerImpl extends DependencyValidationManager {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.packageDependencies.DependencyValidationManagerImpl");
|
||||
@@ -303,4 +309,44 @@ public class DependencyValidationManagerImpl extends DependencyValidationManager
|
||||
if (fromNamedScope == null || toNamedScope == null) return null;
|
||||
return new DependencyRule(fromNamedScope, toNamedScope, Boolean.valueOf(denyRule).booleanValue());
|
||||
}
|
||||
|
||||
public static class ScopesStateSplitter implements StateSplitter {
|
||||
public List<Pair<Element, String>> splitState(Element e) {
|
||||
final UniqueNameGenerator generator = new UniqueNameGenerator();
|
||||
final List<Pair<Element, String>> result = new ArrayList<Pair<Element, String>>();
|
||||
|
||||
final Element[] elements = JDOMUtil.getElements(e);
|
||||
for (Element element : elements) {
|
||||
if (element.getName().equals("scope")) {
|
||||
element.detach();
|
||||
String scopeName = element.getAttributeValue("name");
|
||||
assert scopeName != null;
|
||||
final String name = generator.generateUniqueName(FileUtil.sanitizeFileName(scopeName)) + ".xml";
|
||||
result.add(new Pair<Element, String>(element, name));
|
||||
}
|
||||
}
|
||||
result.add(new Pair<Element, String>(e, generator.generateUniqueName("scope_settings") + ".xml"));
|
||||
return result;
|
||||
}
|
||||
|
||||
public void mergeStatesInto(Element target, Element[] elements) {
|
||||
for (Element element : elements) {
|
||||
if (element.getName().equals("scope")) {
|
||||
element.detach();
|
||||
target.addContent(element);
|
||||
}
|
||||
else {
|
||||
final Element[] states = JDOMUtil.getElements(element);
|
||||
for (Element state : states) {
|
||||
state.detach();
|
||||
target.addContent(state);
|
||||
}
|
||||
for (Object attr : element.getAttributes()) {
|
||||
target.setAttribute((Attribute)((Attribute)attr).clone());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user