@@ -94,7 +94,7 @@ public void addDependencies(List<String> dependencyList) {
9494 String dependencyOwner = owner ;
9595 if (origOpcode == Opcodes .INVOKEVIRTUAL ) {
9696 ByteCodeClass bc = Parser .getClassObject (owner .replace ('/' , '_' ).replace ('$' , '_' ));
97- String resolvedConcreteOwner = resolveConcreteInvokeOwner (bc );
97+ String resolvedConcreteOwner = resolveConcreteInvokeOwner (bc , true );
9898 if (resolvedConcreteOwner != null ) {
9999 dependencyOwner = resolvedConcreteOwner ;
100100 }
@@ -150,13 +150,16 @@ private String findActualOwner(ByteCodeClass bc) {
150150 return findActualOwner (bc .getBaseClassObject ());
151151 }
152152
153- private String resolveConcreteInvokeOwner (ByteCodeClass ownerClass ) {
154- if (ownerClass == null || ownerClass .getConcreteClass () == null || getMethod () == null ) {
153+ private String resolveConcreteInvokeOwner (ByteCodeClass ownerClass , boolean allowMissingMethodContext ) {
154+ if (ownerClass == null || ownerClass .getConcreteClass () == null ) {
155+ return null ;
156+ }
157+ String currentClass = getMethod () != null ? getMethod ().getClsName () : null ;
158+ if (currentClass == null && !allowMissingMethodContext ) {
155159 return null ;
156160 }
157- String currentClass = getMethod ().getClsName ();
158161 String ownerName = ownerClass .getClsName ();
159- if (ownerName .equals (currentClass ) || currentClass .startsWith (ownerName + "_" )) {
162+ if (currentClass != null && ( ownerName .equals (currentClass ) || currentClass .startsWith (ownerName + "_" ) )) {
160163 return null ;
161164 }
162165 ByteCodeClass concreteClass = Parser .getClassObject (ownerClass .getConcreteClass ().replace ('/' , '_' ).replace ('$' , '_' ));
@@ -209,7 +212,7 @@ public boolean appendExpression(StringBuilder b) {
209212 if (bc .isMethodPrivate (name , desc )) {
210213 isVirtual = false ;
211214 } else {
212- String resolvedConcreteOwner = resolveConcreteInvokeOwner (bc );
215+ String resolvedConcreteOwner = resolveConcreteInvokeOwner (bc , false );
213216 if (resolvedConcreteOwner != null ) {
214217 invokeOwner = resolvedConcreteOwner ;
215218 isVirtual = false ;
@@ -320,7 +323,7 @@ public void appendInstruction(StringBuilder b) {
320323 if (bc .isMethodPrivate (name , desc )) {
321324 isVirtual = false ;
322325 } else {
323- String resolvedConcreteOwner = resolveConcreteInvokeOwner (bc );
326+ String resolvedConcreteOwner = resolveConcreteInvokeOwner (bc , false );
324327 if (resolvedConcreteOwner != null ) {
325328 invokeOwner = resolvedConcreteOwner ;
326329 isVirtual = false ;
0 commit comments