package net.jangaroo.ide.idea.debugger; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.Url; import com.intellij.util.Urls; import com.jetbrains.javascript.debugger.FileUrlMapper; import net.jangaroo.ide.idea.Utils; import net.jangaroo.jooc.api.Jooc; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Collections; import java.util.List; /** * Map Source Map URLs to local source files in some module. */ public class JangarooFileUrlMapper extends FileUrlMapper { public static final String AS3_SOURCE_URL_PATH_PREFIX = "/amd/as3/"; @NotNull @Override public List<Url> getUrls(@NotNull VirtualFile sourceFile, @NotNull Project project, String authority) { final String relativePath = Utils.getModuleRelativeSourcePath(project, sourceFile, '/'); if (relativePath.length() != 0) { return Collections.singletonList(Urls.newUrl("http", authority, AS3_SOURCE_URL_PATH_PREFIX + relativePath)); } return Collections.emptyList(); } @Nullable @Override public VirtualFile getFile(@NotNull Url sourceUrl, @NotNull Project project, Url pageUrl) { String path = sourceUrl.getPath(); if (path.endsWith(Jooc.AS_SUFFIX) && path.startsWith(AS3_SOURCE_URL_PATH_PREFIX)) { String fullyQualifiedName = path.substring(AS3_SOURCE_URL_PATH_PREFIX.length(), path.length() - Jooc.AS_SUFFIX.length()) .replace('/', '.'); return Utils.getActionScriptFile(project, fullyQualifiedName); } return null; } }