org.dmd.util.codegen.ImportManager Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of dark-matter-data Show documentation
Show all versions of dark-matter-data Show documentation
The dark-matter project provides mechanism to define concepts associated with Domain Specific Languages (DSLs) and generate code that can be extended with business logic that supports the given DSL purpose.
package org.dmd.util.codegen;
import java.util.TreeMap;
import org.dmd.util.exceptions.DebugInfo;
import org.dmd.util.formatting.PrintfFormat;
public class ImportManager {
TreeMap imports;
int longestImport;
static TreeMap staticImports;
static int staticLongestImport;
static {
staticImports = new TreeMap();
}
static public void resetStatic(){
staticImports = new TreeMap();
staticLongestImport = 0;
}
static public void addImportStatic(String cn, String reason){
staticImports.put(cn, new ImportStatement(cn, reason));
if (cn.length() > staticLongestImport)
staticLongestImport = cn.length();
}
static public String getFormattedImportsStatic(){
StringBuffer sb = new StringBuffer();
int padding = staticLongestImport+17;
PrintfFormat format = new PrintfFormat("%-" + padding + "s");
sb.append("// Generated from: " + DebugInfo.getWhereWeAreNow() + "\n");
sb.append("// " + DebugInfo.getWhereWeWereCalledFrom() + "\n");
for(ImportStatement i: staticImports.values()){
sb.append(format.sprintf("import " + i.className + ";") + "// " + i.reason + "\n");
}
return(sb.toString());
}
public ImportManager(){
imports = new TreeMap();
longestImport = 0;
}
public void reset(){
imports = new TreeMap();
longestImport = 0;
}
public void addImportsFrom(ImportManager im){
for(ImportStatement is: im.imports.values()){
if (is.className.length() > longestImport)
longestImport = is.className.length();
imports.put(is.className, is);
}
}
public void addImport(String cn, String reason){
// We take the first import we get
if (imports.get(cn) != null){
// DebugInfo.debug("Warning: duplicate import - " + cn + " - " + reason);
return;
}
imports.put(cn, new ImportStatement(cn, reason + " - " + DebugInfo.getShortWhereWeWereCalledFrom()));
if (cn.length() > longestImport)
longestImport = cn.length();
}
public String getFormattedImports(){
StringBuffer sb = new StringBuffer();
int padding = longestImport+17;
PrintfFormat format = new PrintfFormat("%-" + padding + "s");
sb.append("// Generated from: " + DebugInfo.getWhereWeAreNow() + "\n");
sb.append("// " + DebugInfo.getWhereWeWereCalledFrom() + "\n");
for(ImportStatement i: imports.values()){
sb.append(format.sprintf("import " + i.className + ";") + "// " + i.reason + "\n");
}
sb.append("\n");
return(sb.toString());
}
}