Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  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 org.aspectj.bridge.IMessage;
  14. import org.aspectj.bridge.IMessageHandler;
  15. import org.aspectj.bridge.Message;
  16. import org.aspectj.util.LangUtil;
  17. import java.util.Collections;
  18. import java.util.Iterator;
  19. import java.util.List;
  20. /**
  21. * A class that hanldes LTW options.
  22. * Note: AV - I choosed to not reuse AjCompilerOptions and alike since those implies too many dependancies on
  23. * jdt and ajdt modules.
  24. *
  25. * @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a>
  26. */
  27. public class Options {
  28. private final static String OPTION_15 = "-1.5";
  29. private final static String OPTION_lazyTjp = "-XlazyTjp";
  30. private final static String OPTION_noWarn = "-nowarn";
  31. private final static String OPTION_noWarnNone = "-warn:none";
  32. private final static String OPTION_proceedOnError = "-proceedOnError";
  33. private final static String OPTION_verbose = "-verbose";
  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_hasMember = "-XhasMember";
  37. private final static String OPTION_pinpoint = "-Xdev:pinpoint";
  38. private final static String OPTION_showWeaveInfo = "-showWeaveInfo";
  39. private final static String OPTIONVALUED_messageHandler = "-XmessageHandlerClass:";
  40. private static final String OPTIONVALUED_Xlintfile = "-Xlintfile:";
  41. private static final String OPTIONVALUED_Xlint = "-Xlint:";
  42. public static WeaverOption parse(String options, ClassLoader laoder, IMessageHandler imh) {
  43. WeaverOption weaverOption = new WeaverOption(imh);
  44. if (LangUtil.isEmpty(options)) {
  45. return weaverOption;
  46. }
  47. // the first option wins
  48. List flags = LangUtil.anySplit(options, " ");
  49. Collections.reverse(flags);
  50. // do a first round on the message handler since it will report the options themselves
  51. for (Iterator iterator = flags.iterator(); iterator.hasNext();) {
  52. String arg = (String) iterator.next();
  53. if (arg.startsWith(OPTIONVALUED_messageHandler)) {
  54. if (arg.length() > OPTIONVALUED_messageHandler.length()) {
  55. String handlerClass = arg.substring(OPTIONVALUED_messageHandler.length()).trim();
  56. try {
  57. Class handler = Class.forName(handlerClass, false, laoder);
  58. weaverOption.messageHandler = ((IMessageHandler) handler.newInstance());
  59. } catch (Throwable t) {
  60. weaverOption.messageHandler.handleMessage(
  61. new Message(
  62. "Cannot instantiate message handler " + handlerClass,
  63. IMessage.ERROR,
  64. t,
  65. null
  66. )
  67. );
  68. }
  69. }
  70. }
  71. }
  72. // configure the other options
  73. for (Iterator iterator = flags.iterator(); iterator.hasNext();) {
  74. String arg = (String) iterator.next();
  75. if (arg.equals(OPTION_15)) {
  76. weaverOption.java5 = true;
  77. } else if (arg.equalsIgnoreCase(OPTION_lazyTjp)) {
  78. weaverOption.lazyTjp = true;
  79. } else if (arg.equalsIgnoreCase(OPTION_noinline)) {
  80. weaverOption.noInline = true;
  81. } else if (arg.equalsIgnoreCase(OPTION_noWarn) || arg.equalsIgnoreCase(OPTION_noWarnNone)) {
  82. weaverOption.noWarn = true;
  83. } else if (arg.equalsIgnoreCase(OPTION_proceedOnError)) {
  84. weaverOption.proceedOnError = true;
  85. } else if (arg.equalsIgnoreCase(OPTION_reweavable)) {
  86. weaverOption.notReWeavable = false;
  87. } else if (arg.equalsIgnoreCase(OPTION_showWeaveInfo)) {
  88. weaverOption.showWeaveInfo = true;
  89. } else if (arg.equalsIgnoreCase(OPTION_hasMember)) {
  90. weaverOption.hasMember = true;
  91. } else if (arg.equalsIgnoreCase(OPTION_verbose)) {
  92. weaverOption.verbose = true;
  93. } else if (arg.equalsIgnoreCase(OPTION_pinpoint)) {
  94. weaverOption.pinpoint = true;
  95. } else if (arg.startsWith(OPTIONVALUED_messageHandler)) {
  96. ;// handled in first round
  97. } else if (arg.startsWith(OPTIONVALUED_Xlintfile)) {
  98. if (arg.length() > OPTIONVALUED_Xlintfile.length()) {
  99. weaverOption.lintFile = arg.substring(OPTIONVALUED_Xlintfile.length()).trim();
  100. }
  101. } else if (arg.startsWith(OPTIONVALUED_Xlint)) {
  102. if (arg.length() > OPTIONVALUED_Xlint.length()) {
  103. weaverOption.lint = arg.substring(OPTIONVALUED_Xlint.length()).trim();
  104. }
  105. } else {
  106. weaverOption.messageHandler.handleMessage(
  107. new Message(
  108. "Cannot configure weaver with option '" + arg + "': unknown option",
  109. IMessage.WARNING,
  110. null,
  111. null
  112. )
  113. );
  114. }
  115. }
  116. // refine message handler configuration
  117. if (weaverOption.noWarn) {
  118. weaverOption.messageHandler.dontIgnore(IMessage.WARNING);
  119. }
  120. if (weaverOption.verbose) {
  121. weaverOption.messageHandler.dontIgnore(IMessage.DEBUG);
  122. }
  123. if (weaverOption.showWeaveInfo) {
  124. weaverOption.messageHandler.dontIgnore(IMessage.WEAVEINFO);
  125. }
  126. return weaverOption;
  127. }
  128. public static class WeaverOption {
  129. boolean java5;
  130. boolean lazyTjp;
  131. boolean hasMember;
  132. boolean noWarn;
  133. boolean proceedOnError;
  134. boolean verbose;
  135. boolean notReWeavable = true;//default to notReweavable for LTW (faster)
  136. boolean noInline;
  137. boolean showWeaveInfo;
  138. boolean pinpoint;
  139. IMessageHandler messageHandler;
  140. String lint;
  141. String lintFile;
  142. public WeaverOption(IMessageHandler imh) {
  143. // messageHandler = new DefaultMessageHandler();//default
  144. this.messageHandler = imh;
  145. }
  146. }
  147. }