diff --git a/src/de/inetsoftware/classparser/ClassFile.java b/src/de/inetsoftware/classparser/ClassFile.java index 596a831..41eefce 100644 --- a/src/de/inetsoftware/classparser/ClassFile.java +++ b/src/de/inetsoftware/classparser/ClassFile.java @@ -388,9 +388,12 @@ public class ClassFile { String origClassName = partialClassFile.thisClass.getName(); ArrayList allMethods = new ArrayList<>( Arrays.asList( methods ) ); for( MethodInfo m : partialClassFile.methods ) { - if( getMethod( m.getName(), m.getType() ) == null ) { - m.setDeclaringClassFile( origClassName, this ); + m.setDeclaringClassFile( origClassName, this ); + MethodInfo origMethod = getMethod( m.getName(), m.getType() ); + if( origMethod == null ) { allMethods.add( m ); + } else if( origMethod.isNative() ) { + allMethods.set( allMethods.indexOf( origMethod ), m ); } } methods = allMethods.toArray( methods ); diff --git a/src/de/inetsoftware/classparser/MethodInfo.java b/src/de/inetsoftware/classparser/MethodInfo.java index 9fd00d9..a873782 100644 --- a/src/de/inetsoftware/classparser/MethodInfo.java +++ b/src/de/inetsoftware/classparser/MethodInfo.java @@ -101,6 +101,15 @@ public class MethodInfo implements Member { return (accessFlags & 0x0008) > 0; } + /** + * If the method is native + * + * @return true, if abstract + */ + public boolean isNative() { + return (accessFlags & 0x0100) > 0; + } + /** * If the method is abstract *