소스 검색

test and fix for pr110906: vararg ITDs

tags/preDefaultReweavable
aclement 18 년 전
부모
커밋
32a02ec2a3

+ 4
- 2
org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/InterTypeMethodDeclaration.java 파일 보기

@@ -35,6 +35,7 @@ import org.aspectj.org.eclipse.jdt.internal.compiler.parser.Parser;
import org.aspectj.org.eclipse.jdt.internal.compiler.problem.AbortCompilationUnit;
import org.aspectj.weaver.AjAttribute;
import org.aspectj.weaver.AjcMemberMaker;
import org.aspectj.weaver.Constants;
import org.aspectj.weaver.NameMangler;
import org.aspectj.weaver.NewMethodTypeMunger;
import org.aspectj.weaver.ResolvedMember;
@@ -188,8 +189,9 @@ public class InterTypeMethodDeclaration extends InterTypeDeclaration {
// referred to in the parameters/returntype
ResolvedMember sig = world.makeResolvedMember(binding,onTypeBinding);
sig.resetName(new String(declaredSelector));
sig.resetModifiers(declaredModifiers);
int resetModifiers = declaredModifiers;
if (binding.isVarargs()) resetModifiers = resetModifiers | Constants.ACC_VARARGS;
sig.resetModifiers(resetModifiers);
NewMethodTypeMunger myMunger = new NewMethodTypeMunger(sig, null);
setMunger(myMunger);
ResolvedType aspectType = world.fromEclipse(classScope.referenceContext.binding);

+ 4
- 1
org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/EclipseFactory.java 파일 보기

@@ -449,7 +449,7 @@ public class EclipseFactory {
// AMC these next two lines shouldn't be needed once we sort out generic types properly in the world map
ResolvedType realDeclaringType = world.resolve(fromBinding(declaringType));
if (realDeclaringType.isRawType()) realDeclaringType = realDeclaringType.getGenericType();
ResolvedMember ret = new ResolvedMemberImpl(
ResolvedMemberImpl ret = new ResolvedMemberImpl(
binding.isConstructor() ? Member.CONSTRUCTOR : Member.METHOD,
realDeclaringType,
binding.modifiers,
@@ -458,6 +458,9 @@ public class EclipseFactory {
fromBindings(binding.parameters),
fromBindings(binding.thrownExceptions)
);
if (binding.isVarargs()) {
ret.setVarargsMethod();
}
if (typeVariablesForThisMember.size()!=0) {
UnresolvedType[] tvars = new UnresolvedType[typeVariablesForThisMember.size()];
int i =0;

+ 1
- 1
org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/EclipseTypeMunger.java 파일 보기

@@ -131,7 +131,7 @@ public class EclipseTypeMunger extends ConcreteTypeMunger {
binding.modifiers = (binding.modifiers & (IConstants.AccPublic | IConstants.AccProtected | IConstants.AccPrivate));
if (isAbstract) binding.modifiers |= IConstants.AccAbstract;
}
if (munger.getSignature().isVarargsMethod()) binding.modifiers |= IConstants.AccVarargs;
findOrCreateInterTypeMemberFinder(sourceType).addInterTypeMethod(binding);
return true;
}

BIN
org.aspectj.ajdt.core/testdata/OutjarTest/aspects.jar 파일 보기


BIN
org.aspectj.ajdt.core/testdata/OutjarTest/child.jar 파일 보기


BIN
org.aspectj.ajdt.core/testdata/OutjarTest/parent.jar 파일 보기


+ 25
- 0
tests/bugs150/pr110906.aj 파일 보기

@@ -0,0 +1,25 @@
public class pr110906 {

public static void main(String []argv) {
new pr110906().printNames(new Object[]{"a","b","c"});
new pr110906().printNames("a","b","c"); // should be allowed!!
new pr110906().printNames2("a","b","c"); // should be allowed!!
}

}

aspect A {

private interface HasName {}

declare parents: (pr110906) implements HasName;

public void HasName.printNames(Object... names) {
System.out.println(names[0]);
}

public void HasName.printNames2(String... names) {
System.out.println(names[0]);
}

}

+ 2
- 0
tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java 파일 보기

@@ -53,6 +53,8 @@ public class Ajc150Tests extends org.aspectj.testing.XMLBasedAjcTestCase {
public void testBadDecp_pr110788_2() { runTest("bad generic decp - 2");}
public void testBadDecp_pr110788_3() { runTest("bad generic decp - 3");}
public void testBadDecp_pr110788_4() { runTest("bad generic decp - 4");}

public void testVarargsITD_pr110906() { runTest("ITD varargs problem");}
public void testBadGenericSigAttribute_pr110927() {
runTest("cant create signature attribute");

+ 8
- 1
tests/src/org/aspectj/systemtest/ajc150/ajc150.xml 파일 보기

@@ -4900,7 +4900,14 @@
</ajc-test>
<ajc-test dir="bugs150" title="ITD varargs problem">
<compile files="pr110906.aj"/>
<compile files="pr110906.aj" options="-1.5"/>
<run class="pr110906">
<stdout>
<line text="a"/>
<line text="a"/>
<line text="a"/>
</stdout>
</run>
</ajc-test>
<ajc-test dir="bugs150" title="generic itds and abstract method error">

+ 14
- 3
weaver/src/org/aspectj/weaver/ResolvedMemberImpl.java 파일 보기

@@ -321,10 +321,14 @@ public class ResolvedMemberImpl extends MemberImpl implements IHasPosition, Anno
return (modifiers & Constants.ACC_VARARGS)!=0;
}
public void setVarargsMethod() {
modifiers = modifiers | Constants.ACC_VARARGS;
}
public boolean isSynthetic() {
return false;
}
public void write(DataOutputStream s) throws IOException {
getKind().write(s);
getDeclaringType().write(s);
@@ -335,6 +339,7 @@ public class ResolvedMemberImpl extends MemberImpl implements IHasPosition, Anno

s.writeInt(getStart());
s.writeInt(getEnd());
s.writeBoolean(isVarargsMethod());

// Write out any type variables...
if (typeVariables==null) {
@@ -356,15 +361,21 @@ public class ResolvedMemberImpl extends MemberImpl implements IHasPosition, Anno

public static ResolvedMemberImpl readResolvedMember(VersionedDataInputStream s, ISourceContext sourceContext) throws IOException {
ResolvedMemberImpl m = new ResolvedMemberImpl(Kind.read(s), UnresolvedType.read(s), s.readInt(), s.readUTF(), s.readUTF());
ResolvedMemberImpl m = new ResolvedMemberImpl(Kind.read(s), UnresolvedType.read(s), s.readInt(),
s.readUTF(), s.readUTF());
m.checkedExceptions = UnresolvedType.readArray(s);

m.start = s.readInt();
m.end = s.readInt();
m.sourceContext = sourceContext;
// Read in the type variables...
if (s.getMajorVersion()>=AjAttribute.WeaverVersionInfo.WEAVER_VERSION_MAJOR_AJ150) {
boolean isvarargs = s.readBoolean();
if (isvarargs) m.setVarargsMethod();

int tvcount = s.readInt();
if (tvcount!=0) {
m.typeVariables = new UnresolvedType[tvcount];

Loading…
취소
저장