Пример #1
0
        public IType RenameClass(IProgressMonitor monitor, IType cls, string newName, RefactoryScope scope)
        {
            try {
                MemberReferenceCollection refs = new MemberReferenceCollection();
                Refactor(monitor, cls, scope, new RefactorDelegate(new RefactorFindClassReferences(cls, refs, false).Refactor));
                refs.RenameAll(newName);

                RefactorerContext gctx = GetGeneratorContext(cls);
                IRefactorer       r    = GetGeneratorForClass(cls);

                foreach (IMethod method in cls.Methods)
                {
                    if (method.IsConstructor)
                    {
                        r.RenameMember(gctx, cls, (IMember)method, newName);
                    }
                }

                cls = r.RenameClass(gctx, cls, newName);

                gctx.Save();

                return(cls);
            } catch (Exception e) {
                LoggingService.LogError(GettextCatalog.GetString("Error while renaming {0} to {1}: {2}", cls, newName, e.ToString()));
                return(null);
            }
        }
Пример #2
0
        public void AddAttribute(IType cls, CodeAttributeDeclaration attr)
        {
            RefactorerContext gctx = GetGeneratorContext(cls);
            IRefactorer       gen  = GetGeneratorForClass(cls);

            gen.AddAttribute(gctx, cls, attr);
            gctx.Save();
        }
Пример #3
0
        public IType AddMembers(IType cls, IEnumerable <CodeTypeMember> members, string foldingRegionName)
        {
            RefactorerContext gctx = GetGeneratorContext(cls);
            IRefactorer       gen  = GetGeneratorForClass(cls);

            gen.AddMembers(gctx, cls, members, foldingRegionName);
            gctx.Save();
            return(GetUpdatedClass(gctx, cls));
        }
Пример #4
0
        public IMember ImplementMember(IType cls, IMember member, IReturnType privateReturnType)
        {
            RefactorerContext gctx = GetGeneratorContext(cls);
            IRefactorer       gen  = GetGeneratorForClass(cls);
            IMember           m    = gen.ImplementMember(gctx, cls, member, privateReturnType);

            gctx.Save();
            return(m);
        }
Пример #5
0
        public IMember AddMember(IType cls, CodeTypeMember member)
        {
            RefactorerContext gctx = GetGeneratorContext(cls);
            IRefactorer       gen  = GetGeneratorForClass(cls);
            IMember           m    = gen.AddMember(gctx, cls, member);

            gctx.Save();
            return(m);
        }
Пример #6
0
        public IType CreateClass(Project project, string language, string directory, string namspace, CodeTypeDeclaration type)
        {
            ProjectDom        ctx  = ProjectDomService.GetProjectDom(project);
            RefactorerContext gctx = new RefactorerContext(ctx, fileProvider, null);
            IRefactorer       gen  = LanguageBindingService.GetRefactorerForLanguage(language);
            IType             c    = gen.CreateClass(gctx, directory, namspace, type);

            gctx.Save();
            return(c);
        }
Пример #7
0
        public bool ClassSupportsOperation(IType cls, RefactorOperations operation)
        {
            IRefactorer r = GetGeneratorForClass(cls);

            if (r == null)
            {
                return(false);
            }
            return((r.SupportedOperations & operation) == operation);
        }
Пример #8
0
        public bool LanguageSupportsOperation(string langName, RefactorOperations operation)
        {
            IRefactorer r = LanguageBindingService.GetRefactorerForLanguage(langName);

            if (r == null)
            {
                return(false);
            }
            return((r.SupportedOperations & operation) == operation);
        }
Пример #9
0
        public IMember EncapsulateField(IProgressMonitor monitor, IType cls, IField field, string propName, MemberAttributes attr, bool generateSetter, bool updateInternalRefs)
        {
            RefactoryScope scope = GetScope(field);

            MemberReferenceCollection refs = new MemberReferenceCollection();

            Refactor(monitor, cls, scope, new RefactorDelegate(new RefactorFindMemberReferences(cls, field, refs, false).Refactor));

            if (!updateInternalRefs)
            {
                ArrayList list = new ArrayList();
                list.AddRange(refs);
                list.Sort(new MemberReferenceCollection.MemberComparer());

                foreach (MemberReference mref in list)
                {
                    bool rename = true;
                    foreach (IType part in field.DeclaringType.Parts)
                    {
                        if (mref.FileName == part.CompilationUnit.FileName)
                        {
                            DomRegion region = part.BodyRegion;

                            // check if the reference is internal to the class
                            if ((mref.Line > region.Start.Line ||
                                 (mref.Line == region.Start.Line && mref.Column >= region.Start.Column)) &&
                                (mref.Line < region.End.Line ||
                                 (mref.Line == region.End.Line && mref.Column <= region.End.Column)))
                            {
                                // Internal to the class, don't rename
                                rename = false;
                                break;
                            }
                        }
                    }

                    if (rename)
                    {
                        mref.Rename(propName);
                    }
                }
            }
            else
            {
                refs.RenameAll(propName);
            }

            RefactorerContext gctx = GetGeneratorContext(cls);
            IRefactorer       r    = GetGeneratorForClass(cls);
            IMember           m    = r.EncapsulateField(gctx, cls, field, propName, attr, generateSetter);

            gctx.Save();

            return(m);
        }
Пример #10
0
 public void RemoveMember(IType cls, IMember member)
 {
     try {
         RefactorerContext gctx = GetGeneratorContext(cls);
         IRefactorer       gen  = GetGeneratorForClass(cls);
         gen.RemoveMember(gctx, cls, member);
         gctx.Save();
     } catch (Exception e) {
         LoggingService.LogError(GettextCatalog.GetString("Error while removing {0}:{1}", member, e.ToString()));
     }
 }
Пример #11
0
        public IType ImplementMembers(IType cls, IEnumerable <KeyValuePair <IMember, IReturnType> > members,
                                      string foldingRegionName)
        {
            RefactorerContext gctx = GetGeneratorContext(cls);

            cls = GetUpdatedClass(gctx, cls);
            IRefactorer gen = GetGeneratorForClass(cls);

            gen.ImplementMembers(gctx, cls, members, foldingRegionName);
            gctx.Save();
            return(GetUpdatedClass(gctx, cls));
        }
Пример #12
0
 public void Refactor(IProgressMonitor monitor, RefactorerContext rctx, IRefactorer r, string fileName)
 {
     try {
         IEnumerable <MemberReference> refs = r.FindClassReferences(rctx, fileName, cls, includeXmlComment);
         if (refs != null)
         {
             references.AddRange(refs);
         }
     } catch (Exception ex) {
         monitor.ReportError(GettextCatalog.GetString("Could not look for references in file '{0}': {1}", fileName, ex.Message), ex);
     }
 }
Пример #13
0
 public IMember ReplaceMember(IType cls, IMember oldMember, CodeTypeMember member)
 {
     try {
         RefactorerContext gctx = GetGeneratorContext(cls);
         IRefactorer       gen  = GetGeneratorForClass(cls);
         IMember           m    = gen.ReplaceMember(gctx, cls, oldMember, member);
         gctx.Save();
         return(m);
     } catch (Exception e) {
         LoggingService.LogError(GettextCatalog.GetString("Error while replacing {0}: {1}", member, e.ToString()));
         return(null);
     }
 }
Пример #14
0
        void Refactor(IProgressMonitor monitor, LocalVariable var, RefactorDelegate refactorDelegate)
        {
            RefactorerContext gctx = GetGeneratorContext(var);
            string            file = var.FileName;

            IRefactorer gen = LanguageBindingService.GetRefactorerForFile(file);

            if (gen == null)
            {
                return;
            }

            refactorDelegate(monitor, gctx, gen, file);
            gctx.Save();
        }
Пример #15
0
        IMember InnerRenameMember(IProgressMonitor monitor, IType cls, IMember member, string newName, RefactoryScope scope)
        {
            try {
                MemberReferenceCollection refs = new MemberReferenceCollection();
                Refactor(monitor, cls, scope, new RefactorDelegate(new RefactorFindMemberReferences(cls, member, refs, false).Refactor));
                refs.RenameAll(newName);

                RefactorerContext gctx = GetGeneratorContext(cls);

                IRefactorer gen = GetGeneratorForClass(cls);
                IMember     m   = gen.RenameMember(gctx, cls, member, newName);
                gctx.Save();
                return(m);
            } catch (Exception e) {
                LoggingService.LogError(GettextCatalog.GetString("Error while renaming {0} to {1}: {2}", member, newName, e.ToString()));
                return(null);
            }
        }
Пример #16
0
        public bool RenameVariable(IProgressMonitor monitor, LocalVariable var, string newName)
        {
            try {
                MemberReferenceCollection refs = new MemberReferenceCollection();
                Refactor(monitor, var, new RefactorDelegate(new RefactorFindVariableReferences(var, refs).Refactor));
                refs.RenameAll(newName);

                RefactorerContext gctx = GetGeneratorContext(var);
                IRefactorer       r    = GetGeneratorForVariable(var);
                bool rv = r.RenameVariable(gctx, var, newName);
                gctx.Save();

                return(rv);
            } catch (Exception e) {
                LoggingService.LogError(GettextCatalog.GetString("Error while renaming {0} to {1}: {2}", var, newName, e.ToString()));
                return(false);
            }
        }
Пример #17
0
        public bool RenameParameter(IProgressMonitor monitor, IParameter param, string newName)
        {
            try {
                MemberReferenceCollection refs = new MemberReferenceCollection();
                Refactor(monitor, param, new RefactorDelegate(new RefactorFindParameterReferences(param, refs, false).Refactor));
                refs.RenameAll(newName);

                IMember           member = param.DeclaringMember;
                RefactorerContext gctx   = GetGeneratorContext(member.DeclaringType);
                IRefactorer       r      = GetGeneratorForClass(member.DeclaringType);
                bool rv = r.RenameParameter(gctx, param, newName);
                gctx.Save();

                return(rv);
            } catch (Exception e) {
                LoggingService.LogError(GettextCatalog.GetString("Error while renaming {0} to {1}: {2}", param, newName, e.ToString()));
                return(false);
            }
        }
Пример #18
0
//		public IType ImplementMembers (IType cls, IEnumerable<KeyValuePair<IMember,IReturnType>> members,
//		                                              string foldingRegionName)
//		{
//			RefactorerContext gctx = GetGeneratorContext (cls);
//			cls = GetUpdatedClass (gctx, cls);
//			IRefactorer gen = GetGeneratorForClass (cls);
//			gen.ImplementMembers (gctx, cls, members, foldingRegionName);
//			gctx.Save ();
//			return GetUpdatedClass (gctx, cls);
//		}

        string GenerateGenerics(IRefactorer gen, IType iface, IReturnType hintReturnType)
        {
            StringBuilder result = new StringBuilder();

            if (hintReturnType != null && hintReturnType.GenericArguments != null)
            {
                result.Append("<");
                for (int i = 0; i < hintReturnType.GenericArguments.Count; i++)
                {
                    result.Append(gen.ConvertToLanguageTypeName(RemoveGenericParamSuffix(hintReturnType.GenericArguments[i].FullName)));
                    result.Append(GenerateGenerics(gen, iface, hintReturnType.GenericArguments[i]));
                    if (i + 1 < hintReturnType.GenericArguments.Count)
                    {
                        result.Append(", ");
                    }
                }
                result.Append(">");
            }
            return(result.ToString());
        }
Пример #19
0
        void RefactorProject(IProgressMonitor monitor, Project p, RefactorDelegate refactorDelegate)
        {
            RefactorerContext gctx = GetGeneratorContext(p);

            monitor.Log.WriteLine(GettextCatalog.GetString("Refactoring project {0}", p.Name));
            foreach (ProjectFile file in p.Files)
            {
                if (file.BuildAction != BuildAction.Compile || !System.IO.File.Exists(file.FilePath))
                {
                    continue;
                }
                IRefactorer gen = LanguageBindingService.GetRefactorerForFile(file.Name);
                if (gen == null)
                {
                    continue;
                }
                refactorDelegate(monitor, gctx, gen, file.Name);
                gctx.Save();
            }
        }
Пример #20
0
		public void Refactor (IProgressMonitor monitor, RefactorerContext rctx, IRefactorer r, string fileName)
		{
			try {
				IEnumerable<MemberReference> refs = r.FindParameterReferences (rctx, fileName, param, includeXmlComment);
				if (refs != null)
					references.AddRange (refs);
			} catch (Exception ex) {
				monitor.ReportError (GettextCatalog.GetString ("Could not look for references in file '{0}': {1}", fileName, ex.Message), ex);
			}
		}
Пример #21
0
//		public IType ImplementMembers (IType cls, IEnumerable<KeyValuePair<IMember,IReturnType>> members,
//		                                              string foldingRegionName)
//		{
//			RefactorerContext gctx = GetGeneratorContext (cls);
//			cls = GetUpdatedClass (gctx, cls);
//			IRefactorer gen = GetGeneratorForClass (cls);
//			gen.ImplementMembers (gctx, cls, members, foldingRegionName);
//			gctx.Save ();
//			return GetUpdatedClass (gctx, cls);
//		}
		
		string GenerateGenerics (IRefactorer gen, IType iface, IReturnType hintReturnType)
		{
			StringBuilder result = new StringBuilder ();
			if (hintReturnType != null && hintReturnType.GenericArguments != null) {
				result.Append ("<");
				for (int i = 0; i < hintReturnType.GenericArguments.Count; i++)  {
					result.Append (gen.ConvertToLanguageTypeName (RemoveGenericParamSuffix (hintReturnType.GenericArguments[i].FullName)));
					result.Append (GenerateGenerics (gen, iface, hintReturnType.GenericArguments[i]));
					if (i + 1 < hintReturnType.GenericArguments.Count)
						result.Append (", ");
				}
				result.Append (">");
			}
			return result.ToString ();
		}
Пример #22
0
        public void AddLocalNamespaceImport(ProjectDom dom, string fileName, string nsName, DomLocation caretLocation)
        {
            IRefactorer refactorer = LanguageBindingService.GetRefactorerForFile(fileName);

            refactorer.AddLocalNamespaceImport(new RefactorerContext(dom, fileProvider, null), fileName, nsName, caretLocation);
        }
Пример #23
0
        public DomLocation CompleteStatement(ProjectDom dom, string fileName, DomLocation caretLocation)
        {
            IRefactorer refactorer = LanguageBindingService.GetRefactorerForFile(fileName);

            return(refactorer.CompleteStatement(new RefactorerContext(dom, fileProvider, null), fileName, caretLocation));
        }
Пример #24
0
        void Refactor(IProgressMonitor monitor, IType cls, RefactoryScope scope, RefactorDelegate refactorDelegate)
        {
            switch (scope)
            {
            case RefactoryScope.DeclaringType:
                ProjectDom ctx = GetParserContext(cls);
                if (cls is InstantiatedType)
                {
                    cls = ((InstantiatedType)cls).UninstantiatedType;
                }
                IType resolvedType = ctx.GetType(cls.FullName, cls.TypeParameters.Count, true, true);
                if (resolvedType == null)
                {
                    goto case RefactoryScope.Solution;
                }
                foreach (IType part in resolvedType.Parts)
                {
                    string            file = part.CompilationUnit.FileName;
                    RefactorerContext gctx = GetGeneratorContext(part);
                    IRefactorer       gen  = LanguageBindingService.GetRefactorerForFile(file);
                    if (gen == null)
                    {
                        return;
                    }
                    refactorDelegate(monitor, gctx, gen, file);
                    gctx.Save();
                }
                break;

            case RefactoryScope.File: {
                string            file = cls.CompilationUnit.FileName;
                RefactorerContext gctx = GetGeneratorContext(cls);
                IRefactorer       gen  = LanguageBindingService.GetRefactorerForFile(file);
                if (gen == null)
                {
                    return;
                }
                refactorDelegate(monitor, gctx, gen, file);
                gctx.Save();
                break;
            }

            case RefactoryScope.Project:
                Project prj = GetProjectForFile(cls.CompilationUnit.FileName);
                if (prj == null)
                {
                    return;
                }
                RefactorProject(monitor, prj, refactorDelegate);
                break;

            case RefactoryScope.Solution:
                if (solution == null)
                {
                    goto case RefactoryScope.File;
                }
                foreach (Project project in solution.GetAllProjects())
                {
                    RefactorProject(monitor, project, refactorDelegate);
                }
                break;
            }
        }