aboutsummaryrefslogtreecommitdiffstats
path: root/org.aspectj.ajdt.core
diff options
context:
space:
mode:
authoraclement <aclement>2005-10-11 08:25:03 +0000
committeraclement <aclement>2005-10-11 08:25:03 +0000
commit0a69e42808527ec7daa32ec2d4bbf183ca8b4f4b (patch)
tree7c0602405c4b5297996255190dcf3a47423c5acc /org.aspectj.ajdt.core
parent074261689aede2fdb288e2fe2615bca466cfc098 (diff)
downloadaspectj-0a69e42808527ec7daa32ec2d4bbf183ca8b4f4b.tar.gz
aspectj-0a69e42808527ec7daa32ec2d4bbf183ca8b4f4b.zip
generic itds - see pr112105
Diffstat (limited to 'org.aspectj.ajdt.core')
-rw-r--r--org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/AjLookupEnvironment.java6
-rw-r--r--org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/EclipseFactory.java48
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(),