123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 |
- Index: .classpath
- ===================================================================
- RCS file: /home/technology/org.aspectj/modules/org.aspectj.ajdt.core/.classpath,v
- retrieving revision 1.6
- diff -u -r1.6 .classpath
- --- .classpath 3 May 2005 13:31:17 -0000 1.6
- +++ .classpath 2 Sep 2005 07:39:42 -0000
- @@ -13,5 +13,6 @@
- <classpathentry kind="src" path="/testing-util"/>
- <classpathentry kind="src" path="/testing-client"/>
- <classpathentry kind="src" path="/org.eclipse.jdt.core"/>
- + <classpathentry combineaccessrules="false" kind="src" path="/aspectj5rt"/>
- <classpathentry kind="output" path="bin"/>
- </classpath>
- Index: .project
- ===================================================================
- RCS file: /home/technology/org.aspectj/modules/org.aspectj.ajdt.core/.project,v
- retrieving revision 1.2
- diff -u -r1.2 .project
- --- .project 13 Aug 2004 15:18:01 -0000 1.2
- +++ .project 2 Sep 2005 07:39:42 -0000
- @@ -4,6 +4,7 @@
- <comment></comment>
- <projects>
- <project>asm</project>
- + <project>aspectj5rt</project>
- <project>bridge</project>
- <project>org.eclipse.jdt.core</project>
- <project>runtime</project>
- Index: src/org/aspectj/ajdt/ajc/BuildArgParser.java
- ===================================================================
- RCS file: /home/technology/org.aspectj/modules/org.aspectj.ajdt.core/src/org/aspectj/ajdt/ajc/BuildArgParser.java,v
- retrieving revision 1.40
- diff -u -r1.40 BuildArgParser.java
- --- src/org/aspectj/ajdt/ajc/BuildArgParser.java 23 Aug 2005 08:47:32 -0000 1.40
- +++ src/org/aspectj/ajdt/ajc/BuildArgParser.java 2 Sep 2005 07:39:43 -0000
- @@ -171,6 +171,7 @@
- }
-
- buildConfig.setFiles(fileList);
- + buildConfig.setUserFileNameMap(parser.getUserFileNameMap());
- if (destinationPath != null) { // XXX ?? unparsed but set?
- buildConfig.setOutputDir(new File(destinationPath));
- }
- Index: src/org/aspectj/ajdt/internal/core/builder/AjBuildConfig.java
- ===================================================================
- RCS file: /home/technology/org.aspectj/modules/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AjBuildConfig.java,v
- retrieving revision 1.28
- diff -u -r1.28 AjBuildConfig.java
- --- src/org/aspectj/ajdt/internal/core/builder/AjBuildConfig.java 23 Aug 2005 08:47:14 -0000 1.28
- +++ src/org/aspectj/ajdt/internal/core/builder/AjBuildConfig.java 2 Sep 2005 07:39:43 -0000
- @@ -44,6 +44,7 @@
- private File outputJar;
- private List/*File*/ sourceRoots = new ArrayList();
- private List/*File*/ files = new ArrayList();
- + private Map/*File -> File*/ userFileNameMap = new HashMap();
- private List /*File*/ binaryFiles = new ArrayList(); // .class files in indirs...
- private List/*File*/ inJars = new ArrayList();
- private List/*File*/ inPath = new ArrayList();
- @@ -117,6 +118,10 @@
- public List/*File*/ getFiles() {
- return files;
- }
- +
- + public Map/* File -> File*/ getUserFileNameMap() {
- + return userFileNameMap;
- + }
-
- /**
- * returned files includes all .class files found in
- @@ -134,6 +139,10 @@
- public void setFiles(List files) {
- this.files = files;
- }
- +
- + public void setUserFileNameMap(Map userFileNameMap) {
- + this.userFileNameMap = userFileNameMap;
- + }
-
- public void setOutputDir(File outputDir) {
- this.outputDir = outputDir;
- Index: src/org/aspectj/ajdt/internal/core/builder/AjBuildManager.java
- ===================================================================
- RCS file: /home/technology/org.aspectj/modules/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AjBuildManager.java,v
- retrieving revision 1.73
- diff -u -r1.73 AjBuildManager.java
- --- src/org/aspectj/ajdt/internal/core/builder/AjBuildManager.java 23 Aug 2005 21:30:11 -0000 1.73
- +++ src/org/aspectj/ajdt/internal/core/builder/AjBuildManager.java 2 Sep 2005 07:39:45 -0000
- @@ -165,8 +165,11 @@
- if (!canIncremental && !batch) { // retry as batch?
- return doBuild(buildConfig, baseHandler, true);
- }
- + IMessageHandler userTranslatingHandler =
- + new UserFileLocationTranslatingHandler(baseHandler,buildConfig.getUserFileNameMap());
- this.handler =
- - CountingMessageHandler.makeCountingMessageHandler(baseHandler);
- + CountingMessageHandler.makeCountingMessageHandler(userTranslatingHandler);
- + ;
- // XXX duplicate, no? remove?
- String check = checkRtJar(buildConfig);
- if (check != null) {
- Index: testsrc/org/aspectj/ajdt/internal/core/builder/AjBuildManagerTest.java
- ===================================================================
- RCS file: /home/technology/org.aspectj/modules/org.aspectj.ajdt.core/testsrc/org/aspectj/ajdt/internal/core/builder/AjBuildManagerTest.java,v
- retrieving revision 1.16
- diff -u -r1.16 AjBuildManagerTest.java
- --- testsrc/org/aspectj/ajdt/internal/core/builder/AjBuildManagerTest.java 23 Jan 2004 19:07:52 -0000 1.16
- +++ testsrc/org/aspectj/ajdt/internal/core/builder/AjBuildManagerTest.java 2 Sep 2005 07:39:46 -0000
- @@ -89,6 +89,29 @@
- // ((StructureNode)StructureModelManager.INSTANCE.getStructureModel().getRoot().getChildren().get(0)).getChildren()
- // );
- }
- +
- + public void testUserFileTranslationInErrorMessages() throws IOException {
- + AjBuildManager manager = new AjBuildManager(messageWriter);
- + BuildArgParser parser = new BuildArgParser(messageWriter);
- + String javaClassPath = System.getProperty("java.class.path");
- + AjBuildConfig buildConfig =
- + parser.genBuildConfig(new String[] {
- + "-d", "out",
- + "-classpath",
- + javaClassPath,
- + AjdtAjcTests.TESTDATA_PATH
- + + "/src1/DeclareWarning.java",
- +// EajcModuleTests.TESTDATA_PATH + "/src1/Hello.java",
- + });
- + String err = parser.getOtherMessages(true);
- + assertTrue(err, null == err);
- + manager.setStructureModel(AsmManager.getDefault().getHierarchy());
- + MessageHandler handler = new MessageHandler();
- + manager.batchBuild(buildConfig, handler);
- + IMessage[] warnings = handler.getMessages(IMessage.WARNING, false);
- + assertEquals("1 warning",1,warnings.length);
- + assertTrue("source file mapped back to user location",warnings[0].getSourceLocation().getSourceFile().getPath().startsWith(".."));
- + }
-
-
-
- Index: src/org/aspectj/ajdt/internal/core/builder/UserFileLocationTranslatingHandler.java
- ===================================================================
- RCS file: src/org/aspectj/ajdt/internal/core/builder/UserFileLocationTranslatingHandler.java
- diff -N src/org/aspectj/ajdt/internal/core/builder/UserFileLocationTranslatingHandler.java
- --- /dev/null 1 Jan 1970 00:00:00 -0000
- +++ src/org/aspectj/ajdt/internal/core/builder/UserFileLocationTranslatingHandler.java 1 Jan 1970 00:00:00 -0000
- @@ -0,0 +1,97 @@
- +/* *******************************************************************
- + * Copyright (c) 2005 Contributors.
- + * All rights reserved.
- + * This program and the accompanying materials are made available
- + * under the terms of the Eclipse Public License v1.0
- + * which accompanies this distribution and is available at
- + * http://eclipse.org/legal/epl-v10.html
- + *
- + * Contributors:
- + * Adrian Colyer Initial implementation
- + * ******************************************************************/
- +package org.aspectj.ajdt.internal.core.builder;
- +
- +import java.io.File;
- +import java.util.ArrayList;
- +import java.util.Iterator;
- +import java.util.List;
- +import java.util.Map;
- +
- +import org.aspectj.bridge.AbortException;
- +import org.aspectj.bridge.IMessage;
- +import org.aspectj.bridge.IMessageHandler;
- +import org.aspectj.bridge.ISourceLocation;
- +import org.aspectj.bridge.Message;
- +import org.aspectj.bridge.SourceLocation;
- +import org.aspectj.bridge.IMessage.Kind;
- +
- +/**
- + * @author colyer
- + *
- + */
- +public class UserFileLocationTranslatingHandler implements IMessageHandler {
- +
- + private IMessageHandler delegate;
- + private Map userFileNameMap;
- +
- + public UserFileLocationTranslatingHandler(IMessageHandler delegateHandler, Map canonicalFileToUserFile) {
- + this.delegate = delegateHandler;
- + this.userFileNameMap = canonicalFileToUserFile;
- + }
- +
- + /* (non-Javadoc)
- + * @see org.aspectj.bridge.IMessageHandler#handleMessage(org.aspectj.bridge.IMessage)
- + */
- + public boolean handleMessage(IMessage message) throws AbortException {
- + IMessage messageToIssue = message;
- + ISourceLocation location = message.getSourceLocation();
- + if (location != null) {
- + File sourceFile = location.getSourceFile();
- + if (userFileNameMap.containsKey(sourceFile)) {
- + File userFile = (File) userFileNameMap.get(sourceFile);
- + if (!sourceFile.getPath().equals(userFile.getPath())) {
- + // path as known to user is different to the canonical path we have been
- + // working with. Could be due to eg. symbolic links in filesystem etc.
- + // this upsets clients such as AJDT
- + messageToIssue = replaceLocationsIn(message);
- + }
- + }
- + }
- + return delegate.handleMessage(messageToIssue);
- + }
- +
- + /* (non-Javadoc)
- + * @see org.aspectj.bridge.IMessageHandler#isIgnoring(org.aspectj.bridge.IMessage.Kind)
- + */
- + public boolean isIgnoring(Kind kind) {
- + return delegate.isIgnoring(kind);
- + }
- +
- + /* (non-Javadoc)
- + * @see org.aspectj.bridge.IMessageHandler#dontIgnore(org.aspectj.bridge.IMessage.Kind)
- + */
- + public void dontIgnore(Kind kind) {
- + delegate.dontIgnore(kind);
- + }
- +
- + private IMessage replaceLocationsIn(IMessage message) {
- + ISourceLocation newSourceLocation = replaceLocationIn(message.getSourceLocation());
- + List extraLocations = message.getExtraSourceLocations();
- + List newExtraLocations = new ArrayList();
- + for (Iterator iter = extraLocations.iterator(); iter.hasNext();) {
- + ISourceLocation loc = (ISourceLocation) iter.next();
- + newExtraLocations.add(replaceLocationIn(loc));
- + }
- + Message copyWithUpdatedLocation = new Message(message,newSourceLocation,newExtraLocations);
- + return copyWithUpdatedLocation;
- + }
- +
- + private ISourceLocation replaceLocationIn(ISourceLocation location) {
- + File newSourceFile = location.getSourceFile();
- + if (userFileNameMap.containsKey(newSourceFile)) {
- + newSourceFile = (File) userFileNameMap.get(newSourceFile);
- + }
- + SourceLocation newSourceLocation = new SourceLocation(location,newSourceFile);
- + return newSourceLocation;
- + }
- +}
|