public override void Refactor(QualifiedSelection target) { var targetInterface = _declarationFinderProvider.DeclarationFinder.FindInterface(target); if (targetInterface == null) { throw new NoImplementsStatementSelectedException(target); } var targetModule = _declarationFinderProvider.DeclarationFinder .ModuleDeclaration(target.QualifiedName); if (!ImplementingModuleTypes.Contains(targetModule.DeclarationType)) { throw new InvalidDeclarationTypeException(targetModule); } var targetClass = targetModule as ClassModuleDeclaration; if (targetClass == null) { //This really should never happen. If it happens the declaration type enum value //and the type of the declaration are inconsistent. throw new InvalidTargetDeclarationException(targetModule); } var rewriteSession = RewritingManager.CheckOutCodePaneSession(); var rewriter = rewriteSession.CheckOutModuleRewriter(targetClass.QualifiedModuleName); ImplementMissingMembers(targetInterface, targetClass, rewriter); if (!rewriteSession.TryRewrite()) { throw new RewriteFailedException(rewriteSession); } }
private void AddInterface(ExtractInterfaceModel model) { var targetProject = model.TargetDeclaration.Project; if (targetProject == null) { return; //The target project is not available. } AddInterfaceClass(model.TargetDeclaration, model.InterfaceName, GetInterfaceModuleBody(model)); var rewriteSession = RewritingManager.CheckOutCodePaneSession(); var rewriter = rewriteSession.CheckOutModuleRewriter(model.TargetDeclaration.QualifiedModuleName); var firstNonFieldMember = _declarationFinderProvider.DeclarationFinder.Members(model.TargetDeclaration) .OrderBy(o => o.Selection) .First(m => ExtractInterfaceModel.MemberTypes.Contains(m.DeclarationType)); rewriter.InsertBefore(firstNonFieldMember.Context.Start.TokenIndex, $"Implements {model.InterfaceName}{Environment.NewLine}{Environment.NewLine}"); AddInterfaceMembersToClass(model, rewriter); if (!rewriteSession.TryRewrite()) { throw new RewriteFailedException(rewriteSession); } }
protected override void RefactorImpl(EncapsulateFieldModel model) { var rewriteSession = RewritingManager.CheckOutCodePaneSession(); AddProperty(model, rewriteSession); if (!rewriteSession.TryRewrite()) { throw new RewriteFailedException(rewriteSession); } }
private void RenameRefactor(RenameModel model) { var rewriteSession = RewritingManager.CheckOutCodePaneSession(); Rename(model, rewriteSession); if (!rewriteSession.TryRewrite()) { throw new RewriteFailedException(rewriteSession); } }
private void MoveCloserToUsage(Declaration target) { var rewriteSession = RewritingManager.CheckOutCodePaneSession(); InsertNewDeclaration(target, rewriteSession); RemoveOldDeclaration(target, rewriteSession); UpdateQualifiedCalls(target, rewriteSession); if (!rewriteSession.TryRewrite()) { throw new RewriteFailedException(rewriteSession); } }
private void PromoteVariable(Declaration target) { var rewriteSession = RewritingManager.CheckOutCodePaneSession(); var rewriter = rewriteSession.CheckOutModuleRewriter(target.QualifiedModuleName); rewriter.Remove(target); AddField(rewriter, target); if (!rewriteSession.TryRewrite()) { throw new RewriteFailedException(rewriteSession); } }
private void RemoveParameters(RemoveParametersModel model) { if (model.TargetDeclaration == null) { throw new TargetDeclarationIsNullException(); } var rewriteSession = RewritingManager.CheckOutCodePaneSession(); RemoveParameters(model, rewriteSession); if (!rewriteSession.TryRewrite()) { throw new RewriteFailedException(rewriteSession); } }
protected override void RefactorImpl(ReorderParametersModel model) { if (!model.Parameters.Where((param, index) => param.Index != index).Any()) { //This is not an error: the user chose to leave everything as-is. return; } var rewriteSession = RewritingManager.CheckOutCodePaneSession(); RefactorImpl(model, rewriteSession); if (!rewriteSession.TryRewrite()) { throw new RewriteFailedException(rewriteSession); } }
private void PromoteVariable(Declaration target) { if (!PromptIfMethodImplementsInterface(target)) { return; } var rewriteSession = RewritingManager.CheckOutCodePaneSession(); var rewriter = rewriteSession.CheckOutModuleRewriter(target.QualifiedModuleName); UpdateSignature(target, rewriteSession); rewriter.Remove(target); if (!rewriteSession.TryRewrite()) { throw new RewriteFailedException(rewriteSession); } }
public static (SynchronousParseCoordinator parser, IRewritingManager rewritingManager) CreateWithRewriteManager(IVBE vbe, RubberduckParserState state, IProjectsRepository projectRepository, string serializedComProjectsPath = null) { var vbeVersion = double.Parse(vbe.Version, CultureInfo.InvariantCulture); var compilationArgumentsProvider = MockCompilationArgumentsProvider(vbeVersion); var compilationsArgumentsCache = new CompilationArgumentsCache(compilationArgumentsProvider); var path = serializedComProjectsPath ?? Path.Combine(Path.GetDirectoryName(Assembly.GetAssembly(typeof(MockParser)).Location), "Testfiles", "Resolver"); var preprocessorErrorListenerFactory = new PreprocessingParseErrorListenerFactory(); var preprocessorParser = new VBAPreprocessorParser(preprocessorErrorListenerFactory, preprocessorErrorListenerFactory); var preprocessor = new VBAPreprocessor(preprocessorParser, compilationsArgumentsCache); var mainParseErrorListenerFactory = new MainParseErrorListenerFactory(); var mainTokenStreamParser = new VBATokenStreamParser(mainParseErrorListenerFactory, mainParseErrorListenerFactory); var tokenStreamProvider = new SimpleVBAModuleTokenStreamProvider(); var stringParser = new TokenStreamParserStringParserAdapterWithPreprocessing(tokenStreamProvider, mainTokenStreamParser, preprocessor); var projectManager = new RepositoryProjectManager(projectRepository); var moduleToModuleReferenceManager = new ModuleToModuleReferenceManager(); var supertypeClearer = new SynchronousSupertypeClearer(state); var parserStateManager = new SynchronousParserStateManager(state); var referenceRemover = new SynchronousReferenceRemover(state, moduleToModuleReferenceManager); var baseComDeserializer = new XmlComProjectSerializer(path); var comDeserializer = new StaticCachingComDeserializerDecorator(baseComDeserializer); var referencedDeclarationsCollector = new SerializedReferencedDeclarationsCollector(comDeserializer); var comSynchronizer = new SynchronousCOMReferenceSynchronizer( state, parserStateManager, projectRepository, referencedDeclarationsCollector); var builtInDeclarationLoader = new BuiltInDeclarationLoader( state, new List <ICustomDeclarationLoader> { new DebugDeclarations(state), new SpecialFormDeclarations(state), new FormEventDeclarations(state), new AliasDeclarations(state), }); var codePaneSourceCodeHandler = new CodePaneSourceCodeHandler(projectRepository); //We use the same handler because to achieve consistency between the return values. var attributesSourceCodeHandler = codePaneSourceCodeHandler; var moduleParser = new ModuleParser( codePaneSourceCodeHandler, attributesSourceCodeHandler, stringParser); var parseRunner = new SynchronousParseRunner( state, parserStateManager, moduleParser); var declarationResolveRunner = new SynchronousDeclarationResolveRunner( state, parserStateManager, comSynchronizer); var referenceResolveRunner = new SynchronousReferenceResolveRunner( state, parserStateManager, moduleToModuleReferenceManager, referenceRemover); var parsingStageService = new ParsingStageService( comSynchronizer, builtInDeclarationLoader, parseRunner, declarationResolveRunner, referenceResolveRunner ); var parsingCacheService = new ParsingCacheService( state, moduleToModuleReferenceManager, referenceRemover, supertypeClearer, compilationsArgumentsCache ); var tokenStreamCache = new StateTokenStreamCache(state); var moduleRewriterFactory = new ModuleRewriterFactory( codePaneSourceCodeHandler, attributesSourceCodeHandler); var rewriterProvider = new RewriterProvider(tokenStreamCache, moduleRewriterFactory); var rewriteSessionFactory = new RewriteSessionFactory(state, rewriterProvider); var rewritingManager = new RewritingManager(rewriteSessionFactory); var parser = new SynchronousParseCoordinator( state, parsingStageService, parsingCacheService, projectManager, parserStateManager, rewritingManager); return(parser, rewritingManager); }
public static (SynchronousParseCoordinator parser, IRewritingManager rewritingManager) CreateWithRewriteManager(IVBE vbe, RubberduckParserState state, IProjectsRepository projectRepository, string serializedComProjectsPath = null, IDictionary <string, IEnumerable <string> > documentModuleSupertypeNames = null) { var vbeVersion = double.Parse(vbe.Version, CultureInfo.InvariantCulture); var compilationArgumentsProvider = MockCompilationArgumentsProvider(vbeVersion); var compilationsArgumentsCache = new CompilationArgumentsCache(compilationArgumentsProvider); var userComProjectsRepository = MockUserComProjectRepository(); var documentSuperTypesProvider = MockDocumentSuperTypeNamesProvider(documentModuleSupertypeNames); var ignoredProjectsSettingsProvider = MockIgnoredProjectsSettingsProviderMock(); var projectsToBeLoadedFromComSelector = new ProjectsToResolveFromComProjectsSelector(projectRepository, ignoredProjectsSettingsProvider); var path = serializedComProjectsPath ?? Path.Combine(Path.GetDirectoryName(Assembly.GetAssembly(typeof(MockParser)).Location), "Testfiles", "Resolver"); var preprocessorErrorListenerFactory = new PreprocessingParseErrorListenerFactory(); var preprocessorParser = new VBAPreprocessorParser(preprocessorErrorListenerFactory, preprocessorErrorListenerFactory); var preprocessor = new VBAPreprocessor(preprocessorParser, compilationsArgumentsCache); var mainParseErrorListenerFactory = new MainParseErrorListenerFactory(); var mainTokenStreamParser = new VBATokenStreamParser(mainParseErrorListenerFactory, mainParseErrorListenerFactory); var tokenStreamProvider = new SimpleVBAModuleTokenStreamProvider(); var stringParser = new TokenStreamParserStringParserAdapterWithPreprocessing(tokenStreamProvider, mainTokenStreamParser, preprocessor); var vbaParserAnnotationFactory = new VBAParserAnnotationFactory(WellKnownAnnotations()); var projectManager = new RepositoryProjectManager(projectRepository); var moduleToModuleReferenceManager = new ModuleToModuleReferenceManager(); var supertypeClearer = new SynchronousSupertypeClearer(state); var parserStateManager = new SynchronousParserStateManager(state); var referenceRemover = new SynchronousReferenceRemover(state, moduleToModuleReferenceManager); var baseComDeserializer = new XmlComProjectSerializer(new MockFileSystem(), path); var comDeserializer = new StaticCachingComDeserializerDecorator(baseComDeserializer); var declarationsFromComProjectLoader = new DeclarationsFromComProjectLoader(); var referencedDeclarationsCollector = new SerializedReferencedDeclarationsCollector(declarationsFromComProjectLoader, comDeserializer); var userComProjectSynchronizer = new UserComProjectSynchronizer(state, declarationsFromComProjectLoader, userComProjectsRepository, projectsToBeLoadedFromComSelector); var comSynchronizer = new SynchronousCOMReferenceSynchronizer( state, parserStateManager, projectRepository, referencedDeclarationsCollector); var builtInDeclarationLoader = new BuiltInDeclarationLoader( state, new List <ICustomDeclarationLoader> { new DebugDeclarations(state), new SpecialFormDeclarations(state), new FormEventDeclarations(state), new AliasDeclarations(state), }); var codePaneComponentSourceCodeHandler = new CodeModuleComponentSourceCodeHandler(); var codePaneSourceCodeHandler = new ComponentSourceCodeHandlerSourceCodeHandlerAdapter(codePaneComponentSourceCodeHandler, projectRepository); //We use the same handler because to achieve consistency between the return values. var attributesSourceCodeHandler = codePaneSourceCodeHandler; var moduleParser = new ModuleParser( codePaneSourceCodeHandler, attributesSourceCodeHandler, stringParser, vbaParserAnnotationFactory); var parseRunner = new SynchronousParseRunner( state, parserStateManager, moduleParser); var declarationResolveRunner = new SynchronousDeclarationResolveRunner( state, parserStateManager, comSynchronizer); var referenceResolveRunner = new SynchronousReferenceResolveRunner( state, parserStateManager, moduleToModuleReferenceManager, referenceRemover, documentSuperTypesProvider); var parsingStageService = new ParsingStageService( comSynchronizer, builtInDeclarationLoader, parseRunner, declarationResolveRunner, referenceResolveRunner, userComProjectSynchronizer ); var parsingCacheService = new ParsingCacheService( state, moduleToModuleReferenceManager, referenceRemover, supertypeClearer, compilationsArgumentsCache, userComProjectsRepository, projectsToBeLoadedFromComSelector ); var tokenStreamCache = new StateTokenStreamCache(state); var moduleRewriterFactory = new ModuleRewriterFactory( codePaneSourceCodeHandler, attributesSourceCodeHandler); var rewriterProvider = new RewriterProvider(tokenStreamCache, moduleRewriterFactory); var selectionService = new SelectionService(vbe, projectRepository); var selectionRecoverer = new SelectionRecoverer(selectionService, state); var rewriteSessionFactory = new RewriteSessionFactory(state, rewriterProvider, selectionRecoverer); var stubMembersAttributeRecoverer = new Mock <IMemberAttributeRecovererWithSettableRewritingManager>().Object; var rewritingManager = new RewritingManager(rewriteSessionFactory, stubMembersAttributeRecoverer); var parser = new SynchronousParseCoordinator( state, parsingStageService, parsingCacheService, projectManager, parserStateManager, rewritingManager); return(parser, rewritingManager); }