You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Options.java 7.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. /*******************************************************************************
  2. * Copyright (c) 2005 Contributors.
  3. * All rights reserved.
  4. * This program and the accompanying materials are made available
  5. * under the terms of the Eclipse Public License v1.0
  6. * which accompanies this distribution and is available at
  7. * http://eclipse.org/legal/epl-v10.html
  8. *
  9. * Contributors:
  10. * Alexandre Vasseur initial implementation
  11. *******************************************************************************/
  12. package org.aspectj.weaver.loadtime;
  13. import java.util.Collections;
  14. import java.util.Iterator;
  15. import java.util.List;
  16. import org.aspectj.bridge.IMessage;
  17. import org.aspectj.bridge.IMessageHandler;
  18. import org.aspectj.bridge.Message;
  19. import org.aspectj.util.LangUtil;
  20. /**
  21. * A class that hanldes LTW options. Note: AV - I choosed to not reuse AjCompilerOptions and alike since those implies too many
  22. * dependancies on jdt and ajdt modules.
  23. *
  24. * @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a>
  25. */
  26. public class Options {
  27. private final static String OPTION_15 = "-1.5";
  28. private final static String OPTION_lazyTjp = "-XlazyTjp";
  29. private final static String OPTION_noWarn = "-nowarn";
  30. private final static String OPTION_noWarnNone = "-warn:none";
  31. private final static String OPTION_proceedOnError = "-proceedOnError";
  32. private final static String OPTION_verbose = "-verbose";
  33. private final static String OPTION_debug = "-debug";
  34. private final static String OPTION_reweavable = "-Xreweavable";// notReweavable is default for LTW
  35. private final static String OPTION_noinline = "-Xnoinline";
  36. private final static String OPTION_addSerialVersionUID = "-XaddSerialVersionUID";
  37. private final static String OPTION_hasMember = "-XhasMember";
  38. private final static String OPTION_pinpoint = "-Xdev:pinpoint";
  39. private final static String OPTION_showWeaveInfo = "-showWeaveInfo";
  40. private final static String OPTIONVALUED_messageHandler = "-XmessageHandlerClass:";
  41. private static final String OPTIONVALUED_Xlintfile = "-Xlintfile:";
  42. private static final String OPTIONVALUED_Xlint = "-Xlint:";
  43. private static final String OPTIONVALUED_joinpoints = "-Xjoinpoints:";
  44. private static final String OPTIONVALUED_Xset = "-Xset:";
  45. private static final String OPTION_timers = "-timers";
  46. private static final String OPTIONVALUED_loadersToSkip = "-loadersToSkip:";
  47. public static WeaverOption parse(String options, ClassLoader laoder, IMessageHandler imh) {
  48. WeaverOption weaverOption = new WeaverOption(imh);
  49. if (LangUtil.isEmpty(options)) {
  50. return weaverOption;
  51. }
  52. // the first option wins
  53. List<String> flags = LangUtil.anySplit(options, " ");
  54. Collections.reverse(flags);
  55. // do a first round on the message handler since it will report the options themselves
  56. for (Iterator<String> iterator = flags.iterator(); iterator.hasNext();) {
  57. String arg = iterator.next();
  58. if (arg.startsWith(OPTIONVALUED_messageHandler)) {
  59. if (arg.length() > OPTIONVALUED_messageHandler.length()) {
  60. String handlerClass = arg.substring(OPTIONVALUED_messageHandler.length()).trim();
  61. try {
  62. Class<?> handler = Class.forName(handlerClass, false, laoder);
  63. weaverOption.messageHandler = ((IMessageHandler) handler.newInstance());
  64. } catch (Throwable t) {
  65. weaverOption.messageHandler.handleMessage(new Message("Cannot instantiate message handler " + handlerClass,
  66. IMessage.ERROR, t, null));
  67. }
  68. }
  69. }
  70. }
  71. // configure the other options
  72. for (Iterator<String> iterator = flags.iterator(); iterator.hasNext();) {
  73. String arg = iterator.next();
  74. if (arg.equals(OPTION_15)) {
  75. weaverOption.java5 = true;
  76. } else if (arg.equalsIgnoreCase(OPTION_lazyTjp)) {
  77. weaverOption.lazyTjp = true;
  78. } else if (arg.equalsIgnoreCase(OPTION_noinline)) {
  79. weaverOption.noInline = true;
  80. } else if (arg.equalsIgnoreCase(OPTION_addSerialVersionUID)) {
  81. weaverOption.addSerialVersionUID = true;
  82. } else if (arg.equalsIgnoreCase(OPTION_noWarn) || arg.equalsIgnoreCase(OPTION_noWarnNone)) {
  83. weaverOption.noWarn = true;
  84. } else if (arg.equalsIgnoreCase(OPTION_proceedOnError)) {
  85. weaverOption.proceedOnError = true;
  86. } else if (arg.equalsIgnoreCase(OPTION_reweavable)) {
  87. weaverOption.notReWeavable = false;
  88. } else if (arg.equalsIgnoreCase(OPTION_showWeaveInfo)) {
  89. weaverOption.showWeaveInfo = true;
  90. } else if (arg.equalsIgnoreCase(OPTION_hasMember)) {
  91. weaverOption.hasMember = true;
  92. } else if (arg.startsWith(OPTIONVALUED_joinpoints)) {
  93. if (arg.length() > OPTIONVALUED_joinpoints.length()) {
  94. weaverOption.optionalJoinpoints = arg.substring(OPTIONVALUED_joinpoints.length()).trim();
  95. }
  96. } else if (arg.equalsIgnoreCase(OPTION_verbose)) {
  97. weaverOption.verbose = true;
  98. } else if (arg.equalsIgnoreCase(OPTION_debug)) {
  99. weaverOption.debug = true;
  100. } else if (arg.equalsIgnoreCase(OPTION_pinpoint)) {
  101. weaverOption.pinpoint = true;
  102. } else if (arg.startsWith(OPTIONVALUED_messageHandler)) {
  103. // handled in first round
  104. } else if (arg.startsWith(OPTIONVALUED_Xlintfile)) {
  105. if (arg.length() > OPTIONVALUED_Xlintfile.length()) {
  106. weaverOption.lintFile = arg.substring(OPTIONVALUED_Xlintfile.length()).trim();
  107. }
  108. } else if (arg.startsWith(OPTIONVALUED_Xlint)) {
  109. if (arg.length() > OPTIONVALUED_Xlint.length()) {
  110. weaverOption.lint = arg.substring(OPTIONVALUED_Xlint.length()).trim();
  111. }
  112. } else if (arg.startsWith(OPTIONVALUED_Xset)) {
  113. if (arg.length() > OPTIONVALUED_Xlint.length()) {
  114. weaverOption.xSet = arg.substring(OPTIONVALUED_Xset.length()).trim();
  115. }
  116. } else if (arg.equalsIgnoreCase(OPTION_timers)) {
  117. weaverOption.timers = true;
  118. } else if (arg.startsWith(OPTIONVALUED_loadersToSkip)) {
  119. if (arg.length() > OPTIONVALUED_loadersToSkip.length()) {
  120. String value = arg.substring(OPTIONVALUED_loadersToSkip.length()).trim();
  121. weaverOption.loadersToSkip = value;
  122. }
  123. } else {
  124. weaverOption.messageHandler.handleMessage(new Message("Cannot configure weaver with option '" + arg
  125. + "': unknown option", IMessage.WARNING, null, null));
  126. }
  127. }
  128. // refine message handler configuration
  129. if (weaverOption.noWarn) {
  130. weaverOption.messageHandler.ignore(IMessage.WARNING);
  131. }
  132. if (weaverOption.verbose) {
  133. weaverOption.messageHandler.dontIgnore(IMessage.INFO);
  134. }
  135. if (weaverOption.debug) {
  136. weaverOption.messageHandler.dontIgnore(IMessage.DEBUG);
  137. }
  138. if (weaverOption.showWeaveInfo) {
  139. weaverOption.messageHandler.dontIgnore(IMessage.WEAVEINFO);
  140. }
  141. return weaverOption;
  142. }
  143. public static class WeaverOption {
  144. boolean java5;
  145. boolean lazyTjp;
  146. boolean hasMember;
  147. boolean timers = false;
  148. String optionalJoinpoints;
  149. boolean noWarn;
  150. boolean proceedOnError;
  151. boolean verbose;
  152. boolean debug;
  153. boolean notReWeavable = true;// default to notReweavable for LTW (faster)
  154. boolean noInline;
  155. boolean addSerialVersionUID;
  156. boolean showWeaveInfo;
  157. boolean pinpoint;
  158. IMessageHandler messageHandler;
  159. String lint;
  160. String lintFile;
  161. String xSet;
  162. String loadersToSkip;
  163. public WeaverOption(IMessageHandler imh) {
  164. // messageHandler = new DefaultMessageHandler();//default
  165. this.messageHandler = imh;
  166. }
  167. }
  168. }