summaryrefslogtreecommitdiffstats
path: root/org.aspectj.ajdt.core/pr107313-SourceLocation.patch
diff options
context:
space:
mode:
authoracolyer <acolyer>2005-09-02 07:42:57 +0000
committeracolyer <acolyer>2005-09-02 07:42:57 +0000
commit372a025d85641e17d9fff734a0c2e9770fd2d55f (patch)
tree8ae5195e38e7fa1aa8c7b0b52c1498360c557c54 /org.aspectj.ajdt.core/pr107313-SourceLocation.patch
parent619f8bc764e127d4f43ece87ae0e858f7329ec9e (diff)
downloadaspectj-372a025d85641e17d9fff734a0c2e9770fd2d55f.tar.gz
aspectj-372a025d85641e17d9fff734a0c2e9770fd2d55f.zip
Patch files to reapply changes developed in exploring pr107313 should we ever decided to go back down that route...
Diffstat (limited to 'org.aspectj.ajdt.core/pr107313-SourceLocation.patch')
-rw-r--r--org.aspectj.ajdt.core/pr107313-SourceLocation.patch242
1 files changed, 242 insertions, 0 deletions
diff --git a/org.aspectj.ajdt.core/pr107313-SourceLocation.patch b/org.aspectj.ajdt.core/pr107313-SourceLocation.patch
new file mode 100644
index 000000000..8a5ef11f8
--- /dev/null
+++ b/org.aspectj.ajdt.core/pr107313-SourceLocation.patch
@@ -0,0 +1,242 @@
+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;
++ }
++}