JavaLookup: Make JavaResolver not to use JavaClass>>lookupMethodFor:
authorJan Vrany <jan.vrany@fit.cvut.cz>
Sun, 27 Mar 2016 22:29:04 +0100
changeset 3553 5329fb7027e8
parent 3552 9c3f3089d912
child 3554 1e2d0859a20c
JavaLookup: Make JavaResolver not to use JavaClass>>lookupMethodFor: Essentially, method lookup (Sec 6.5 of JVM8 Spec) is different from method resolution (Sec 5.4.3.3 and 6.5.3.4 of JVM8 Spec). Nuked #lookupMethodByNameAndType: - not used anymore.
JavaArray.st
JavaClass.st
JavaResolver.st
Make.proto
extensions.st
stx_libjava.st
--- a/JavaArray.st	Wed Mar 23 19:45:10 2016 +0000
+++ b/JavaArray.st	Sun Mar 27 22:29:04 2016 +0100
@@ -121,15 +121,6 @@
     "Created: / 22-05-2011 / 18:07:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
-lookupMethodByNameAndType: aJavaNameAndType 
-
-    "Trick, since java arrays should respond to all messages
-     understood by java.lang.object"    
-    ^ (Java at:'java.lang.Object') lookupMethodByNameAndType: aJavaNameAndType
-
-    "Created: / 22-05-2011 / 18:03:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-! !
-
 !JavaArray class methodsFor:'accessing - java'!
 
 javaMirrorClass
--- a/JavaClass.st	Wed Mar 23 19:45:10 2016 +0000
+++ b/JavaClass.st	Sun Mar 27 22:29:04 2016 +0100
@@ -3181,12 +3181,6 @@
     "Modified: / 07-12-2011 / 23:05:08 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
 !
 
-lookupMethodByNameAndType: aJavaNameAndType
-    ^ self lookupMethodFor: aJavaNameAndType selector.
-
-    "Created: / 11-04-2011 / 21:28:34 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
-!
-
 lookupStaticFieldByNameAndType: aJavaNameAndType
     | field  cls |
     cls := self.
--- a/JavaResolver.st	Wed Mar 23 19:45:10 2016 +0000
+++ b/JavaResolver.st	Sun Mar 27 22:29:04 2016 +0100
@@ -20,6 +20,8 @@
 "
 "{ Package: 'stx:libjava' }"
 
+"{ NameSpace: Smalltalk }"
+
 Object subclass:#JavaResolver
 	instanceVariableNames:'exceptionThrower'
 	classVariableNames:'uniqueInstance'
@@ -445,7 +447,7 @@
     "Modified: / 04-08-2014 / 15:52:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
-!JavaResolver methodsFor:'field resolving helpers'!
+!JavaResolver methodsFor:'field resolving-helpers'!
 
 checkPermissionsForField: aJavaField from: accessingJavaClass to: resolvedJavaClass     
     ^ self 
@@ -474,19 +476,41 @@
     "Modified: / 01-12-2012 / 13:46:02 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
 ! !
 
-!JavaResolver methodsFor:'interface method resolving'!
+!JavaResolver methodsFor:'method resolving'!
 
 resolveInterfaceMethodIdentifiedByRef: aJavaInterfaceMethodRef 
-    | result  class |
+    | result  class search selector |
     self validateInterfaceMethodRef: aJavaInterfaceMethodRef.
-    result := self 
-            lookupInterfaceMethodIfAlreadyResolved: aJavaInterfaceMethodRef.
-    result notNil ifTrue: [ ^ result ].
     class := aJavaInterfaceMethodRef classRef resolve: false.
-    class isNil ifTrue: [ self error: 'should not happen - tell mh' ].
+    class isNil ifTrue: [ 
+        self error: 'should not happen - tell mh' 
+    ].
+    "Array types responds to all method of class java.lang.Object"
+    class isJavaArrayClass ifTrue:[
+        class := JavaVM classForName:'java.lang.Object'.
+    ].
     class isInterface ifFalse: [ self throwIncompatibleClassChangeError ].
-    result := class 
-            lookupMethodByNameAndType: aJavaInterfaceMethodRef nameAndType.
+
+    search := class.
+    selector := aJavaInterfaceMethodRef nameAndType selector.
+    [ search notNil and:[result isNil] ] whileTrue:[
+        result := search compiledMethodAt: selector.
+        search := search superclass.
+    ].  
+    result isNil ifTrue:[ 
+        | queue |
+
+        queue := OrderedCollection withAll: class allInterfaces.
+        [ result isNil and:[queue notEmpty ] ] whileTrue:[ 
+            search := queue removeFirst.
+            result := search compiledMethodAt: selector.
+            result isNil ifTrue:[ 
+                search interfaces do:[:interface | 
+                    (queue includes: interface) ifFalse:[ queue add: interface ].
+                ].
+            ].
+        ].
+    ].  
     result isNil ifTrue: [ self throwNoSuchMethodError ].
     (self 
         checkPermissionsForMethod: result
@@ -515,51 +539,26 @@
 loading constraints TiL1 = TiL2 for i = 0 to n (§5.3.4)."
 
     "Modified: / 01-12-2012 / 13:46:09 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
-    "Modified: / 09-11-2013 / 00:12:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-! !
-
-!JavaResolver methodsFor:'interface method resolving helpers'!
-
-lookupInterfaceMethodIfAlreadyResolved: aJavaInterfaceMethodRef 
-    ^  nil.
-
-    "Created: / 13-04-2011 / 11:53:36 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+    "Modified: / 27-03-2016 / 22:18:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
-validateInterfaceMethodRef: aJavaInterfaceMethodRef 
-    aJavaInterfaceMethodRef isJavaRef ifFalse: [
-        self error: 'I expected JavaRef instance as an argument'
-    ].
-    aJavaInterfaceMethodRef isJavaInterfaceMethodRef ifFalse: [
-        self error: 'I expected JavaMethodRef instance as an argument'
-    ].
-
-    "Created: / 13-04-2011 / 11:53:34 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
-    "Modified: / 01-12-2012 / 13:46:20 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
-! !
-
-!JavaResolver methodsFor:'method resolving'!
-
 resolveMethodIndentifiedByRef:aJavaMethodRef 
-    | result  class |
+    | result class selector search |
 
     self validateMethodRef:aJavaMethodRef.
-    result := self lookupMethodIfAlreadyResolved:aJavaMethodRef.
-    result notNil ifTrue:[
-        ^ result
-    ].
+
     class := aJavaMethodRef classRef resolve:false.
     class isNil ifTrue:[
         self error:'should not happen - tell mh'
     ].
-     "Array types responds to all method of class java.lang.Object"
+    "Array types responds to all method of class java.lang.Object"
     class isJavaArrayClass ifTrue:[
         class := JavaVM classForName:'java.lang.Object'.
     ].
      "
      To resolve an unresolved symbolic reference from D to a method in
      a class C, the symbolic reference to C given by the method reference
-     is first resolved (§5.4.3.1). Therefore, any exceptions that can be
+     is first resolved (5.4.3.1). Therefore, any exceptions that can be
      thrown due to resolution of a class reference can be thrown as a result
      of method resolution. If the reference to C can be successfully resolved,
      exceptions relating to the resolution of the method reference itself
@@ -571,23 +570,41 @@
     class isInterface ifTrue:[
         self throwIncompatibleClassChangeError
     ].
-     "Method resolution attempts to look up the referenced method in C and its
+    "Method resolution attempts to look up the referenced method in C and its
      superclasses:
      If C declares a method with the name and descriptor specified by the method
      reference, method lookup succeeds.
      Otherwise, if C has a superclass, step 2 of method lookup is recursively
-     invoked on the direct superclass of C.
-     
-     Otherwise, method lookup attempts to locate the referenced method in any of
+     invoked on the direct superclass of C."
+    search := class.
+    selector := aJavaMethodRef nameAndType selector.
+    [ search notNil and:[result isNil] ] whileTrue:[
+        result := search compiledMethodAt: selector.
+        search := search superclass.
+    ].
+    "Otherwise, method lookup attempts to locate the referenced method in any of
      the superinterfaces of the specified class C.
      If any superinterface of C declares a method with the name and descriptor
-     specified by the method reference, method lookup succeeds.
-     Otherwise, method lookup fails.
+     specified by the method reference, method lookup succeeds."
+    result isNil ifTrue:[ 
+        | queue |
+
+        queue := OrderedCollection withAll: class allInterfaces.
+        [ result isNil and:[queue notEmpty ] ] whileTrue:[ 
+            search := queue removeFirst.
+            result := search compiledMethodAt: selector.
+            result isNil ifTrue:[ 
+                search interfaces do:[:interface | 
+                    (queue includes: interface) ifFalse:[ queue add: interface ].
+                ].
+            ].
+        ].
+    ].
+    "Otherwise, method lookup fails.
      If method lookup fails, method resolution throws a NoSuchMethodError. If method
      lookup succeeds and the method is abstract, but C is not abstract, method resolution
      throws an AbstractMethodError. Otherwise, if the referenced method is not accessible
-     (§5.4.4) to D, method resolution throws an IllegalAccessError."
-    result := class lookupMethodByNameAndType:aJavaMethodRef nameAndType.
+     (§5.4.4) to D, method resolution throws an IllegalAccessError."
     result isNil ifTrue:[
         self throwNoSuchMethodError
     ].
@@ -609,10 +626,10 @@
     "Created: / 11-04-2011 / 19:45:34 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
     "Modified: / 14-04-2011 / 00:01:34 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
     "Modified (format): / 01-12-2012 / 13:46:25 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
-    "Modified: / 04-08-2014 / 15:55:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 27-03-2016 / 22:19:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
-!JavaResolver methodsFor:'method resolving helpers'!
+!JavaResolver methodsFor:'method resolving-helpers'!
 
 checkPermissionsForMethod: aJavaMethod from: accessingJavaClass to: resolvedJavaClass    
     ^ self 
@@ -626,11 +643,16 @@
     "Modified: / 01-12-2012 / 13:46:58 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
 !
 
-lookupMethodIfAlreadyResolved: aJavaMethodRef 
-    ^ nil.
+validateInterfaceMethodRef: aJavaInterfaceMethodRef 
+    aJavaInterfaceMethodRef isJavaRef ifFalse: [
+        self error: 'I expected JavaRef instance as an argument'
+    ].
+    aJavaInterfaceMethodRef isJavaInterfaceMethodRef ifFalse: [
+        self error: 'I expected JavaMethodRef instance as an argument'
+    ].
 
-    "Created: / 11-04-2011 / 19:50:38 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
-    "Modified: / 13-04-2011 / 11:57:00 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+    "Created: / 13-04-2011 / 11:53:34 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+    "Modified: / 01-12-2012 / 13:46:20 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
 !
 
 validateMethodRef: aJavaMethodRef 
--- a/Make.proto	Wed Mar 23 19:45:10 2016 +0000
+++ b/Make.proto	Sun Mar 27 22:29:04 2016 +0100
@@ -116,7 +116,7 @@
 		sed -e "s/\"\$$SVN\-Revision:\".*\"\$$\"/\"\$$SVN-Revision:\"\'$$rev2\'\"\$$\"/g" $< > .stx_libjava.svn.st; \
 	fi
 	$(MAKE) CC="$(CLASSLIB_CC)" OPT="$(OPT)" SEPINITCODE="$(SEPINITCODE)" STC="$(STC)" STFILE=.stx_libjava.svn $(C_RULE);
-	sed -i -e "s/\".stx_libjava.svn.st\");/\"\stx_libjava.st\");/g" .stx_libjava.svn.c
+	sed -i -e "s/\".stx_libjava.svn.st\");/\"stx_libjava.st\");/g" .stx_libjava.svn.c
 	$(MAKE) .stx_libjava.svn.$(O)
 	@mv .stx_libjava.svn.$(O) stx_libjava.$(O)
 endif
@@ -126,9 +126,9 @@
 # Enforce recompilation of package definition class if Mercurial working
 # copy state changes. Together with --guessVersion it ensures that package
 # definition class always contains correct binary revision string.
-#ifneq (**NOHG**, $(shell hg root 2> /dev/null || echo -n '**NOHG**'))
-#stx_libjava.$(O): $(shell hg root)/.hg/dirstate
-#endif
+ifneq (**NOHG**, $(shell hg root 2> /dev/null || echo -n '**NOHG**'))
+stx_libjava.$(O): $(shell hg root)/.hg/dirstate
+endif
 
 
 
@@ -154,10 +154,10 @@
 
 # build all mandatory prerequisite packages (containing superclasses) for this package
 prereq:
-	cd ../libbasic && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
-	cd ../libbasic2 && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
-	cd ../libbasic3 && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
-	cd ../libview && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
+	cd ../libbasic && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+	cd ../libbasic2 && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+	cd ../libbasic3 && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+	cd ../libview && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 
 
 
@@ -219,7 +219,7 @@
 $(OUTDIR)JavaNioSupport.$(O) JavaNioSupport.$(H): JavaNioSupport.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)JavaObject.$(O) JavaObject.$(H): JavaObject.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)JavaObjectDictionary.$(O) JavaObjectDictionary.$(H): JavaObjectDictionary.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)JavaPopUpView.$(O) JavaPopUpView.$(H): JavaPopUpView.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/PopUpView.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/TopView.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(STCHDR)
+$(OUTDIR)JavaPopUpView.$(O) JavaPopUpView.$(H): JavaPopUpView.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/PopUpView.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/TopView.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(STCHDR)
 $(OUTDIR)JavaProcess.$(O) JavaProcess.$(H): JavaProcess.st $(INCLUDE_TOP)/stx/libbasic/Link.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/Process.$(H) $(STCHDR)
 $(OUTDIR)JavaRef2.$(O) JavaRef2.$(H): JavaRef2.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)JavaRelease.$(O) JavaRelease.$(H): JavaRelease.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -230,12 +230,12 @@
 $(OUTDIR)JavaSourceCodeCache.$(O) JavaSourceCodeCache.$(H): JavaSourceCodeCache.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)JavaSourceFileWriter.$(O) JavaSourceFileWriter.$(H): JavaSourceFileWriter.st $(INCLUDE_TOP)/stx/libbasic/AbstractSourceFileWriter.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)JavaTestsLoader.$(O) JavaTestsLoader.$(H): JavaTestsLoader.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)JavaTopView.$(O) JavaTopView.$(H): JavaTopView.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/StandardSystemView.$(H) $(INCLUDE_TOP)/stx/libview/TopView.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(STCHDR)
+$(OUTDIR)JavaTopView.$(O) JavaTopView.$(H): JavaTopView.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/StandardSystemView.$(H) $(INCLUDE_TOP)/stx/libview/TopView.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(STCHDR)
 $(OUTDIR)JavaUnresolvedCompilationError.$(O) JavaUnresolvedCompilationError.$(H): JavaUnresolvedCompilationError.st $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)JavaUnresolvedConstant.$(O) JavaUnresolvedConstant.$(H): JavaUnresolvedConstant.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)JavaUtilities.$(O) JavaUtilities.$(H): JavaUtilities.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)JavaVMData.$(O) JavaVMData.$(H): JavaVMData.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
-$(OUTDIR)JavaView.$(O) JavaView.$(H): JavaView.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(STCHDR)
+$(OUTDIR)JavaView.$(O) JavaView.$(H): JavaView.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(STCHDR)
 $(OUTDIR)JavaZipDeflater.$(O) JavaZipDeflater.$(H): JavaZipDeflater.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)JavaZipFile.$(O) JavaZipFile.$(H): JavaZipFile.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic2/ZipArchive.$(H) $(STCHDR)
 $(OUTDIR)JavaZipInflater.$(O) JavaZipInflater.$(H): JavaZipInflater.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -263,7 +263,7 @@
 $(OUTDIR)JavaClassRegistry.$(O) JavaClassRegistry.$(H): JavaClassRegistry.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic3/SystemEnvironment.$(H) $(INCLUDE_TOP)/stx/libjava/JavaClassEnvironment.$(H) $(INCLUDE_TOP)/stx/libjava/JavaVMData.$(H) $(STCHDR)
 $(OUTDIR)JavaCodeBundle.$(O) JavaCodeBundle.$(H): JavaCodeBundle.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libjava/JavaCodeLibraryOrBundle.$(H) $(STCHDR)
 $(OUTDIR)JavaCodeLibrary.$(O) JavaCodeLibrary.$(H): JavaCodeLibrary.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libjava/JavaCodeLibraryOrBundle.$(H) $(STCHDR)
-$(OUTDIR)JavaEmbeddedFrameView.$(O) JavaEmbeddedFrameView.$(H): JavaEmbeddedFrameView.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libjava/JavaView.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(STCHDR)
+$(OUTDIR)JavaEmbeddedFrameView.$(O) JavaEmbeddedFrameView.$(H): JavaEmbeddedFrameView.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libjava/JavaView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(STCHDR)
 $(OUTDIR)JavaFieldAnnotationContainer.$(O) JavaFieldAnnotationContainer.$(H): JavaFieldAnnotationContainer.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libjava/JavaAnnotationContainer.$(H) $(STCHDR)
 $(OUTDIR)JavaFieldDescriptor.$(O) JavaFieldDescriptor.$(H): JavaFieldDescriptor.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libjava/JavaDescriptor.$(H) $(STCHDR)
 $(OUTDIR)JavaFieldDescriptorWithUnionType.$(O) JavaFieldDescriptorWithUnionType.$(H): JavaFieldDescriptorWithUnionType.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libjava/JavaDescriptor.$(H) $(STCHDR)
--- a/extensions.st	Wed Mar 23 19:45:10 2016 +0000
+++ b/extensions.st	Sun Mar 27 22:29:04 2016 +0100
@@ -580,21 +580,6 @@
     "Created: / 31-07-2012 / 17:39:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
-!Class methodsFor:'accessing - java'!
-
-lookupMethodByNameAndType: nameAndType
-    | descriptor selector |
-
-    descriptor := JavaMethodDescriptor fromString: (nameAndType descriptor).
-    selector := nameAndType name copyReplaceAll: $_ with: $:.
-    descriptor numArgs > 0 ifTrue:[selector := selector , ':'].
-    selector := selector asSymbol.
-
-    ^self lookupMethodFor: selector
-
-    "Created: / 22-08-2012 / 13:11:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-! !
-
 !ConfigurableFeatures class methodsFor:'queries-features'!
 
 hasJavaSupport
--- a/stx_libjava.st	Wed Mar 23 19:45:10 2016 +0000
+++ b/stx_libjava.st	Sun Mar 27 22:29:04 2016 +0100
@@ -613,7 +613,6 @@
         Class classLoader
         Method isAbstract
         Method javaClass
-        Class lookupMethodByNameAndType:
         Object getJavaLockWord
         Object getJavaMonitor
         Object javaWrapRequired