1 19 20 package org.netbeans.lexer.gen; 21 22 import java.io.File ; 23 import java.io.FileWriter ; 24 import java.io.IOException ; 25 26 import org.apache.tools.ant.BuildException; 27 import org.apache.tools.ant.Task; 28 import org.xml.sax.SAXException ; 29 30 35 public abstract class GenerateLanguageSource extends Task { 36 37 private String languageClassName; 38 39 private String lexerClassName; 40 41 private String tokenTypesClassName; 42 43 private File languageDescriptionFile; 44 45 private File languageSourceFile; 46 47 private boolean ignoreTokenTypes; 48 49 private boolean ignoreLanguageDescriptionFile; 50 51 public GenerateLanguageSource() { 52 } 53 54 public String getLanguageClassName() { 55 return languageClassName; 56 } 57 58 public void setLanguageClassName(String languageClassName) { 59 this.languageClassName = languageClassName; 60 } 61 62 public String getLexerClassName() { 63 return lexerClassName; 64 } 65 66 public void setLexerClassName(String lexerClassName) { 67 this.lexerClassName = lexerClassName; 68 } 69 70 public String getTokenTypesClassName() { 71 return tokenTypesClassName; 72 } 73 74 public void setTokenTypesClassName(String tokenTypesClassName) { 75 this.tokenTypesClassName = tokenTypesClassName; 76 } 77 78 public File getLanguageDescriptionFile() { 79 return languageDescriptionFile; 80 } 81 82 public void setLanguageDescriptionFile(File languageDescriptionFile) { 83 this.languageDescriptionFile = languageDescriptionFile; 84 } 85 86 public File getLanguageSourceFile() { 87 return languageSourceFile; 88 } 89 90 public void setLanguageSourceFile(File languageSourceFile) { 91 this.languageSourceFile = languageSourceFile; 92 } 93 94 public boolean getIgnoreTokenTypes() { 95 return ignoreTokenTypes; 96 } 97 98 public void setIgnoreTokenTypes(boolean ignoreTokenTypes) { 99 this.ignoreTokenTypes = ignoreTokenTypes; 100 } 101 102 public boolean getIgnoreLanguageDescriptionFile() { 103 return ignoreLanguageDescriptionFile; 104 } 105 106 public void setIgnoreLanguageDescriptionFile(boolean ignoreLanguageDescriptionFile) { 107 this.ignoreLanguageDescriptionFile = ignoreLanguageDescriptionFile; 108 } 109 110 public void execute() throws BuildException { 111 String langClassName = getLanguageClassName(); 112 String lexerClassName = getLexerClassName(); 113 String tokenTypesClassName = getTokenTypesClassName(); 114 File langDescFile = getLanguageDescriptionFile(); 115 File langSrcFile = getLanguageSourceFile(); 116 117 if (getIgnoreTokenTypes()) { 118 tokenTypesClassName = null; 119 } 120 if (getIgnoreLanguageDescriptionFile()) { 121 langDescFile = null; 122 } 123 124 if (langClassName == null || "".equals(langClassName)) { 125 throw new BuildException("languageClassName attribute must be set"); 126 } 127 if (lexerClassName == null || "".equals(lexerClassName)) { 128 throw new BuildException("lexerClassName attribute must be set"); 129 } 130 if (langSrcFile == null) { 131 throw new BuildException("languageSourceFile attribute must be set"); 132 } 133 134 if (langDescFile != null && !langDescFile.exists()) { 136 langDescFile = null; 137 } 138 139 String output; 140 try { 141 output = generate(langClassName, lexerClassName, 142 tokenTypesClassName, langDescFile); 143 } catch (SAXException e) { 144 e.printStackTrace(); 145 if (e.getException() != null) { 146 System.err.println("Nested exception:"); 147 e.getException().printStackTrace(); 148 } 149 throw new BuildException(e); 150 } catch (IOException e) { 151 throw new BuildException(e); 152 } catch (ClassNotFoundException e) { 153 throw new BuildException(e); 154 } 155 156 try { 157 FileWriter langSrcWriter = new FileWriter (langSrcFile); 158 langSrcWriter.write(output); 159 langSrcWriter.close(); 160 } catch (IOException e) { 161 throw new BuildException("IOException occurred", e); 162 } 163 164 String msg = "Generated language source " + langSrcFile 165 + " based on information from "; 166 if (tokenTypesClassName != null) { 167 msg += "class " + tokenTypesClassName; 168 } 169 if (langDescFile != null) { 170 if (tokenTypesClassName != null) { 171 msg += " and "; 172 } 173 msg += "description in " + langDescFile; 174 } 175 176 log(msg); 177 } 178 179 protected abstract String generate(String langClassName, String lexerClassName, 180 String tokenTypesClassName, File langDescFile) 181 throws ClassNotFoundException , SAXException , IOException ; 182 183 } 184 | Popular Tags |