@@ -36,6 +36,7 @@ import org.aspectj.org.eclipse.jdt.internal.compiler.ast.TypeDeclaration; | |||
import org.aspectj.org.eclipse.jdt.internal.compiler.ast.Wildcard; | |||
import org.aspectj.org.eclipse.jdt.internal.compiler.impl.Constant; | |||
import org.aspectj.org.eclipse.jdt.internal.compiler.impl.ReferenceContext; | |||
import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ArrayBinding; | |||
import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.BaseTypes; | |||
import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.Binding; | |||
import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.FieldBinding; | |||
@@ -199,6 +200,12 @@ public class EclipseFactory { | |||
return fromTypeVariableBinding((TypeVariableBinding)binding); | |||
} | |||
// handle arrays since the component type may need special treatment too... | |||
if (binding instanceof ArrayBinding) { | |||
ArrayBinding aBinding = (ArrayBinding) binding; | |||
UnresolvedType componentType = fromBinding(aBinding.leafComponentType); | |||
return UnresolvedType.makeArray(componentType, aBinding.dimensions); | |||
} | |||
if (binding instanceof WildcardBinding) { | |||
WildcardBinding eWB = (WildcardBinding) binding; |
@@ -0,0 +1,24 @@ | |||
public class pr106874 { | |||
class Inner { // works if static | |||
private Integer field; | |||
void bug() { | |||
field = new Integer(0); | |||
} | |||
} | |||
public static void main(String[] args) { | |||
new pr106874().new Inner().bug(); | |||
} | |||
} | |||
aspect Aspect { | |||
before(Object t) : | |||
// target(Object) && // works | |||
// this(t) && // works | |||
target(t) && // fails | |||
// set(* Bug.Inner.field) // works | |||
// set(Integer Bug.Inner.*) // works | |||
// get(* Bug.Inner.*) // works | |||
set(* pr106874.Inner.*) // fails | |||
{} | |||
} |
@@ -0,0 +1,5 @@ | |||
class CantFindType { | |||
public <T> T[] method(T[] array) { | |||
return null; | |||
} | |||
} |
@@ -413,6 +413,10 @@ public class Ajc150Tests extends org.aspectj.testing.XMLBasedAjcTestCase { | |||
public void testNoVerifyErrorWithSetOnInnerType() { | |||
runTest("no verify error with set on inner type"); | |||
} | |||
public void testCantFindTypeErrorWithGenericReturnTypeOrParameter() { | |||
runTest("cant find type error with generic return type or parameter"); | |||
} | |||
// helper methods..... | |||
public SyntheticRepository createRepos(File cpentry) { |
@@ -527,9 +527,15 @@ | |||
<compile files="VerifyErrorOnSet.aj" options="-1.5" > | |||
</compile> | |||
<run class="test.VerifyErrorOnSet"/> | |||
<compile files="pr106874.aj" options="-1.5" > | |||
</compile> | |||
<run class="pr106874"/> | |||
</ajc-test> | |||
<ajc-test dir="bugs150" pr="108826" title="cant find type error with generic return type or parameter"> | |||
<compile files="pr108826.aj" options="-1.5 -emacssym" > | |||
</compile> | |||
</ajc-test> | |||
<!-- ============================================================================ --> | |||
<!-- ============================================================================ --> | |||