/* * Copyright (c) 2013, the Dart project authors. * * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.eclipse.org/legal/epl-v10.html * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. */ package com.google.dart.engine.services.internal.refactoring; import com.google.dart.engine.context.AnalysisContext; import com.google.dart.engine.element.LibraryElement; import com.google.dart.engine.search.SearchEngine; import com.google.dart.engine.search.SearchMatch; import com.google.dart.engine.services.change.Change; import com.google.dart.engine.services.change.CompositeChange; import com.google.dart.engine.services.change.SourceChange; import com.google.dart.engine.services.change.SourceChangeManager; import com.google.dart.engine.services.refactoring.NamingConventions; import com.google.dart.engine.services.refactoring.ProgressMonitor; import com.google.dart.engine.services.refactoring.Refactoring; import com.google.dart.engine.services.status.RefactoringStatus; import com.google.dart.engine.source.Source; import java.util.List; /** * {@link Refactoring} for renaming {@link LibraryElement}. */ public class RenameLibraryRefactoringImpl extends RenameRefactoringImpl { private final LibraryElement element; public RenameLibraryRefactoringImpl(SearchEngine searchEngine, LibraryElement element) { super(searchEngine, element); this.element = element; } @Override public RefactoringStatus checkFinalConditions(ProgressMonitor pm) throws Exception { pm = checkProgressMonitor(pm); pm.beginTask("Checking final conditions", 1); try { return new RefactoringStatus(); } finally { pm.done(); } } @Override public RefactoringStatus checkNewName(String newName) { RefactoringStatus result = new RefactoringStatus(); result.merge(super.checkNewName(newName)); result.merge(NamingConventions.validateLibraryName(newName)); return result; } @Override public Change createChange(ProgressMonitor pm) throws Exception { pm = checkProgressMonitor(pm); try { SourceChangeManager changeManager = new SourceChangeManager(); // update declaration { Source elementSource = element.getSource(); SourceChange elementChange = changeManager.get(elementSource); addDeclarationEdit(elementChange, element); } // update references List<SearchMatch> matches = searchEngine.searchReferences(element, null, null); List<SourceReference> references = getSourceReferences(matches); for (SourceReference reference : references) { SourceChange refChange = changeManager.get(reference.source); addReferenceEdit(refChange, reference); } // return CompositeChange CompositeChange compositeChange = new CompositeChange(getRefactoringName()); compositeChange.add(changeManager.getChanges()); return compositeChange; } finally { pm.done(); } } @Override public String getRefactoringName() { return "Rename Library"; } @Override public boolean shouldReportUnsafeRefactoringSource(AnalysisContext context, Source source) { return true; } }