### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.core Index: model/org/eclipse/jdt/internal/core/BufferManager.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/BufferManager.java,v retrieving revision 1.27 diff -u -r1.27 BufferManager.java --- model/org/eclipse/jdt/internal/core/BufferManager.java 6 Mar 2007 02:38:49 -0000 1.27 +++ model/org/eclipse/jdt/internal/core/BufferManager.java 9 May 2007 15:34:57 -0000 @@ -72,6 +72,15 @@ owner, element.isReadOnly()); } +public static IBuffer createNullBuffer(IOpenable owner) { + IJavaElement element = (IJavaElement)owner; + IResource resource = element.getResource(); + return + new NullBuffer( + resource instanceof IFile ? (IFile)resource : null, + owner, + element.isReadOnly()); +} /** * Returns the open buffer associated with the given owner, * or null if the owner does not have an open Index: model/org/eclipse/jdt/internal/core/Openable.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/Openable.java,v retrieving revision 1.111 diff -u -r1.111 Openable.java --- model/org/eclipse/jdt/internal/core/Openable.java 29 Mar 2006 03:08:47 -0000 1.111 +++ model/org/eclipse/jdt/internal/core/Openable.java 9 May 2007 15:34:57 -0000 @@ -258,6 +258,9 @@ // try to (re)open a buffer buffer = openBuffer(null, info); } + if (buffer instanceof NullBuffer) { + return null; + } return buffer; } else { return null; Index: model/org/eclipse/jdt/internal/core/ClassFile.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ClassFile.java,v retrieving revision 1.134 diff -u -r1.134 ClassFile.java --- model/org/eclipse/jdt/internal/core/ClassFile.java 6 Mar 2007 02:38:49 -0000 1.134 +++ model/org/eclipse/jdt/internal/core/ClassFile.java 9 May 2007 15:34:57 -0000 @@ -354,7 +354,7 @@ // .class file not on classpath, create a new buffer to be nice (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=41444) Object info = ((ClassFile) getClassFile()).getBinaryTypeInfo((IFile) getResource()); IBuffer buffer = openBuffer(null, info); - if (buffer != null) + if (buffer != null && !(buffer instanceof NullBuffer)) return buffer; if (status.getCode() == IJavaModelStatusConstants.ELEMENT_NOT_ON_CLASSPATH) return null; // don't throw a JavaModelException to be able to open .class file outside the classpath (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=138507) @@ -633,21 +633,30 @@ if (buffer == null) return null; BufferManager bufManager = getBufferManager(); bufManager.addBuffer(buffer); - + // set the buffer source if (buffer.getCharacters() == null){ buffer.setContents(contents); } - + // listen to buffer changes - buffer.addBufferChangedListener(this); - + buffer.addBufferChangedListener(this); + // do the source mapping mapper.mapSource(getType(), contents, info); - + + return buffer; + } else { + // create buffer + IBuffer buffer = BufferManager.createNullBuffer(this); + if (buffer == null) return null; + BufferManager bufManager = getBufferManager(); + bufManager.addBuffer(buffer); + + // listen to buffer changes + buffer.addBufferChangedListener(this); return buffer; } - return null; } /* package */ static String simpleName(char[] className) { if (className == null) Index: model/org/eclipse/jdt/internal/core/NullBuffer.java =================================================================== RCS file: model/org/eclipse/jdt/internal/core/NullBuffer.java diff -N model/org/eclipse/jdt/internal/core/NullBuffer.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ model/org/eclipse/jdt/internal/core/NullBuffer.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,28 @@ +/******************************************************************************* + * Copyright (c) 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ + +package org.eclipse.jdt.internal.core; + +import org.eclipse.core.resources.IFile; +import org.eclipse.jdt.core.IOpenable; + +/** + * @author othomann + * + */ +public class NullBuffer extends Buffer { + /** + * Creates a new null buffer on an underlying resource. + */ + public NullBuffer(IFile file, IOpenable owner, boolean readOnly) { + super(file, owner, readOnly); + } +}