--- a/RefactoringRope/RefactoringClient.py Sat Sep 23 17:40:07 2017 +0200 +++ b/RefactoringRope/RefactoringClient.py Sun Sep 24 11:56:11 2017 +0200 @@ -82,6 +82,11 @@ self.__calculateInlineArgumentDefaultChanges, "CalculateModuleToPackageChanges": self.__calculateModuleToPackageChanges, + "RequestFieldName": self.__requestFieldName, + "CalculateEncapsulateFieldChanges": + self.__calculateEncapsulateFieldChanges, + "CalculateLocalToAttributeChanges": + self.__calculateLocalToAttributeChanges, } from FileSystemCommands import RefactoringClientFileSystemCommands @@ -469,7 +474,8 @@ self.__progressHandle = ProgressHandle(self, params["Title"], False) try: changes = self.__changes[params["ChangeGroup"]] - self.__project.do(changes, self.__progressHandle) + if changes is not None: + self.__project.do(changes, self.__progressHandle) except Exception as err: errorDict = self.__handleRopeError(err) self.__progressHandle.reset() @@ -540,7 +546,7 @@ renameInStrings = params["RenameInStrings"] errorDict = {} - changes = [] + changes = None result = { "ChangeGroup": changeGroup, "Title": title, @@ -623,7 +629,7 @@ writes = params["Writes"] errorDict = {} - changes = [] + changes = None result = { "ChangeGroup": changeGroup, "Title": title, @@ -667,7 +673,7 @@ global_ = params["Global"] errorDict = {} - changes = [] + changes = None result = { "ChangeGroup": changeGroup, "Title": title, @@ -751,7 +757,7 @@ kind = params["Kind"] errorDict = {} - changes = [] + changes = None result = { "ChangeGroup": changeGroup, "Title": title, @@ -850,7 +856,7 @@ destination = params["DestinationModule"] errorDict = {} - changes = [] + changes = None result = { "ChangeGroup": changeGroup, "Title": title, @@ -940,7 +946,7 @@ offset = params["Offset"] errorDict = {} - changes = [] + changes = None result = { "ChangeGroup": changeGroup, "Title": title, @@ -983,7 +989,7 @@ globalFactory = params["GlobalFactory"] errorDict = {} - changes = [] + changes = None result = { "ChangeGroup": changeGroup, "Title": title, @@ -1028,7 +1034,7 @@ parameterName = params["Name"] errorDict = {} - changes = [] + changes = None result = { "ChangeGroup": changeGroup, "Title": title, @@ -1067,7 +1073,7 @@ methodName = params["MethodName"] errorDict = {} - changes = [] + changes = None result = { "ChangeGroup": changeGroup, "Title": title, @@ -1125,7 +1131,7 @@ imports = params["Imports"] errorDict = {} - changes = [] + changes = None result = { "ChangeGroup": changeGroup, "Title": title, @@ -1206,6 +1212,7 @@ doHierarchy = params["Hierarchy"] errorDict = {} + changes = None result = { "ChangeGroup": changeGroup, "Title": title, @@ -1263,6 +1270,7 @@ argumentIndex = params["Index"] errorDict = {} + changes = None result = { "ChangeGroup": changeGroup, "Title": title, @@ -1304,6 +1312,7 @@ filename = params["FileName"] errorDict = {} + changes = None result = { "ChangeGroup": changeGroup, "Title": title, @@ -1336,6 +1345,137 @@ result.update(errorDict) self.sendJson("Changes", result) + + def __requestFieldName(self, params): + """ + Private method to calculate the 'Field Name' based on the parameters + sent by the server. + + @param params dictionary containing the method parameters sent by + the server + @type dict + """ + changeGroup = params["ChangeGroup"] + title = params["Title"] + filename = params["FileName"] + offset = params["Offset"] + + errorDict = {} + result = { + "Subcommand": "FieldName", + "ChangeGroup": changeGroup, + "Title": title, + } + + import rope.refactor.encapsulate_field + resource = rope.base.libutils.path_to_resource( + self.__project, filename) + try: + encapsulateField = \ + rope.refactor.encapsulate_field.EncapsulateField( + self.__project, resource, offset) + result["Name"] = encapsulateField.get_field_name() + except Exception as err: + errorDict = self.__handleRopeError(err) + + result.update(errorDict) + + self.sendJson("Changes", result) + + def __calculateEncapsulateFieldChanges(self, params): + """ + Private method to calculate the 'Encapsulate Field' changes based on + the parameters sent by the server. + + @param params dictionary containing the method parameters sent by + the server + @type dict + """ + changeGroup = params["ChangeGroup"] + title = params["Title"] + filename = params["FileName"] + offset = params["Offset"] + getter = params["Getter"] + setter = params["Setter"] + + errorDict = {} + changes = None + result = { + "ChangeGroup": changeGroup, + "Title": title, + } + + import rope.refactor.encapsulate_field + resource = rope.base.libutils.path_to_resource( + self.__project, filename) + self.__progressHandle = ProgressHandle(self, title, True) + try: + encapsulateField = \ + rope.refactor.encapsulate_field.EncapsulateField( + self.__project, resource, offset) + changes = encapsulateField.get_changes( + getter=getter, setter=setter, + task_handle=self.__progressHandle) + except Exception as err: + errorDict = self.__handleRopeError(err) + self.__progressHandle.reset() + self.__progressHandle = None + + self.__changes[changeGroup] = changes + + result["Subcommand"] = "ChangesCalculated" + result.update(errorDict) + + self.sendJson("Changes", result) + + def __calculateLocalToAttributeChanges(self, params): + """ + Private method to calculate the 'Local Variabe to Attribute' changes + based on the parameters sent by the server. + + @param params dictionary containing the method parameters sent by + the server + @type dict + """ + changeGroup = params["ChangeGroup"] + title = params["Title"] + filename = params["FileName"] + offset = params["Offset"] + + errorDict = {} + changes = None + result = { + "ChangeGroup": changeGroup, + "Title": title, + } + + import rope.refactor.localtofield + resource = rope.base.libutils.path_to_resource( + self.__project, filename) + try: + changes = rope.refactor.localtofield.LocalToField( + self.__project, resource, offset).get_changes() + except Exception as err: + errorDict = self.__handleRopeError(err) + + self.__changes[changeGroup] = changes + + # send the change description first + if changes: + description = changes.description + else: + description = "" + self.sendJson("Changes", { + "ChangeGroup": changeGroup, + "Title": title, + "Subcommand": "ChangeDescription", + "Description": description, + }) + + result["Subcommand"] = "ChangesCalculated" + result.update(errorDict) + + self.sendJson("Changes", result) if __name__ == '__main__':