diff options
author | aclement <aclement> | 2005-10-11 08:25:03 +0000 |
---|---|---|
committer | aclement <aclement> | 2005-10-11 08:25:03 +0000 |
commit | 0a69e42808527ec7daa32ec2d4bbf183ca8b4f4b (patch) | |
tree | 7c0602405c4b5297996255190dcf3a47423c5acc /org.aspectj.ajdt.core | |
parent | 074261689aede2fdb288e2fe2615bca466cfc098 (diff) | |
download | aspectj-0a69e42808527ec7daa32ec2d4bbf183ca8b4f4b.tar.gz aspectj-0a69e42808527ec7daa32ec2d4bbf183ca8b4f4b.zip |
generic itds - see pr112105
Diffstat (limited to 'org.aspectj.ajdt.core')
2 files changed, 48 insertions, 6 deletions
diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/AjLookupEnvironment.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/AjLookupEnvironment.java index a9776e410..58e650286 100644 --- a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/AjLookupEnvironment.java +++ b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/AjLookupEnvironment.java @@ -47,7 +47,6 @@ import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.LocalTypeBinding; import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment; import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.MethodBinding; import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.PackageBinding; -import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.RawTypeBinding; import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding; import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding; import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TagBits; @@ -57,7 +56,6 @@ import org.aspectj.weaver.AsmRelationshipProvider; import org.aspectj.weaver.ConcreteTypeMunger; import org.aspectj.weaver.ReferenceType; import org.aspectj.weaver.ResolvedType; -import org.aspectj.weaver.ResolvedTypeMunger; import org.aspectj.weaver.UnresolvedType; import org.aspectj.weaver.WeaverMessages; import org.aspectj.weaver.WeaverStateInfo; @@ -543,6 +541,7 @@ public class AjLookupEnvironment extends LookupEnvironment implements AnonymousC needOldStyleWarning = false; } onType.addInterTypeMunger(munger); + /* //TODO: Andy Should be done at weave time. // Unfortunately we can't do it at weave time unless the type mungers remember where // they came from. Thats why we do it here during complation because at this time @@ -554,6 +553,7 @@ public class AjLookupEnvironment extends LookupEnvironment implements AnonymousC // AsmRelationshipProvider (see BCELTypeMunger) if (!ResolvedTypeMunger.persistSourceLocation) // Do it up front if we bloody have to AsmInterTypeRelationshipProvider.getDefault().addRelationship(onType, munger); + */ } } @@ -863,7 +863,7 @@ public class AjLookupEnvironment extends LookupEnvironment implements AnonymousC needFieldsAndMethods, accessRestriction); factory.getWorld().validateType(factory.fromBinding(ret)); - // if you need the bytes to pass to validate, here they are:ClassFileReader)binaryType).getReferenceBytes() + // if you need the bytes to pass to validate, here they are:((ClassFileReader)binaryType).getReferenceBytes() weaveInterTypeDeclarations(ret); return ret; } finally { diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/EclipseFactory.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/EclipseFactory.java index ac65d16ec..2c49f86ee 100644 --- a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/EclipseFactory.java +++ b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/EclipseFactory.java @@ -464,10 +464,11 @@ public class EclipseFactory { ret.setVarargsMethod(); } if (typeVariablesForThisMember.size()!=0) { - UnresolvedType[] tvars = new UnresolvedType[typeVariablesForThisMember.size()]; + // SAUSAGES this might be broken with the change for resolved members to own type variables + TypeVariable[] tvars = new TypeVariable[typeVariablesForThisMember.size()]; int i =0; for (Iterator iter = typeVariablesForThisMember.values().iterator(); iter.hasNext();) { - tvars[i++] = (UnresolvedType)iter.next(); + tvars[i++] = ((TypeVariableReference)((UnresolvedType)iter.next())).getTypeVariable(); } ret.setTypeVariables(tvars); } @@ -621,7 +622,7 @@ public class EclipseFactory { if (member.getTypeVariables().length==0) { tvbs = MethodBinding.NoTypeVariables; } else { - tvbs = makeTypeVariableBindings(member.getTypeVariables()); + tvbs = makeTypeVariableBindingsFromAJTypeVariables(member.getTypeVariables()); // fixup the declaring element, we couldn't do it whilst processing the typevariables as we'll end up in recursion. for (int i = 0; i < tvbs.length; i++) { TypeVariableBinding binding = tvbs[i]; @@ -661,6 +662,15 @@ public class EclipseFactory { } return ret; } + + private TypeVariableBinding[] makeTypeVariableBindingsFromAJTypeVariables(TypeVariable[] typeVariables) { + int len = typeVariables.length; + TypeVariableBinding[] ret = new TypeVariableBinding[len]; + for (int i = 0; i < len; i++) { + ret[i] = makeTypeVariableBindingFromAJTypeVariable(typeVariables[i]); + } + return ret; + } // only accessed through private methods in this class. Ensures all type variables we encounter // map back to the same type binding - this is important later when Eclipse code is processing @@ -705,6 +715,38 @@ public class EclipseFactory { } return tvBinding; } + + private TypeVariableBinding makeTypeVariableBindingFromAJTypeVariable(TypeVariable tv) { + TypeVariableBinding tvBinding = (TypeVariableBinding)typeVariableToTypeBinding.get(tv.getName()); + if (currentType!=null) { + TypeVariableBinding tvb = currentType.getTypeVariable(tv.getName().toCharArray()); + if (tvb!=null) return tvb; + } + if (tvBinding==null) { + Binding declaringElement = null; + // this will cause an infinite loop or NPE... not required yet luckily. +// if (tVar.getDeclaringElement() instanceof Member) { +// declaringElement = makeMethodBinding((ResolvedMember)tVar.getDeclaringElement()); +// } else { +// declaringElement = makeTypeBinding((UnresolvedType)tVar.getDeclaringElement()); +// } + tvBinding = new TypeVariableBinding(tv.getName().toCharArray(),declaringElement,tv.getRank()); + typeVariableToTypeBinding.put(tv.getName(),tvBinding); + tvBinding.superclass=(ReferenceBinding)makeTypeBinding(tv.getUpperBound()); + tvBinding.firstBound=tvBinding.superclass; // FIXME asc is this correct? possibly it could be first superinterface + if (tv.getAdditionalInterfaceBounds()==null) { + tvBinding.superInterfaces=TypeVariableBinding.NoSuperInterfaces; + } else { + TypeBinding tbs[] = makeTypeBindings(tv.getAdditionalInterfaceBounds()); + ReferenceBinding[] rbs= new ReferenceBinding[tbs.length]; + for (int i = 0; i < tbs.length; i++) { + rbs[i] = (ReferenceBinding)tbs[i]; + } + tvBinding.superInterfaces=rbs; + } + } + return tvBinding; + } public MethodBinding makeMethodBindingForCall(Member member) { return new MethodBinding(member.getCallsiteModifiers(), |