package org.elixir_lang.mix.importWizard; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.module.Module; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.containers.ContainerUtil; import org.elixir_lang.mix.util.ElixirScriptFileUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Created by zyuyou on 15/7/2. */ public class ImportedOtpApp { private final String myName; private final VirtualFile myRoot; private final Set<String> myDeps = ContainerUtil.newHashSet(); private VirtualFile myIdeaModuleFile; private Module myModule; public ImportedOtpApp(@NotNull VirtualFile root, @NotNull final VirtualFile appMixFile){ // todo: should use psi-pattern to get myName. String appName = ""; try{ String firstLine = ElixirScriptFileUtil.readLine(appMixFile.getInputStream()); Pattern pattern = Pattern.compile("defmodule ([A-Z]{1}\\w*).Mixfile do"); Matcher matcher = pattern.matcher(firstLine); appName = matcher.matches() ? matcher.group(1).toLowerCase() : ""; }catch (Exception ignored){ } myName = appName; myRoot = root; ApplicationManager.getApplication().runReadAction(new Runnable() { @Override public void run() { addInfoFromAppMixFile(appMixFile); } }); } @NotNull public String getName(){ return myName; } @NotNull public VirtualFile getRoot(){ return myRoot; } @NotNull public Set<String> getDeps(){ return myDeps; } public void setIdeaModuleFile(@Nullable VirtualFile ideaModuleFile){ myIdeaModuleFile = ideaModuleFile; } @Nullable public VirtualFile getIdeaModuleFile(){ return myIdeaModuleFile; } public Module getModule(){ return myModule; } public void setModule(Module module){ myModule = module; } @Override public String toString() { return myName + " (" + myRoot + ")" ; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null || getClass() != obj.getClass()) return false; ImportedOtpApp that = (ImportedOtpApp) obj; return myName.equals(that.myName) && myRoot.equals(that.myRoot); } @Override public int hashCode() { int result = myName.hashCode(); result = 31 * result + myRoot.hashCode(); return result; } private void addInfoFromAppMixFile(@NotNull VirtualFile appMixFile){ // todo: get deps } }