summaryrefslogtreecommitdiff
path: root/android/src/com/android/tools/idea/editors/navigation/Utilities.java
diff options
context:
space:
mode:
Diffstat (limited to 'android/src/com/android/tools/idea/editors/navigation/Utilities.java')
-rw-r--r--android/src/com/android/tools/idea/editors/navigation/Utilities.java33
1 files changed, 33 insertions, 0 deletions
diff --git a/android/src/com/android/tools/idea/editors/navigation/Utilities.java b/android/src/com/android/tools/idea/editors/navigation/Utilities.java
index 0149663c913..92f521f63a0 100644
--- a/android/src/com/android/tools/idea/editors/navigation/Utilities.java
+++ b/android/src/com/android/tools/idea/editors/navigation/Utilities.java
@@ -15,8 +15,10 @@
*/
package com.android.tools.idea.editors.navigation;
+import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
+import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
@@ -28,6 +30,7 @@ import org.jetbrains.annotations.Nullable;
import java.awt.*;
import java.awt.geom.AffineTransform;
import java.io.File;
+import java.io.IOException;
public class Utilities {
public static final Dimension ZERO_SIZE = new Dimension(0, 0);
@@ -233,4 +236,34 @@ public class Utilities {
public static VirtualFile virtualFile(File file) {
return LocalFileSystem.getInstance().findFileByIoFile(file);
}
+
+ public static VirtualFile mkDirs(VirtualFile dir, String path) throws IOException {
+ for(String dirName : path.split("/")) {
+ VirtualFile existingDir = dir.findFileByRelativePath(dirName);
+ dir = (existingDir != null) ? existingDir : dir.createChildDirectory(null, dirName);
+ }
+ return dir;
+ }
+
+ public static VirtualFile getNavigationFile(final VirtualFile baseDir, String deviceQualifier, final String fileName) {
+ final String relativePathOfNavDir = ".navigation" + "/" + deviceQualifier;
+ VirtualFile navFile = baseDir.findFileByRelativePath(relativePathOfNavDir + "/" + fileName);
+ if (navFile == null) {
+ navFile = ApplicationManager.getApplication().runWriteAction(new Computable<VirtualFile>() {
+ @Override
+ public VirtualFile compute() {
+ try {
+ VirtualFile dir = mkDirs(baseDir, relativePathOfNavDir);
+ return dir.createChildData(null, fileName);
+ }
+ catch (IOException e) {
+ assert false;
+ return null;
+ }
+
+ }
+ });
+ }
+ return navFile;
+ }
}