Bug 365465 - NPE in BinaryTypeBinding.cachePartsFrom
Summary: NPE in BinaryTypeBinding.cachePartsFrom
Status: VERIFIED WORKSFORME
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.5.2   Edit
Hardware: PC Mac OS X - Carbon (unsup.)
: P3 normal (vote)
Target Milestone: 3.8 M4   Edit
Assignee: Ayushman Jain CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-12-02 13:28 EST by Sebastian Zarnekow CLA
Modified: 2011-12-05 08:17 EST (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Sebastian Zarnekow CLA 2011-12-02 13:28:09 EST
This happens when I try to create a hierarchy search scope for java.util.ArrayList and google.guava is on the class path of the current project.

The code that throws the NPE is

if (methodDescriptor != null) {
	MethodBinding enclosingMethod = findMethod(methodDescriptor, missingTypeNames);
	typeVars = enclosingMethod.typeVariables;
}

where the enclosingMethod is null.

Any idea for a workaround is highly appreciated.

The problematic type seems to be com.google.common.collect.StandardTable$Row$RowEntrySet$1 which is a private inner class in a private inner class:

    private class RowEntrySet extends Maps.EntrySet<C, V> {
      @Override
      Map<C, V> map() {
        return Row.this;
      }

      @Override
      public int size() {
        Map<C, V> map = backingRowMap();
        return (map == null) ? 0 : map.size();
      }

      @Override
      public Iterator<Entry<C, V>> iterator() {
        final Map<C, V> map = backingRowMap();
        if (map == null) {
          return Iterators.emptyModifiableIterator();
        }
        final Iterator<Entry<C, V>> iterator = map.entrySet().iterator();
        return new Iterator<Entry<C, V>>() {
          @Override public boolean hasNext() {
            return iterator.hasNext();
          }
          @Override public Entry<C, V> next() {
            final Entry<C, V> entry = iterator.next();
            return new ForwardingMapEntry<C, V>() {
              @Override protected Entry<C, V> delegate() {
                return entry;
              }
              @Override public V setValue(V value) {
                return super.setValue(checkNotNull(value));
              }
              @Override
              public boolean equals(Object object) {
                // TODO(user): identify why this affects GWT tests
                return standardEquals(object);
              }
            };
          }

          @Override
          public void remove() {
            iterator.remove();
            maintainEmptyInvariant();
          }
        };
      }
    }


java.lang.NullPointerException
	at org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.cachePartsFrom(BinaryTypeBinding.java:305)
	at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.createBinaryTypeFrom(LookupEnvironment.java:640)
	at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.cacheBinaryType(LookupEnvironment.java:177)
	at org.eclipse.jdt.internal.core.hierarchy.HierarchyResolver.resolve(HierarchyResolver.java:713)
	at org.eclipse.jdt.internal.core.hierarchy.IndexBasedHierarchyBuilder.buildForProject(IndexBasedHierarchyBuilder.java:226)
	at org.eclipse.jdt.internal.core.hierarchy.IndexBasedHierarchyBuilder.buildFromPotentialSubtypes(IndexBasedHierarchyBuilder.java:306)
	at org.eclipse.jdt.internal.core.hierarchy.IndexBasedHierarchyBuilder.build(IndexBasedHierarchyBuilder.java:131)
	at org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy.compute(TypeHierarchy.java:300)
	at org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy.refresh(TypeHierarchy.java:1255)
	at org.eclipse.jdt.internal.core.CreateTypeHierarchyOperation.executeOperation(CreateTypeHierarchyOperation.java:90)
	at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:728)
	at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:788)
	at org.eclipse.jdt.internal.core.BinaryType.newTypeHierarchy(BinaryType.java:917)
	at org.eclipse.jdt.internal.core.search.HierarchyScope.initialize(HierarchyScope.java:327)
	at org.eclipse.jdt.internal.core.search.HierarchyScope.encloses(HierarchyScope.java:229)

This one seems to be related:

java.lang.NullPointerException
	at org.eclipse.jdt.core.dom.DefaultBindingResolver.resolveType(DefaultBindingResolver.java:1542)
	at org.eclipse.jdt.core.dom.Type.resolveBinding(Type.java:181)
	at org.eclipse.jdt.internal.ui.search.ImplementOccurrencesFinder.initialize(ImplementOccurrencesFinder.java:114)
	at org.eclipse.jdt.internal.ui.javaeditor.JavaEditor.updateOccurrenceAnnotations(JavaEditor.java:3324)
	at org.eclipse.jdt.internal.ui.javaeditor.JavaEditor$ActivationListener.windowActivated(JavaEditor.java:1267)
	at org.eclipse.ui.internal.Workbench$14.run(Workbench.java:1007)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.ui.internal.Workbench.fireWindowActivated(Workbench.java:1005)
	at org.eclipse.ui.internal.WorkbenchWindow$28.shellActivated(WorkbenchWindow.java:3141)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:88)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4129)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1457)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1480)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1461)
	at org.eclipse.swt.widgets.Shell.windowDidBecomeKey(Shell.java:2102)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:5524)
	at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method)
	at org.eclipse.swt.widgets.Widget.callSuper(Widget.java:213)
	at org.eclipse.swt.widgets.Widget.becomeKeyWindow(Widget.java:361)
	at org.eclipse.swt.widgets.Shell.becomeKeyWindow(Shell.java:533)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:5348)
	at org.eclipse.swt.internal.cocoa.OS.objc_msgSend(Native Method)
	at org.eclipse.swt.internal.cocoa.NSWindow.close(NSWindow.java:54)
	at org.eclipse.swt.widgets.Shell.destroyWidget(Shell.java:773)
	at org.eclipse.swt.widgets.Widget.release(Widget.java:1309)
	at org.eclipse.swt.widgets.Control.release(Control.java:2817)
	at org.eclipse.swt.widgets.Widget.dispose(Widget.java:662)
	at org.eclipse.jface.window.Window.close(Window.java:335)
	at org.eclipse.jface.dialogs.Dialog.close(Dialog.java:979)
	at org.eclipse.ui.internal.statushandlers.InternalDialog.close(InternalDialog.java:710)
	at org.eclipse.jface.dialogs.Dialog.okPressed(Dialog.java:940)
	at org.eclipse.jface.dialogs.Dialog.buttonPressed(Dialog.java:472)
	at org.eclipse.ui.internal.statushandlers.InternalDialog.buttonPressed(InternalDialog.java:190)
	at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:624)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:240)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4129)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1457)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1480)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1465)
	at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1270)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3975)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3614)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665)
	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499)
	at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:352)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:624)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:579)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1431)
Comment 1 Stephan Herrmann CLA 2011-12-02 14:15:57 EST
3.5.2? wow :)
Have you tried this using a more recent version?
Comment 2 Sebastian Zarnekow CLA 2011-12-03 03:29:20 EST
(In reply to comment #1)
> 3.5.2? wow :)
> Have you tried this using a more recent version?

Hmm seems to work fine with 3.8.x

Any hint on where to put a reasonable try { } catch for 3.5.2?
Comment 3 Sebastian Zarnekow CLA 2011-12-05 07:10:13 EST
(In reply to comment #1)
> 3.5.2? wow :)
> Have you tried this using a more recent version?

3.6.2 works fine, too. Please feel free to close it.
Comment 4 Ayushman Jain CLA 2011-12-05 08:16:49 EST
Closing
Comment 5 Ayushman Jain CLA 2011-12-05 08:17:35 EST
Marking as verified for 3.8M4 since the submitter has already verified with 3.6.2 and 3.8