mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
encapsulate composite project root
This commit is contained in:
+40
-2
@@ -22,6 +22,7 @@ import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jdom.Element;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -32,6 +33,10 @@ import java.util.List;
|
||||
* @author mike
|
||||
*/
|
||||
class CompositeProjectRoot implements ProjectRoot {
|
||||
@NonNls private static final String SIMPLE_ROOT = "simple";
|
||||
@NonNls private static final String COMPOSITE_ROOT = "composite";
|
||||
@NonNls private static final String ATTRIBUTE_TYPE = "type";
|
||||
@NonNls private static final String ELEMENT_ROOT = "root";
|
||||
private final List<ProjectRoot> myRoots = new ArrayList<>();
|
||||
|
||||
@NotNull
|
||||
@@ -104,13 +109,13 @@ class CompositeProjectRoot implements ProjectRoot {
|
||||
|
||||
public void readExternal(Element element) {
|
||||
for (Element child : element.getChildren()) {
|
||||
myRoots.add(ProjectRootUtil.read(child));
|
||||
myRoots.add(read(child));
|
||||
}
|
||||
}
|
||||
|
||||
public void writeExternal(Element element) {
|
||||
for (ProjectRoot root : myRoots) {
|
||||
Element e = ProjectRootUtil.write(root);
|
||||
Element e = write(root);
|
||||
element.addContent(e);
|
||||
}
|
||||
}
|
||||
@@ -121,4 +126,37 @@ class CompositeProjectRoot implements ProjectRoot {
|
||||
root.update();
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
static ProjectRoot read(Element element) {
|
||||
final String type = element.getAttributeValue(ATTRIBUTE_TYPE);
|
||||
|
||||
if (type.equals(SIMPLE_ROOT)) {
|
||||
return new SimpleProjectRoot(element);
|
||||
}
|
||||
if (type.equals(COMPOSITE_ROOT)) {
|
||||
CompositeProjectRoot root = new CompositeProjectRoot();
|
||||
root.readExternal(element);
|
||||
return root;
|
||||
}
|
||||
throw new IllegalArgumentException("Wrong type: " + type);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
static Element write(ProjectRoot projectRoot) {
|
||||
Element element = new Element(ELEMENT_ROOT);
|
||||
if (projectRoot instanceof SimpleProjectRoot) {
|
||||
element.setAttribute(ATTRIBUTE_TYPE, SIMPLE_ROOT);
|
||||
((SimpleProjectRoot)projectRoot).writeExternal(element);
|
||||
}
|
||||
else if (projectRoot instanceof CompositeProjectRoot) {
|
||||
element.setAttribute(ATTRIBUTE_TYPE, COMPOSITE_ROOT);
|
||||
((CompositeProjectRoot)projectRoot).writeExternal(element);
|
||||
}
|
||||
else {
|
||||
throw new IllegalArgumentException("Wrong root: " + projectRoot);
|
||||
}
|
||||
|
||||
return element;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -254,7 +254,7 @@ public class ProjectRootContainerImpl implements JDOMExternalizable, ProjectRoot
|
||||
if (children.size() != 1) {
|
||||
LOG.error(children);
|
||||
}
|
||||
CompositeProjectRoot root = (CompositeProjectRoot)ProjectRootUtil.read(children.get(0));
|
||||
CompositeProjectRoot root = (CompositeProjectRoot)CompositeProjectRoot.read(children.get(0));
|
||||
myRoots.put(type, root);
|
||||
}
|
||||
|
||||
@@ -263,7 +263,7 @@ public class ProjectRootContainerImpl implements JDOMExternalizable, ProjectRoot
|
||||
if (sdkRootName != null) {
|
||||
Element e = new Element(sdkRootName);
|
||||
roots.addContent(e);
|
||||
final Element root = ProjectRootUtil.write(myRoots.get(type));
|
||||
final Element root = CompositeProjectRoot.write(myRoots.get(type));
|
||||
e.addContent(root);
|
||||
}
|
||||
}
|
||||
|
||||
-61
@@ -18,7 +18,6 @@ package com.intellij.openapi.projectRoots.impl;
|
||||
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.projectRoots.ex.ProjectRoot;
|
||||
import com.intellij.openapi.roots.OrderEnumerator;
|
||||
import com.intellij.openapi.roots.ProjectRootManager;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
@@ -26,8 +25,6 @@ import com.intellij.psi.PsiDirectory;
|
||||
import com.intellij.psi.PsiManager;
|
||||
import com.intellij.psi.impl.PsiManagerImpl;
|
||||
import com.intellij.psi.impl.file.impl.FileManager;
|
||||
import org.jdom.Element;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -39,67 +36,9 @@ import java.util.List;
|
||||
public class ProjectRootUtil {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.projectRoots.impl.ProjectRootUtil");
|
||||
|
||||
@NonNls private static final String SIMPLE_ROOT = "simple";
|
||||
@NonNls private static final String COMPOSITE_ROOT = "composite";
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
@NonNls public static final String JDK_ROOT = "jdk";
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
@NonNls public static final String OUTPUT_ROOT = "output";
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
@NonNls public static final String EXCLUDED_OUTPUT = "excludedOutput";
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
@NonNls public static final String LIBRARY_ROOT = "library";
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
@NonNls public static final String EJB_ROOT = "ejb";
|
||||
@NonNls private static final String ATTRIBUTE_TYPE = "type";
|
||||
@NonNls private static final String ELEMENT_ROOT = "root";
|
||||
|
||||
private ProjectRootUtil() {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
static ProjectRoot read(Element element) {
|
||||
final String type = element.getAttributeValue(ATTRIBUTE_TYPE);
|
||||
|
||||
if (type.equals(SIMPLE_ROOT)) {
|
||||
return new SimpleProjectRoot(element);
|
||||
}
|
||||
if (type.equals(COMPOSITE_ROOT)) {
|
||||
CompositeProjectRoot root = new CompositeProjectRoot();
|
||||
root.readExternal(element);
|
||||
return root;
|
||||
}
|
||||
throw new IllegalArgumentException("Wrong type: " + type);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
static Element write(ProjectRoot projectRoot) {
|
||||
Element element = new Element(ELEMENT_ROOT);
|
||||
if (projectRoot instanceof SimpleProjectRoot) {
|
||||
element.setAttribute(ATTRIBUTE_TYPE, SIMPLE_ROOT);
|
||||
((SimpleProjectRoot)projectRoot).writeExternal(element);
|
||||
}
|
||||
else if (projectRoot instanceof CompositeProjectRoot) {
|
||||
element.setAttribute(ATTRIBUTE_TYPE, COMPOSITE_ROOT);
|
||||
((CompositeProjectRoot)projectRoot).writeExternal(element);
|
||||
}
|
||||
else {
|
||||
throw new IllegalArgumentException("Wrong root: " + projectRoot);
|
||||
}
|
||||
|
||||
return element;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static PsiDirectory[] convertRoots(final Project project, VirtualFile[] roots) {
|
||||
return convertRoots(((PsiManagerImpl)PsiManager.getInstance(project)).getFileManager(), roots);
|
||||
|
||||
Reference in New Issue
Block a user