// Portions of code from // https://github.com/MellongLau/AMMethod2Implement // MIT license #import "P4XcodeHelper.h" #import @implementation P4XcodeHelper + (NSURL*)currentProjectURL { for (NSDocument* currentDoc in [NSApp orderedDocuments]) { @try { NSURL* url = [[[currentDoc valueForKeyPath:@"_workspace.representingFilePath.fileURL"] URLByDeletingLastPathComponent] filePathURL]; if (url) { return url; } } @catch (NSException* exception) { NSLog(@"Exception raised while searching for workspace URL: %@", exception); } } return nil; } /* https://github.com/MellongLau/AMMethod2Implement/blob/master/AMMethod2Implement/AMXcodeHelper.m */ + (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; } + (NSObject *)currentWorkspaceDocument { NSWindowController *currentWindowController = [[NSApp keyWindow] windowController]; id document = [currentWindowController document]; if (currentWindowController && [document isKindOfClass:NSClassFromString(@"IDEWorkspaceDocument")]) { return (NSObject *)document; } return nil; } + (IDESourceCodeDocument *)currentSourceCodeDocument { if ([[P4XcodeHelper currentEditor] isKindOfClass:NSClassFromString(@"IDESourceCodeEditor")]) { IDESourceCodeEditor *editor = [P4XcodeHelper currentEditor]; return editor.sourceCodeDocument; } if ([[P4XcodeHelper currentEditor] isKindOfClass:NSClassFromString(@"IDESourceCodeComparisonEditor")]) { IDESourceCodeComparisonEditor *editor = [P4XcodeHelper currentEditor]; if ([[editor primaryDocument] isKindOfClass:NSClassFromString(@"IDESourceCodeDocument")]) { IDESourceCodeDocument *document = (IDESourceCodeDocument *)editor.primaryDocument; return document; } } return nil; } @end