215 Method addReadsMethod = moduleClass.getMethod("addReads", moduleClass); 216 addReadsMethod.invoke(thisModule, targetModule); 217 } catch (NoSuchMethodException e) { 218 // ignore 219 } catch (Exception e) { 220 throw new Abort(e); 221 } 222 return targetLoader; 223 } 224 225 public boolean isDefaultBootClassPath() { 226 return locations.isDefaultBootClassPath(); 227 } 228 229 // <editor-fold defaultstate="collapsed" desc="Option handling"> 230 @Override @DefinedBy(Api.COMPILER) 231 public boolean handleOption(String current, Iterator<String> remaining) { 232 OptionHelper helper = new GrumpyHelper(log) { 233 @Override 234 public String get(Option option) { 235 return options.get(option.getText()); 236 } 237 238 @Override 239 public void put(String name, String value) { 240 options.put(name, value); 241 } 242 243 @Override 244 public void remove(String name) { 245 options.remove(name); 246 } 247 248 @Override 249 public boolean handleFileManagerOption(Option option, String value) { 250 return handleOption(option, value); 251 } 252 }; 253 254 for (Option o: javacFileManagerOptions) { 255 if (o.matches(current)) { 256 if (o.hasArg()) { 257 if (remaining.hasNext()) { 258 if (!o.process(helper, current, remaining.next())) 259 return true; 260 } 261 } else { 262 if (!o.process(helper, current)) 263 return true; 264 } 265 // operand missing, or process returned true 266 throw new IllegalArgumentException(current); 267 } 268 } 269 270 return false; 271 } 272 // where 273 private static final Set<Option> javacFileManagerOptions = 274 Option.getJavacFileManagerOptions(); 275 276 @Override @DefinedBy(Api.COMPILER) 277 public int isSupportedOption(String option) { 278 for (Option o : javacFileManagerOptions) { 279 if (o.matches(option)) 280 return o.hasArg() ? 1 : 0; 281 } 282 return -1; 283 } 284 285 protected String multiReleaseValue; 286 287 /** 288 * Common back end for OptionHelper handleFileManagerOption. 289 * @param option the option whose value to be set 290 * @param value the value for the option 291 * @return true if successful, and false otherwise 292 */ 293 public boolean handleOption(Option option, String value) { 294 switch (option) { 295 case ENCODING: 296 encodingName = value; 297 return true; 298 299 case MULTIRELEASE: 300 multiReleaseValue = value; 301 return true; 302 303 default: 304 return locations.handleOption(option, value); 305 } 306 } 307 308 /** 309 * Call handleOption for collection of options and corresponding values. 310 * @param map a collection of options and corresponding values 311 * @return true if all the calls are successful 312 */ 313 public boolean handleOptions(Map<Option, String> map) { 314 boolean ok = true; 315 for (Map.Entry<Option, String> e: map.entrySet()) { 316 try { 317 ok = ok & handleOption(e.getKey(), e.getValue()); 318 } catch (IllegalArgumentException ex) { 319 log.error(Errors.IllegalArgumentForOption(e.getKey().getText(), ex.getMessage())); 320 ok = false; 321 } 322 } 323 return ok; 324 } 325 326 // </editor-fold> 327 328 // <editor-fold defaultstate="collapsed" desc="Encoding"> 329 private String encodingName; 330 private String defaultEncodingName; 331 private String getDefaultEncodingName() { 332 if (defaultEncodingName == null) { 333 defaultEncodingName = Charset.defaultCharset().name(); 334 } 335 return defaultEncodingName; 336 } 337 338 public String getEncodingName() { 339 return (encodingName != null) ? encodingName : getDefaultEncodingName(); | 215 Method addReadsMethod = moduleClass.getMethod("addReads", moduleClass); 216 addReadsMethod.invoke(thisModule, targetModule); 217 } catch (NoSuchMethodException e) { 218 // ignore 219 } catch (Exception e) { 220 throw new Abort(e); 221 } 222 return targetLoader; 223 } 224 225 public boolean isDefaultBootClassPath() { 226 return locations.isDefaultBootClassPath(); 227 } 228 229 // <editor-fold defaultstate="collapsed" desc="Option handling"> 230 @Override @DefinedBy(Api.COMPILER) 231 public boolean handleOption(String current, Iterator<String> remaining) { 232 OptionHelper helper = new GrumpyHelper(log) { 233 @Override 234 public String get(Option option) { 235 return options.get(option); 236 } 237 238 @Override 239 public void put(String name, String value) { 240 options.put(name, value); 241 } 242 243 @Override 244 public void remove(String name) { 245 options.remove(name); 246 } 247 248 @Override 249 public boolean handleFileManagerOption(Option option, String value) { 250 return handleOption(option, value); 251 } 252 }; 253 254 Option o = Option.lookup(current, javacFileManagerOptions); 255 if (o == null) { 256 return false; 257 } 258 259 if (!o.handleOption(helper, current, remaining)) 260 throw new IllegalArgumentException(current); 261 262 return true; 263 } 264 // where 265 private static final Set<Option> javacFileManagerOptions = 266 Option.getJavacFileManagerOptions(); 267 268 @Override @DefinedBy(Api.COMPILER) 269 public int isSupportedOption(String option) { 270 Option o = Option.lookup(option, javacFileManagerOptions); 271 return (o == null) ? -1 : o.hasArg() ? 1 : 0; 272 } 273 274 protected String multiReleaseValue; 275 276 /** 277 * Common back end for OptionHelper handleFileManagerOption. 278 * @param option the option whose value to be set 279 * @param value the value for the option 280 * @return true if successful, and false otherwise 281 */ 282 public boolean handleOption(Option option, String value) { 283 switch (option) { 284 case ENCODING: 285 encodingName = value; 286 return true; 287 288 case MULTIRELEASE: 289 multiReleaseValue = value; 290 return true; 291 292 default: 293 return locations.handleOption(option, value); 294 } 295 } 296 297 /** 298 * Call handleOption for collection of options and corresponding values. 299 * @param map a collection of options and corresponding values 300 * @return true if all the calls are successful 301 */ 302 public boolean handleOptions(Map<Option, String> map) { 303 boolean ok = true; 304 for (Map.Entry<Option, String> e: map.entrySet()) { 305 try { 306 ok = ok & handleOption(e.getKey(), e.getValue()); 307 } catch (IllegalArgumentException ex) { 308 log.error(Errors.IllegalArgumentForOption(e.getKey().getPrimaryName(), ex.getMessage())); 309 ok = false; 310 } 311 } 312 return ok; 313 } 314 315 // </editor-fold> 316 317 // <editor-fold defaultstate="collapsed" desc="Encoding"> 318 private String encodingName; 319 private String defaultEncodingName; 320 private String getDefaultEncodingName() { 321 if (defaultEncodingName == null) { 322 defaultEncodingName = Charset.defaultCharset().name(); 323 } 324 return defaultEncodingName; 325 } 326 327 public String getEncodingName() { 328 return (encodingName != null) ? encodingName : getDefaultEncodingName(); |