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.

pr107313-SourceLocation.patch 10KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. Index: .classpath
  2. ===================================================================
  3. RCS file: /home/technology/org.aspectj/modules/org.aspectj.ajdt.core/.classpath,v
  4. retrieving revision 1.6
  5. diff -u -r1.6 .classpath
  6. --- .classpath 3 May 2005 13:31:17 -0000 1.6
  7. +++ .classpath 2 Sep 2005 07:39:42 -0000
  8. @@ -13,5 +13,6 @@
  9. <classpathentry kind="src" path="/testing-util"/>
  10. <classpathentry kind="src" path="/testing-client"/>
  11. <classpathentry kind="src" path="/org.eclipse.jdt.core"/>
  12. + <classpathentry combineaccessrules="false" kind="src" path="/aspectj5rt"/>
  13. <classpathentry kind="output" path="bin"/>
  14. </classpath>
  15. Index: .project
  16. ===================================================================
  17. RCS file: /home/technology/org.aspectj/modules/org.aspectj.ajdt.core/.project,v
  18. retrieving revision 1.2
  19. diff -u -r1.2 .project
  20. --- .project 13 Aug 2004 15:18:01 -0000 1.2
  21. +++ .project 2 Sep 2005 07:39:42 -0000
  22. @@ -4,6 +4,7 @@
  23. <comment></comment>
  24. <projects>
  25. <project>asm</project>
  26. + <project>aspectj5rt</project>
  27. <project>bridge</project>
  28. <project>org.eclipse.jdt.core</project>
  29. <project>runtime</project>
  30. Index: src/org/aspectj/ajdt/ajc/BuildArgParser.java
  31. ===================================================================
  32. RCS file: /home/technology/org.aspectj/modules/org.aspectj.ajdt.core/src/org/aspectj/ajdt/ajc/BuildArgParser.java,v
  33. retrieving revision 1.40
  34. diff -u -r1.40 BuildArgParser.java
  35. --- src/org/aspectj/ajdt/ajc/BuildArgParser.java 23 Aug 2005 08:47:32 -0000 1.40
  36. +++ src/org/aspectj/ajdt/ajc/BuildArgParser.java 2 Sep 2005 07:39:43 -0000
  37. @@ -171,6 +171,7 @@
  38. }
  39. buildConfig.setFiles(fileList);
  40. + buildConfig.setUserFileNameMap(parser.getUserFileNameMap());
  41. if (destinationPath != null) { // XXX ?? unparsed but set?
  42. buildConfig.setOutputDir(new File(destinationPath));
  43. }
  44. Index: src/org/aspectj/ajdt/internal/core/builder/AjBuildConfig.java
  45. ===================================================================
  46. RCS file: /home/technology/org.aspectj/modules/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AjBuildConfig.java,v
  47. retrieving revision 1.28
  48. diff -u -r1.28 AjBuildConfig.java
  49. --- src/org/aspectj/ajdt/internal/core/builder/AjBuildConfig.java 23 Aug 2005 08:47:14 -0000 1.28
  50. +++ src/org/aspectj/ajdt/internal/core/builder/AjBuildConfig.java 2 Sep 2005 07:39:43 -0000
  51. @@ -44,6 +44,7 @@
  52. private File outputJar;
  53. private List/*File*/ sourceRoots = new ArrayList();
  54. private List/*File*/ files = new ArrayList();
  55. + private Map/*File -> File*/ userFileNameMap = new HashMap();
  56. private List /*File*/ binaryFiles = new ArrayList(); // .class files in indirs...
  57. private List/*File*/ inJars = new ArrayList();
  58. private List/*File*/ inPath = new ArrayList();
  59. @@ -117,6 +118,10 @@
  60. public List/*File*/ getFiles() {
  61. return files;
  62. }
  63. +
  64. + public Map/* File -> File*/ getUserFileNameMap() {
  65. + return userFileNameMap;
  66. + }
  67. /**
  68. * returned files includes all .class files found in
  69. @@ -134,6 +139,10 @@
  70. public void setFiles(List files) {
  71. this.files = files;
  72. }
  73. +
  74. + public void setUserFileNameMap(Map userFileNameMap) {
  75. + this.userFileNameMap = userFileNameMap;
  76. + }
  77. public void setOutputDir(File outputDir) {
  78. this.outputDir = outputDir;
  79. Index: src/org/aspectj/ajdt/internal/core/builder/AjBuildManager.java
  80. ===================================================================
  81. RCS file: /home/technology/org.aspectj/modules/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AjBuildManager.java,v
  82. retrieving revision 1.73
  83. diff -u -r1.73 AjBuildManager.java
  84. --- src/org/aspectj/ajdt/internal/core/builder/AjBuildManager.java 23 Aug 2005 21:30:11 -0000 1.73
  85. +++ src/org/aspectj/ajdt/internal/core/builder/AjBuildManager.java 2 Sep 2005 07:39:45 -0000
  86. @@ -165,8 +165,11 @@
  87. if (!canIncremental && !batch) { // retry as batch?
  88. return doBuild(buildConfig, baseHandler, true);
  89. }
  90. + IMessageHandler userTranslatingHandler =
  91. + new UserFileLocationTranslatingHandler(baseHandler,buildConfig.getUserFileNameMap());
  92. this.handler =
  93. - CountingMessageHandler.makeCountingMessageHandler(baseHandler);
  94. + CountingMessageHandler.makeCountingMessageHandler(userTranslatingHandler);
  95. + ;
  96. // XXX duplicate, no? remove?
  97. String check = checkRtJar(buildConfig);
  98. if (check != null) {
  99. Index: testsrc/org/aspectj/ajdt/internal/core/builder/AjBuildManagerTest.java
  100. ===================================================================
  101. RCS file: /home/technology/org.aspectj/modules/org.aspectj.ajdt.core/testsrc/org/aspectj/ajdt/internal/core/builder/AjBuildManagerTest.java,v
  102. retrieving revision 1.16
  103. diff -u -r1.16 AjBuildManagerTest.java
  104. --- testsrc/org/aspectj/ajdt/internal/core/builder/AjBuildManagerTest.java 23 Jan 2004 19:07:52 -0000 1.16
  105. +++ testsrc/org/aspectj/ajdt/internal/core/builder/AjBuildManagerTest.java 2 Sep 2005 07:39:46 -0000
  106. @@ -89,6 +89,29 @@
  107. // ((StructureNode)StructureModelManager.INSTANCE.getStructureModel().getRoot().getChildren().get(0)).getChildren()
  108. // );
  109. }
  110. +
  111. + public void testUserFileTranslationInErrorMessages() throws IOException {
  112. + AjBuildManager manager = new AjBuildManager(messageWriter);
  113. + BuildArgParser parser = new BuildArgParser(messageWriter);
  114. + String javaClassPath = System.getProperty("java.class.path");
  115. + AjBuildConfig buildConfig =
  116. + parser.genBuildConfig(new String[] {
  117. + "-d", "out",
  118. + "-classpath",
  119. + javaClassPath,
  120. + AjdtAjcTests.TESTDATA_PATH
  121. + + "/src1/DeclareWarning.java",
  122. +// EajcModuleTests.TESTDATA_PATH + "/src1/Hello.java",
  123. + });
  124. + String err = parser.getOtherMessages(true);
  125. + assertTrue(err, null == err);
  126. + manager.setStructureModel(AsmManager.getDefault().getHierarchy());
  127. + MessageHandler handler = new MessageHandler();
  128. + manager.batchBuild(buildConfig, handler);
  129. + IMessage[] warnings = handler.getMessages(IMessage.WARNING, false);
  130. + assertEquals("1 warning",1,warnings.length);
  131. + assertTrue("source file mapped back to user location",warnings[0].getSourceLocation().getSourceFile().getPath().startsWith(".."));
  132. + }
  133. Index: src/org/aspectj/ajdt/internal/core/builder/UserFileLocationTranslatingHandler.java
  134. ===================================================================
  135. RCS file: src/org/aspectj/ajdt/internal/core/builder/UserFileLocationTranslatingHandler.java
  136. diff -N src/org/aspectj/ajdt/internal/core/builder/UserFileLocationTranslatingHandler.java
  137. --- /dev/null 1 Jan 1970 00:00:00 -0000
  138. +++ src/org/aspectj/ajdt/internal/core/builder/UserFileLocationTranslatingHandler.java 1 Jan 1970 00:00:00 -0000
  139. @@ -0,0 +1,97 @@
  140. +/* *******************************************************************
  141. + * Copyright (c) 2005 Contributors.
  142. + * All rights reserved.
  143. + * This program and the accompanying materials are made available
  144. + * under the terms of the Eclipse Public License v1.0
  145. + * which accompanies this distribution and is available at
  146. + * http://eclipse.org/legal/epl-v10.html
  147. + *
  148. + * Contributors:
  149. + * Adrian Colyer Initial implementation
  150. + * ******************************************************************/
  151. +package org.aspectj.ajdt.internal.core.builder;
  152. +
  153. +import java.io.File;
  154. +import java.util.ArrayList;
  155. +import java.util.Iterator;
  156. +import java.util.List;
  157. +import java.util.Map;
  158. +
  159. +import org.aspectj.bridge.AbortException;
  160. +import org.aspectj.bridge.IMessage;
  161. +import org.aspectj.bridge.IMessageHandler;
  162. +import org.aspectj.bridge.ISourceLocation;
  163. +import org.aspectj.bridge.Message;
  164. +import org.aspectj.bridge.SourceLocation;
  165. +import org.aspectj.bridge.IMessage.Kind;
  166. +
  167. +/**
  168. + * @author colyer
  169. + *
  170. + */
  171. +public class UserFileLocationTranslatingHandler implements IMessageHandler {
  172. +
  173. + private IMessageHandler delegate;
  174. + private Map userFileNameMap;
  175. +
  176. + public UserFileLocationTranslatingHandler(IMessageHandler delegateHandler, Map canonicalFileToUserFile) {
  177. + this.delegate = delegateHandler;
  178. + this.userFileNameMap = canonicalFileToUserFile;
  179. + }
  180. +
  181. + /* (non-Javadoc)
  182. + * @see org.aspectj.bridge.IMessageHandler#handleMessage(org.aspectj.bridge.IMessage)
  183. + */
  184. + public boolean handleMessage(IMessage message) throws AbortException {
  185. + IMessage messageToIssue = message;
  186. + ISourceLocation location = message.getSourceLocation();
  187. + if (location != null) {
  188. + File sourceFile = location.getSourceFile();
  189. + if (userFileNameMap.containsKey(sourceFile)) {
  190. + File userFile = (File) userFileNameMap.get(sourceFile);
  191. + if (!sourceFile.getPath().equals(userFile.getPath())) {
  192. + // path as known to user is different to the canonical path we have been
  193. + // working with. Could be due to eg. symbolic links in filesystem etc.
  194. + // this upsets clients such as AJDT
  195. + messageToIssue = replaceLocationsIn(message);
  196. + }
  197. + }
  198. + }
  199. + return delegate.handleMessage(messageToIssue);
  200. + }
  201. +
  202. + /* (non-Javadoc)
  203. + * @see org.aspectj.bridge.IMessageHandler#isIgnoring(org.aspectj.bridge.IMessage.Kind)
  204. + */
  205. + public boolean isIgnoring(Kind kind) {
  206. + return delegate.isIgnoring(kind);
  207. + }
  208. +
  209. + /* (non-Javadoc)
  210. + * @see org.aspectj.bridge.IMessageHandler#dontIgnore(org.aspectj.bridge.IMessage.Kind)
  211. + */
  212. + public void dontIgnore(Kind kind) {
  213. + delegate.dontIgnore(kind);
  214. + }
  215. +
  216. + private IMessage replaceLocationsIn(IMessage message) {
  217. + ISourceLocation newSourceLocation = replaceLocationIn(message.getSourceLocation());
  218. + List extraLocations = message.getExtraSourceLocations();
  219. + List newExtraLocations = new ArrayList();
  220. + for (Iterator iter = extraLocations.iterator(); iter.hasNext();) {
  221. + ISourceLocation loc = (ISourceLocation) iter.next();
  222. + newExtraLocations.add(replaceLocationIn(loc));
  223. + }
  224. + Message copyWithUpdatedLocation = new Message(message,newSourceLocation,newExtraLocations);
  225. + return copyWithUpdatedLocation;
  226. + }
  227. +
  228. + private ISourceLocation replaceLocationIn(ISourceLocation location) {
  229. + File newSourceFile = location.getSourceFile();
  230. + if (userFileNameMap.containsKey(newSourceFile)) {
  231. + newSourceFile = (File) userFileNameMap.get(newSourceFile);
  232. + }
  233. + SourceLocation newSourceLocation = new SourceLocation(location,newSourceFile);
  234. + return newSourceLocation;
  235. + }
  236. +}