package jetbrains.mps.ide.java.platform.refactorings; /*Generated by MPS */ import org.jetbrains.mps.openapi.model.SNode; import org.jetbrains.mps.openapi.module.SearchScope; import jetbrains.mps.ide.findusages.model.SearchResults; import org.jetbrains.mps.openapi.util.ProgressMonitor; import java.util.List; import jetbrains.mps.baseLanguage.util.plugin.refactorings.MethodRefactoringUtils; import jetbrains.mps.ide.findusages.model.SearchResult; import jetbrains.mps.internal.collections.runtime.ListSequence; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import jetbrains.mps.baseLanguage.util.plugin.refactorings.InlineMethodRefactoring; /*package*/ class InlineMethodRefactoringAnalyzer { private SNode myCall; private SNode myMethod; public InlineMethodRefactoringAnalyzer(SNode call, SNode method) { this.myCall = call; this.myMethod = method; } public void appendProblems(SearchScope scope, SearchResults<SNode> usages, StringBuilder errors, ProgressMonitor progressMonitor) { List<SNode> myOverriding = MethodRefactoringUtils.findOverridingMethods(scope, myMethod, progressMonitor); errors.append(getOverridingErrors(myOverriding)); if (usages != null) { for (SearchResult<SNode> res : ListSequence.fromList(usages.getSearchResults())) { appendRefactoringProblems(res.getObject(), errors); } } else { appendRefactoringProblems(myCall, errors); } } private String getOverridingErrors(List<SNode> overridingMethods) { StringBuffer errors = new StringBuffer(); if (overridingMethods != null && ListSequence.fromList(overridingMethods).isNotEmpty()) { errors.append("Inlined method overriden by this methods: "); for (SNode methodDeclaration : ListSequence.fromList(overridingMethods)) { errors.append(" ").append(SNodeOperations.getParent(methodDeclaration)).append(".").append(methodDeclaration); } errors.append(".\n"); } return errors.toString(); } private static void appendRefactoringProblems(SNode node, StringBuilder errors) { InlineMethodRefactoring ref = new InlineMethodRefactoring(node); errors.append(ref.getProblems()); } }