* PARC initial implementation
* ******************************************************************/
-
package org.aspectj.ajdt.internal.compiler.ast;
import java.util.HashSet;
import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.FieldBinding;
import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.MethodBinding;
import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.MethodScope;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ParameterizedMethodBinding;
import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding;
import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ProblemMethodBinding;
import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
import org.aspectj.weaver.ResolvedMember;
/**
- * Takes a method that already has the three extra parameters
- * thisJoinPointStaticPart, thisJoinPoint and thisEnclosingJoinPointStaticPart
+ * Takes a method that already has the three extra parameters thisJoinPointStaticPart, thisJoinPoint and
+ * thisEnclosingJoinPointStaticPart
*/
public class SuperFixerVisitor extends ASTVisitor {
return super.visit(localTypeDeclaration, scope);
}
- public void endVisit(TypeDeclaration localTypeDeclaration,BlockScope scope) {
+ public void endVisit(TypeDeclaration localTypeDeclaration, BlockScope scope) {
depthCounter--;
- }
+ }
public void endVisit(MessageSend call, BlockScope scope) {
- //System.out.println("endVisit: " + call);
+ // System.out.println("endVisit: " + call);
// an error has already occurred
- if (call.codegenBinding == null) return;
-
+ if (call.codegenBinding == null)
+ return;
+
MethodBinding superBinding = call.codegenBinding;
if (superBinding instanceof ProblemMethodBinding) {
return;
// need to treat super calls specially here
if (superBinding instanceof InterTypeMethodBinding) {
return;
-// InterTypeMethodBinding m = (InterTypeMethodBinding)superBinding;
-// if (m.postDispatchMethod != null) {
-// call.binding = m.postDispatchMethod;
-// }
-// return;
+ // InterTypeMethodBinding m = (InterTypeMethodBinding)superBinding;
+ // if (m.postDispatchMethod != null) {
+ // call.binding = m.postDispatchMethod;
+ // }
+ // return;
+ }
+ if (superBinding instanceof ParameterizedMethodBinding) {
+ superBinding = ((ParameterizedMethodBinding) superBinding).original();
}
- EclipseFactory factory = ((AjLookupEnvironment)method.scope.environment()).factory;
- if (depthCounter!=0 && targetClass.isInterface()) {// pr198196 - when calling MarkerInterface.super.XXX()
+ EclipseFactory factory = ((AjLookupEnvironment) method.scope.environment()).factory;
+ if (depthCounter != 0 && targetClass.isInterface()) {// pr198196 - when calling MarkerInterface.super.XXX()
if (call.isSuperAccess() && !call.binding.isStatic()) {
MethodScope currentMethodScope = scope.methodScope();
SourceTypeBinding sourceType = currentMethodScope.enclosingSourceType();
FieldBinding field = sourceType.addSyntheticFieldForInnerclass(targetClass);
- call.receiver = new KnownFieldReference(field,call.receiver.sourceStart,call.receiver.sourceEnd);
+ call.receiver = new KnownFieldReference(field, call.receiver.sourceStart, call.receiver.sourceEnd);
} else {
return;
}
- } else if (depthCounter==0) { // Allow case testSuperItds_pr198196_2/3
-
+ } else if (depthCounter == 0) { // Allow case testSuperItds_pr198196_2/3
+
char[] accessName;
if (call.isSuperAccess() && !call.binding.isStatic()) {
call.receiver = new ThisReference(call.receiver.sourceStart, call.receiver.sourceEnd);
- accessName =
- NameMangler.superDispatchMethod(factory.fromBinding(targetClass),
- new String(superBinding.selector)).toCharArray();
+ accessName = NameMangler.superDispatchMethod(factory.fromBinding(targetClass), new String(superBinding.selector))
+ .toCharArray();
} else if (call.receiver.isThis() && call.binding.isProtected() && !call.binding.isStatic()) {
- //XXX this is a hack that violates some binary compatibility rules
+ // XXX this is a hack that violates some binary compatibility rules
ReferenceBinding superBindingDeclaringClass = superBinding.declaringClass;
if (superBindingDeclaringClass.isParameterizedType()) {
- superBindingDeclaringClass = ((ParameterizedTypeBinding)superBindingDeclaringClass).type;
+ superBindingDeclaringClass = ((ParameterizedTypeBinding) superBindingDeclaringClass).type;
}
if (superBindingDeclaringClass.equals(targetClass)) {
- accessName =
- NameMangler.protectedDispatchMethod(factory.fromBinding(targetClass),
- new String(superBinding.selector)).toCharArray();
+ accessName = NameMangler.protectedDispatchMethod(factory.fromBinding(targetClass),
+ new String(superBinding.selector)).toCharArray();
} else {
- accessName =
- NameMangler.superDispatchMethod(factory.fromBinding(targetClass),
- new String(superBinding.selector)).toCharArray();
+ accessName = NameMangler.superDispatchMethod(factory.fromBinding(targetClass),
+ new String(superBinding.selector)).toCharArray();
}
} else {
return;
}
-
- //??? do we want these to be unique
- MethodBinding superAccessBinding =
- new MethodBinding(ClassFileConstants.AccPublic, accessName,
- superBinding.returnType, superBinding.parameters, superBinding.thrownExceptions,
- targetClass);
-
+
+ // ??? do we want these to be unique
+ MethodBinding superAccessBinding = new MethodBinding(ClassFileConstants.AccPublic, accessName, superBinding.returnType,
+ superBinding.parameters, superBinding.thrownExceptions, targetClass);
+
AstUtil.replaceMethodBinding(call, superAccessBinding);
} else {
- return;
+ return;
}
ResolvedMember targetMember = null;
- if (superBinding.declaringClass.isParameterizedType()) { //pr206911
- targetMember = factory.makeResolvedMember(superBinding,((ParameterizedTypeBinding)superBinding.declaringClass).genericType());
+ if (superBinding.declaringClass.isParameterizedType()) { // pr206911
+ targetMember = factory.makeResolvedMember(superBinding, ((ParameterizedTypeBinding) superBinding.declaringClass)
+ .genericType());
} else {
targetMember = factory.makeResolvedMember(superBinding);
}