-
Notifications
You must be signed in to change notification settings - Fork 37
Expand file tree
/
Copy pathRCXcode.m
More file actions
120 lines (102 loc) · 5.05 KB
/
RCXcode.m
File metadata and controls
120 lines (102 loc) · 5.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
//
//
// Created by Zitao on 12/05/13.
//
//
#import "RCXcode.h"
@implementation RCXcode {}
#pragma mark - Helpers
+ (id)currentEditor {
NSWindowController *currentWindowController = [[NSApp keyWindow] windowController];
if ([currentWindowController isKindOfClass:NSClassFromString(@"IDEWorkspaceWindowController")]) {
IDEWorkspaceWindowController *workspaceController = (IDEWorkspaceWindowController *)currentWindowController;
IDEEditorArea *editorArea = [workspaceController editorArea];
IDEEditorContext *editorContext = [editorArea lastActiveEditorContext];
return [editorContext editor];
}
return nil;
}
+ (IDEWorkspaceDocument *)currentWorkspaceDocument {
NSWindowController *currentWindowController = [[NSApp keyWindow] windowController];
id document = [currentWindowController document];
if (currentWindowController && [document isKindOfClass:NSClassFromString(@"IDEWorkspaceDocument")]) {
return (IDEWorkspaceDocument *)document;
}
return nil;
}
+ (IDESourceCodeDocument *)currentSourceCodeDocument {
if ([[RCXcode currentEditor] isKindOfClass:NSClassFromString(@"IDESourceCodeEditor")]) {
IDESourceCodeEditor *editor = [RCXcode currentEditor];
return editor.sourceCodeDocument;
}
if ([[RCXcode currentEditor] isKindOfClass:NSClassFromString(@"IDESourceCodeComparisonEditor")]) {
IDESourceCodeComparisonEditor *editor = [RCXcode currentEditor];
if ([[editor primaryDocument] isKindOfClass:NSClassFromString(@"IDESourceCodeDocument")]) {
IDESourceCodeDocument *document = (IDESourceCodeDocument *)editor.primaryDocument;
return document;
}
}
return nil;
}
+ (NSTextView *)currentSourceCodeTextView {
if ([[RCXcode currentEditor] isKindOfClass:NSClassFromString(@"IDESourceCodeEditor")]) {
IDESourceCodeEditor *editor = [RCXcode currentEditor];
return editor.textView;
}
if ([[RCXcode currentEditor] isKindOfClass:NSClassFromString(@"IDESourceCodeComparisonEditor")]) {
IDESourceCodeComparisonEditor *editor = [RCXcode currentEditor];
return editor.keyTextView;
}
return nil;
}
+ (NSArray *)selectedObjCFileNavigableItems {
NSMutableArray *mutableArray = [NSMutableArray array];
id currentWindowController = [[NSApp keyWindow] windowController];
if ([currentWindowController isKindOfClass:NSClassFromString(@"IDEWorkspaceWindowController")]) {
IDEWorkspaceWindowController *workspaceController = currentWindowController;
IDEWorkspaceTabController *workspaceTabController = [workspaceController activeWorkspaceTabController];
IDENavigatorArea *navigatorArea = [workspaceTabController navigatorArea];
id currentNavigator = [navigatorArea currentNavigator];
if ([currentNavigator isKindOfClass:NSClassFromString(@"IDEStructureNavigator")]) {
IDEStructureNavigator *structureNavigator = currentNavigator;
for (id selectedObject in structureNavigator.selectedObjects) {
if ([selectedObject isKindOfClass:NSClassFromString(@"IDEFileNavigableItem")]) {
IDEFileNavigableItem *fileNavigableItem = selectedObject;
NSString *uti = fileNavigableItem.documentType.identifier;
if ([uti isEqualToString:(NSString *)kUTTypeObjectiveCSource] || [uti isEqualToString:(NSString *)kUTTypeCHeader]) {
[mutableArray addObject:fileNavigableItem];
}
}
}
}
}
if (mutableArray.count) {
return [NSArray arrayWithArray:mutableArray];
}
return nil;
}
+ (NSArray *)containerFolderURLsForNavigableItem:(IDENavigableItem *)navigableItem {
NSMutableArray *mArray = [NSMutableArray array];
do {
NSURL *folderURL = nil;
id representedObject = navigableItem.representedObject;
if ([navigableItem isKindOfClass:NSClassFromString(@"IDEGroupNavigableItem")]) {
// IDE-GROUP (a folder in the navigator)
IDEGroup *group = (IDEGroup *)representedObject;
folderURL = group.resolvedFilePath.fileURL;
} else if ([navigableItem isKindOfClass:NSClassFromString(@"IDEContainerFileReferenceNavigableItem")]) {
// CONTAINER (an Xcode project)
IDEFileReference *fileReference = representedObject;
folderURL = [fileReference.resolvedFilePath.fileURL URLByDeletingLastPathComponent];
} else if ([navigableItem isKindOfClass:NSClassFromString(@"IDEKeyDrivenNavigableItem")]) {
// WORKSPACE (root: Xcode project or workspace)
IDEWorkspace *workspace = representedObject;
folderURL = [workspace.representingFilePath.fileURL URLByDeletingLastPathComponent];
}
if (folderURL && ![mArray containsObject:folderURL]) [mArray addObject:folderURL];
navigableItem = [navigableItem parentItem];
} while (navigableItem != nil);
if (mArray.count > 0) return [NSArray arrayWithArray:mArray];
return nil;
}
@end