package org.simantics.scl.compiler.module; public class ModuleUtils { public static String resolveAbsolutePath(String moduleName, String relativeModuleName) throws InvalidModulePathException { if (relativeModuleName.startsWith(".")) { String originalRelativeModuleName = relativeModuleName; int p = moduleName.lastIndexOf('/'); String parentPackage = p < 0 ? "" : moduleName.substring(0, p); while(relativeModuleName.startsWith(".")) { if(relativeModuleName.startsWith("./")) { relativeModuleName = relativeModuleName.substring(2); } else if(relativeModuleName.startsWith("../")) { relativeModuleName = relativeModuleName.substring(3); if(parentPackage.isEmpty()) { throw new InvalidModulePathException("Couldn't resolve the relative module name " + originalRelativeModuleName + " when the current module name is " + moduleName + "."); } p = parentPackage.lastIndexOf('/'); parentPackage = p < 0 ? "" : parentPackage.substring(0, p); } else { throw new InvalidModulePathException("Couldn't resolve the relative module name " + originalRelativeModuleName + ". It has an invalid syntax."); } } return parentPackage + "/" + relativeModuleName; } else { return relativeModuleName; } } }