/* * Copyright 2003-2012 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0 * * 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 jetbrains.mps.excluded; import jetbrains.mps.util.FileUtil; import java.io.File; import java.io.IOException; import java.util.List; import static jetbrains.mps.excluded.Utils.files; import static jetbrains.mps.excluded.Utils.root; import static jetbrains.mps.excluded.Utils.withExtension; import static jetbrains.mps.util.CollectionUtil.union; public class ModuleNameFixer { private static final boolean DO_RENAMING = false; public static void main(String[] args) throws IOException { List<File> mprFiles = withExtension(".mpr", files(root())); // System.out.println("mpr files count: " + mprFiles.size()); // for (File mprFile : mprFiles) { // System.out.println(mprFile.getCanonicalPath()); // } // System.out.println(); List<File> moduleFiles = union(withExtension(".mpl", files(root())), withExtension(".msd", files(root()))); // int count = 0; for (File file : moduleFiles) { String fileName = file.getName(); fileName = fileName.substring(0, fileName.length() - 4); String fqName = moduleFqName(file); if (!fileName.equals(fqName)) { // if (!fqName.endsWith(fileName)) { // if (!fileName.equals("languageDescriptor")) { // System.out.println(file.getName() + " " + moduleFqName(file)); // count++; // } // } refactorModuleName(file, mprFiles); } } // System.out.println("Count: " + count); } private static void refactorModuleName(File moduleFile, List<File> mprFiles) throws IOException { String extension = moduleFile.getName().substring(moduleFile.getName().length() - 3); File oldFile = moduleFile.getCanonicalFile(); File newFile = new File(moduleFile.getParentFile(), moduleFqName(moduleFile) + "." + extension).getCanonicalFile(); System.out.println("Rename " + oldFile.getAbsolutePath() + " to " + newFile.getAbsolutePath()); if (DO_RENAMING) { oldFile.renameTo(newFile); } int okProjectsCount = 0; for (File project : mprFiles) { String projectDir = project.getParentFile().getCanonicalPath(); if (oldFile.getAbsolutePath().startsWith(projectDir)) { String oldFilePath = "${project}" + oldFile.getAbsolutePath().substring(projectDir.length()); String content = FileUtil.read(project); if (content.contains(oldFilePath)) { System.out.println("Rename project in " + project.getName()); okProjectsCount++; if (DO_RENAMING) { content = content.replace(oldFilePath, "${project}" + newFile.getAbsolutePath().substring(projectDir.length())); FileUtil.writeFile(project, content); } } else { if (!project.getName().equals("mpsdevkit.mpr")) { System.out.println("!warn: " + project.getName() + " doesn't contains " + oldFile.getAbsolutePath() + " module"); } } } } if (okProjectsCount == 0) { System.out.println("!warn: " + oldFile.getAbsolutePath() + " doesn't contains in any project"); } System.out.println(); } private static String getModuleFingerprint(File module) { return module.getParentFile().getName() + "/" + module.getName(); } private static String moduleFqName(File file) { String content = FileUtil.read(file); String prefix = file.getName().endsWith(".mpl") ? "<language namespace=\"" : "<solution name=\""; if (!content.contains(prefix)) { throw new IllegalArgumentException(); } content = content.substring(content.indexOf(prefix) + prefix.length()); return content.substring(0, content.indexOf("\"")); } }