Przeglądaj źródła

Fix for Bug 82570: Weaved code does not include debug lines

tags/Root_AspectJ5_Development
aclement 19 lat temu
rodzic
commit
71966e3348

+ 1
- 0
tests/.classpath Wyświetl plik

@@ -10,5 +10,6 @@
<classpathentry kind="src" path="/bridge"/>
<classpathentry kind="src" path="/ajde"/>
<classpathentry kind="src" path="/asm"/>
<classpathentry sourcepath="/lib/bcel/bcel-src.zip" kind="lib" path="/lib/bcel/bcel.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>

+ 32
- 0
tests/bugs150/PR82570_1.java Wyświetl plik

@@ -0,0 +1,32 @@

public class PR82570_1 {
public static void main(String[] args) {
new PR82570_1().m();
}
public void m() {
}
}

aspect X {
public PR82570_1.new(String p) {}
public int PR82570_1.itdField;
public void PR82570_1.itdMethod(String s) {
}
before(): call(* m(..)) {
System.err.println("m");
}
void around(): call(* m(..)) {
}
}


+ 54
- 0
tests/src/org/aspectj/systemtest/ajc150/Ajc150TestsNoHarness.java Wyświetl plik

@@ -12,6 +12,10 @@ package org.aspectj.systemtest.ajc150;

import java.io.File;

import org.aspectj.apache.bcel.classfile.JavaClass;
import org.aspectj.apache.bcel.classfile.Method;
import org.aspectj.apache.bcel.util.ClassPath;
import org.aspectj.apache.bcel.util.SyntheticRepository;
import org.aspectj.tools.ajc.CompilationResult;


@@ -31,10 +35,60 @@ public class Ajc150TestsNoHarness extends TestUtils {
if (verbose) {System.err.println(rR.getStdErr());}
}
public void testIncorrectExceptionTableWhenReturnInMethod_pr79554() {
CompilationResult cR=ajc(baseDir,new String[]{"PR79554.java"});
if (verbose) { System.err.println(cR); System.err.println(cR.getStandardError());}
RunResult rR = run("PR79554");
if (verbose) {System.err.println(rR.getStdErr());}
}
public void testMissingDebugInfoForGeneratedMethods_pr82570() throws ClassNotFoundException {
boolean f = false;
CompilationResult cR = ajc(baseDir,new String[]{"PR82570_1.java"});
System.err.println(cR.getStandardError());
assertTrue("Expected no compile problem:"+cR,!cR.hasErrorMessages());
JavaClass jc = getClassFrom(ajc.getSandboxDirectory(),"PR82570_1");
Method[] meths = jc.getMethods();
for (int i = 0; i < meths.length; i++) {
Method method = meths[i];
if (f) System.err.println("Line number table for "+method.getName()+method.getSignature()+" = "+method.getLineNumberTable());
assertTrue("Didn't find a line number table for method "+method.getName()+method.getSignature(),
method.getLineNumberTable()!=null);
}

// This test would determine the info isn't there if you pass -g:none ...
// cR = ajc(baseDir,new String[]{"PR82570_1.java","-g:none"});
// assertTrue("Expected no compile problem:"+cR,!cR.hasErrorMessages());
// System.err.println(cR.getStandardError());
// jc = getClassFrom(ajc.getSandboxDirectory(),"PR82570_1");
// meths = jc.getMethods();
// for (int i = 0; i < meths.length; i++) {
// Method method = meths[i];
// assertTrue("Found a line number table for method "+method.getName(),
// method.getLineNumberTable()==null);
// }
}
///////////////////////////////////////// TESTCASE HELPER METHODS BELOW HERE //////////////////////////
// Some util methods for accessing .class contents as BCEL objects
public SyntheticRepository createRepos(File cpentry) {
ClassPath cp = new ClassPath(cpentry+File.pathSeparator+System.getProperty("java.class.path"));
return SyntheticRepository.getInstance(cp);
}
private JavaClass getClassFrom(File where,String clazzname) throws ClassNotFoundException {
SyntheticRepository repos = createRepos(where);
return repos.loadClass(clazzname);
}
}

+ 8
- 1
weaver/src/org/aspectj/weaver/bcel/LazyMethodGen.java Wyświetl plik

@@ -970,7 +970,14 @@ public final class LazyMethodGen {
(InstructionHandle) localVariableStarts.get(tag),
(InstructionHandle) localVariableEnds.get(tag));
}

// JAVAC adds line number tables (with just one entry) to generated accessor methods - this
// keeps some tools that rely on finding at least some form of linenumbertable happy.
// Let's check if we have one - if we don't then let's add one.
// TODO Could be made conditional on whether line debug info is being produced
if (gen.getLineNumbers().length==0) {
gen.addLineNumber(gen.getInstructionList().getStart(),1);
}
}

/** This procedure should not currently be used.

Ładowanie…
Anuluj
Zapisz