Lines 962-968
Link Here
|
962 |
*/ |
962 |
*/ |
963 |
public final char[] signature(ClassFile classFile) { |
963 |
public final char[] signature(ClassFile classFile) { |
964 |
if (this.signature != null) { |
964 |
if (this.signature != null) { |
965 |
if ((this.tagBits & TagBits.ContainsNestedTypesInSignature) != 0) { |
965 |
if ((this.tagBits & TagBits.ContainsNestedTypes) != 0) { |
966 |
// we need to record inner classes references |
966 |
// we need to record inner classes references |
967 |
boolean isConstructor = isConstructor(); |
967 |
boolean isConstructor = isConstructor(); |
968 |
TypeBinding[] targetParameters = this.parameters; |
968 |
TypeBinding[] targetParameters = this.parameters; |
Lines 973-980
Link Here
|
973 |
if (syntheticArgumentTypes != null) { |
973 |
if (syntheticArgumentTypes != null) { |
974 |
for (int i = 0, count = syntheticArgumentTypes.length; i < count; i++) { |
974 |
for (int i = 0, count = syntheticArgumentTypes.length; i < count; i++) { |
975 |
ReferenceBinding syntheticArgumentType = syntheticArgumentTypes[i]; |
975 |
ReferenceBinding syntheticArgumentType = syntheticArgumentTypes[i]; |
976 |
if (syntheticArgumentType.isNestedType()) { |
976 |
if ((syntheticArgumentType.tagBits & TagBits.ContainsNestedTypes) != 0) { |
977 |
classFile.recordInnerClasses(syntheticArgumentType); |
977 |
recordNestedType(classFile, syntheticArgumentType); |
978 |
} |
978 |
} |
979 |
} |
979 |
} |
980 |
} |
980 |
} |
Lines 984-994
Link Here
|
984 |
} |
984 |
} |
985 |
|
985 |
|
986 |
if (targetParameters != Binding.NO_PARAMETERS) { |
986 |
if (targetParameters != Binding.NO_PARAMETERS) { |
987 |
for (int i = 0; i < targetParameters.length; i++) { |
987 |
for (int i = 0, max = targetParameters.length; i < max; i++) { |
988 |
TypeBinding targetParameter = targetParameters[i]; |
988 |
TypeBinding targetParameter = targetParameters[i]; |
989 |
TypeBinding leafTargetParameterType = targetParameter.leafComponentType(); |
989 |
TypeBinding leafTargetParameterType = targetParameter.leafComponentType(); |
990 |
if (leafTargetParameterType.isNestedType()) { |
990 |
if ((leafTargetParameterType.tagBits & TagBits.ContainsNestedTypes) != 0) { |
991 |
classFile.recordInnerClasses(leafTargetParameterType); |
991 |
recordNestedType(classFile, leafTargetParameterType); |
992 |
} |
992 |
} |
993 |
} |
993 |
} |
994 |
} |
994 |
} |
Lines 997-1011
Link Here
|
997 |
for (int i = targetParameters.length, extraLength = this.parameters.length; i < extraLength; i++) { |
997 |
for (int i = targetParameters.length, extraLength = this.parameters.length; i < extraLength; i++) { |
998 |
TypeBinding parameter = this.parameters[i]; |
998 |
TypeBinding parameter = this.parameters[i]; |
999 |
TypeBinding leafParameterType = parameter.leafComponentType(); |
999 |
TypeBinding leafParameterType = parameter.leafComponentType(); |
1000 |
if (leafParameterType.isNestedType()) { |
1000 |
if ((leafParameterType.tagBits & TagBits.ContainsNestedTypes) != 0) { |
1001 |
classFile.recordInnerClasses(leafParameterType); |
1001 |
recordNestedType(classFile, leafParameterType); |
1002 |
} |
1002 |
} |
1003 |
} |
1003 |
} |
1004 |
} |
1004 |
} |
1005 |
if (this.returnType != null) { |
1005 |
if (this.returnType != null) { |
1006 |
TypeBinding ret = this.returnType.leafComponentType(); |
1006 |
TypeBinding ret = this.returnType.leafComponentType(); |
1007 |
if (ret.isNestedType()) { |
1007 |
if ((ret.tagBits & TagBits.ContainsNestedTypes) != 0) { |
1008 |
classFile.recordInnerClasses(ret); |
1008 |
recordNestedType(classFile, ret); |
1009 |
} |
1009 |
} |
1010 |
} |
1010 |
} |
1011 |
} |
1011 |
} |
Lines 1028-1036
Link Here
|
1028 |
if (syntheticArgumentTypes != null) { |
1028 |
if (syntheticArgumentTypes != null) { |
1029 |
for (int i = 0, count = syntheticArgumentTypes.length; i < count; i++) { |
1029 |
for (int i = 0, count = syntheticArgumentTypes.length; i < count; i++) { |
1030 |
ReferenceBinding syntheticArgumentType = syntheticArgumentTypes[i]; |
1030 |
ReferenceBinding syntheticArgumentType = syntheticArgumentTypes[i]; |
1031 |
if (syntheticArgumentType.isNestedType()) { |
1031 |
if ((syntheticArgumentType.tagBits & TagBits.ContainsNestedTypes) != 0) { |
1032 |
this.tagBits |= TagBits.ContainsNestedTypesInSignature; |
1032 |
recordNestedType(classFile, syntheticArgumentType); |
1033 |
classFile.recordInnerClasses(syntheticArgumentType); |
|
|
1034 |
} |
1033 |
} |
1035 |
buffer.append(syntheticArgumentType.signature()); |
1034 |
buffer.append(syntheticArgumentType.signature()); |
1036 |
} |
1035 |
} |
Lines 1042-1053
Link Here
|
1042 |
} |
1041 |
} |
1043 |
|
1042 |
|
1044 |
if (targetParameters != Binding.NO_PARAMETERS) { |
1043 |
if (targetParameters != Binding.NO_PARAMETERS) { |
1045 |
for (int i = 0; i < targetParameters.length; i++) { |
1044 |
for (int i = 0, max = targetParameters.length; i < max; i++) { |
1046 |
TypeBinding targetParameter = targetParameters[i]; |
1045 |
TypeBinding targetParameter = targetParameters[i]; |
1047 |
TypeBinding leafTargetParameterType = targetParameter.leafComponentType(); |
1046 |
TypeBinding leafTargetParameterType = targetParameter.leafComponentType(); |
1048 |
if (leafTargetParameterType.isNestedType()) { |
1047 |
if ((leafTargetParameterType.tagBits & TagBits.ContainsNestedTypes) != 0) { |
1049 |
this.tagBits |= TagBits.ContainsNestedTypesInSignature; |
1048 |
recordNestedType(classFile, leafTargetParameterType); |
1050 |
classFile.recordInnerClasses(leafTargetParameterType); |
|
|
1051 |
} |
1049 |
} |
1052 |
buffer.append(targetParameter.signature()); |
1050 |
buffer.append(targetParameter.signature()); |
1053 |
} |
1051 |
} |
Lines 1062-1070
Link Here
|
1062 |
for (int i = targetParameters.length, extraLength = this.parameters.length; i < extraLength; i++) { |
1060 |
for (int i = targetParameters.length, extraLength = this.parameters.length; i < extraLength; i++) { |
1063 |
TypeBinding parameter = this.parameters[i]; |
1061 |
TypeBinding parameter = this.parameters[i]; |
1064 |
TypeBinding leafParameterType = parameter.leafComponentType(); |
1062 |
TypeBinding leafParameterType = parameter.leafComponentType(); |
1065 |
if (leafParameterType.isNestedType()) { |
1063 |
if ((leafParameterType.tagBits & TagBits.ContainsNestedTypes) != 0) { |
1066 |
this.tagBits |= TagBits.ContainsNestedTypesInSignature; |
1064 |
recordNestedType(classFile, leafParameterType); |
1067 |
classFile.recordInnerClasses(leafParameterType); |
|
|
1068 |
} |
1065 |
} |
1069 |
buffer.append(parameter.signature()); |
1066 |
buffer.append(parameter.signature()); |
1070 |
} |
1067 |
} |
Lines 1072-1080
Link Here
|
1072 |
buffer.append(')'); |
1069 |
buffer.append(')'); |
1073 |
if (this.returnType != null) { |
1070 |
if (this.returnType != null) { |
1074 |
TypeBinding ret = this.returnType.leafComponentType(); |
1071 |
TypeBinding ret = this.returnType.leafComponentType(); |
1075 |
if (ret.isNestedType()) { |
1072 |
if ((ret.tagBits & TagBits.ContainsNestedTypes) != 0) { |
1076 |
this.tagBits |= TagBits.ContainsNestedTypesInSignature; |
1073 |
recordNestedType(classFile, ret); |
1077 |
classFile.recordInnerClasses(ret); |
|
|
1078 |
} |
1074 |
} |
1079 |
buffer.append(this.returnType.signature()); |
1075 |
buffer.append(this.returnType.signature()); |
1080 |
} |
1076 |
} |
Lines 1084-1089
Link Here
|
1084 |
|
1080 |
|
1085 |
return this.signature; |
1081 |
return this.signature; |
1086 |
} |
1082 |
} |
|
|
1083 |
private void recordNestedType(ClassFile classFile, TypeBinding typeBinding) { |
1084 |
if (typeBinding.isNestedType()) { |
1085 |
this.tagBits |= TagBits.ContainsNestedTypes; |
1086 |
classFile.recordInnerClasses(typeBinding); |
1087 |
} else if (typeBinding.isParameterizedType() |
1088 |
&& ((typeBinding.tagBits & TagBits.ContainsNestedTypes) != 0)) { |
1089 |
ParameterizedTypeBinding parameterizedTypeBinding = (ParameterizedTypeBinding) typeBinding; |
1090 |
TypeBinding[] arguments = parameterizedTypeBinding.arguments; |
1091 |
for (int j = 0, max2 = arguments.length; j < max2; j++) { |
1092 |
TypeBinding argument = arguments[j]; |
1093 |
if (argument.isWildcard()) { |
1094 |
WildcardBinding wildcardBinding = (WildcardBinding) argument; |
1095 |
TypeBinding bound = wildcardBinding.bound; |
1096 |
if (bound != null) { |
1097 |
recordNestedType(classFile, bound); |
1098 |
} |
1099 |
ReferenceBinding superclass = wildcardBinding.superclass(); |
1100 |
if (superclass != null) { |
1101 |
recordNestedType(classFile, superclass); |
1102 |
} |
1103 |
ReferenceBinding[] superInterfaces = wildcardBinding.superInterfaces(); |
1104 |
if (superInterfaces != null) { |
1105 |
for (int k = 0, max3 = superInterfaces.length; k < max3; k++) { |
1106 |
ReferenceBinding superInterface = superInterfaces[k]; |
1107 |
recordNestedType(classFile, superInterface); |
1108 |
} |
1109 |
} |
1110 |
} else { |
1111 |
recordNestedType(classFile, argument); |
1112 |
} |
1113 |
} |
1114 |
} else if (typeBinding.isTypeVariable() |
1115 |
&& ((typeBinding.tagBits & TagBits.ContainsNestedTypes) != 0)) { |
1116 |
TypeVariableBinding typeVariableBinding = (TypeVariableBinding) typeBinding; |
1117 |
ReferenceBinding superclass = typeVariableBinding.superclass(); |
1118 |
recordNestedType(classFile, superclass); |
1119 |
ReferenceBinding[] superInterfaces = typeVariableBinding.superInterfaces(); |
1120 |
if (superInterfaces != null) { |
1121 |
for (int k = 0, max3 = superInterfaces.length; k < max3; k++) { |
1122 |
ReferenceBinding superInterface = superInterfaces[k]; |
1123 |
recordNestedType(classFile, superInterface); |
1124 |
} |
1125 |
} |
1126 |
} |
1127 |
} |
1087 |
public final int sourceEnd() { |
1128 |
public final int sourceEnd() { |
1088 |
AbstractMethodDeclaration method = sourceMethod(); |
1129 |
AbstractMethodDeclaration method = sourceMethod(); |
1089 |
if (method == null) { |
1130 |
if (method == null) { |