fixed method offset for very recursive types (#87872#)
This commit is contained in:
@@ -2,9 +2,9 @@
|
|||||||
*
|
*
|
||||||
* $RCSfile: TypeDescription.java,v $
|
* $RCSfile: TypeDescription.java,v $
|
||||||
*
|
*
|
||||||
* $Revision: 1.9 $
|
* $Revision: 1.10 $
|
||||||
*
|
*
|
||||||
* last change: $Author: kr $ $Date: 2001-05-17 12:24:37 $
|
* last change: $Author: kr $ $Date: 2001-06-08 14:57:03 $
|
||||||
*
|
*
|
||||||
* The Contents of this file are made available subject to the terms of
|
* The Contents of this file are made available subject to the terms of
|
||||||
* either of the following licenses
|
* either of the following licenses
|
||||||
@@ -97,7 +97,7 @@ import com.sun.star.lib.uno.typeinfo.TypeInfo;
|
|||||||
* methods, which may be changed or moved in the furture, so please
|
* methods, which may be changed or moved in the furture, so please
|
||||||
* do not use these methods.
|
* do not use these methods.
|
||||||
* <p>
|
* <p>
|
||||||
* @version $Revision: 1.9 $ $ $Date: 2001-05-17 12:24:37 $
|
* @version $Revision: 1.10 $ $ $Date: 2001-06-08 14:57:03 $
|
||||||
* @author Kay Ramme
|
* @author Kay Ramme
|
||||||
* @since UDK2.0
|
* @since UDK2.0
|
||||||
*/
|
*/
|
||||||
@@ -447,6 +447,8 @@ public class TypeDescription implements ITypeDescription {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static public TypeDescription getTypeDescription(TypeInfo typeInfo, Class zClass) {
|
static public TypeDescription getTypeDescription(TypeInfo typeInfo, Class zClass) {
|
||||||
|
if(DEBUG) System.err.println("TypeDescription.getTypeDescription:" + typeInfo + " " + zClass);
|
||||||
|
|
||||||
TypeDescription typeDescription = null;
|
TypeDescription typeDescription = null;
|
||||||
|
|
||||||
if(typeInfo == null || !typeInfo.isInterface())
|
if(typeInfo == null || !typeInfo.isInterface())
|
||||||
@@ -577,6 +579,20 @@ public class TypeDescription implements ITypeDescription {
|
|||||||
protected ITypeDescription _componentType;
|
protected ITypeDescription _componentType;
|
||||||
|
|
||||||
|
|
||||||
|
private int calcMethodOffset(Class zClass) {
|
||||||
|
int offset = 3;
|
||||||
|
|
||||||
|
if(zClass != com.sun.star.uno.XInterface.class) {
|
||||||
|
Method methods[] = zClass.getMethods();
|
||||||
|
|
||||||
|
for(int i = 0; i < methods.length; ++ i)
|
||||||
|
if((methods[i].getModifiers() & Modifier.STATIC) == 0)
|
||||||
|
++ offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
return offset;
|
||||||
|
}
|
||||||
|
|
||||||
private void _initByClass(Class zClass) {
|
private void _initByClass(Class zClass) {
|
||||||
__cyclicTypes.put(zClass.getName(), this);
|
__cyclicTypes.put(zClass.getName(), this);
|
||||||
|
|
||||||
@@ -600,6 +616,8 @@ public class TypeDescription implements ITypeDescription {
|
|||||||
|
|
||||||
_arrayTypeName = "[L" + _class.getName() + ";";
|
_arrayTypeName = "[L" + _class.getName() + ";";
|
||||||
|
|
||||||
|
_offset = calcMethodOffset(zClass);
|
||||||
|
|
||||||
Class interfaces[] = _class.getInterfaces();
|
Class interfaces[] = _class.getInterfaces();
|
||||||
if(interfaces.length > 0)
|
if(interfaces.length > 0)
|
||||||
_superType = getTypeDescription(interfaces[0]); // uno only supports single inheritance
|
_superType = getTypeDescription(interfaces[0]); // uno only supports single inheritance
|
||||||
@@ -699,11 +717,7 @@ public class TypeDescription implements ITypeDescription {
|
|||||||
_offset = 3;
|
_offset = 3;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if(_superType != null) {
|
|
||||||
_superType._initMethodTypeInfos();
|
|
||||||
|
|
||||||
superOffset = _superType._offset;
|
superOffset = _superType._offset;
|
||||||
}
|
|
||||||
|
|
||||||
TypeInfo typeInfos[] = __getTypeInfos(_class);
|
TypeInfo typeInfos[] = __getTypeInfos(_class);
|
||||||
Method methods[] = _class.getMethods();
|
Method methods[] = _class.getMethods();
|
||||||
|
Reference in New Issue
Block a user