Example usage for org.eclipse.jdt.core IBuffer addBufferChangedListener

List of usage examples for org.eclipse.jdt.core IBuffer addBufferChangedListener

Introduction

In this page you can find the example usage for org.eclipse.jdt.core IBuffer addBufferChangedListener.

Prototype

public void addBufferChangedListener(IBufferChangedListener listener);

Source Link

Document

Adds the given listener for changes to this buffer.

Usage

From source file:com.codenvy.ide.ext.java.server.internal.core.ClassFile.java

License:Open Source License

/** Loads the buffer via SourceMapper, and maps it in SourceMapper */
private IBuffer mapSource(SourceMapper mapper, IBinaryType info, IClassFile bufferOwner) {
    char[] contents = mapper.findSource(getType(), info);
    if (contents != null) {
        // create buffer
        IBuffer buffer = BufferManager.createBuffer(bufferOwner);
        if (buffer == null)
            return null;
        BufferManager bufManager = getBufferManager();
        bufManager.addBuffer(buffer);//from  w  w  w . j ava2 s .c  o  m

        // set the buffer source
        if (buffer.getCharacters() == null) {
            buffer.setContents(contents);
        }

        // listen to buffer changes
        buffer.addBufferChangedListener(this);

        // do the source mapping
        mapper.mapSource(getOuterMostEnclosingType(), contents, info);

        return buffer;
    } else {
        // create buffer
        IBuffer buffer = BufferManager.createNullBuffer(bufferOwner);
        if (buffer == null)
            return null;
        BufferManager bufManager = getBufferManager();
        bufManager.addBuffer(buffer);

        // listen to buffer changes
        buffer.addBufferChangedListener(this);
        return buffer;
    }
}

From source file:com.codenvy.ide.ext.java.server.internal.core.CompilationUnit.java

License:Open Source License

/**
 * @see Openable#openBuffer(org.eclipse.core.runtime.IProgressMonitor, Object)
 *///  w  ww  .  j  a v a  2 s  . c  o m
protected IBuffer openBuffer(IProgressMonitor pm, Object info) throws JavaModelException {

    // create buffer
    BufferManager bufManager = getBufferManager();
    boolean isWorkingCopy = isWorkingCopy();
    IBuffer buffer = isWorkingCopy ? this.owner.createBuffer(this) : BufferManager.createBuffer(this);
    if (buffer == null)
        return null;

    ICompilationUnit original = null;
    boolean mustSetToOriginalContent = false;
    if (isWorkingCopy) {
        // ensure that isOpen() is called outside the bufManager synchronized block
        // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=237772
        mustSetToOriginalContent = !isPrimary()
                && (original = new CompilationUnit((PackageFragment) getParent(), manager, getElementName(),
                        DefaultWorkingCopyOwner.PRIMARY)).isOpen();
    }

    // synchronize to ensure that 2 threads are not putting 2 different buffers at the same time
    // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=146331
    synchronized (bufManager) {
        IBuffer existingBuffer = bufManager.getBuffer(this);
        if (existingBuffer != null)
            return existingBuffer;

        // set the buffer source
        if (buffer.getCharacters() == null) {
            if (isWorkingCopy) {
                if (mustSetToOriginalContent) {
                    buffer.setContents(original.getSource());
                } else {
                    File file = resource();
                    if (file == null || !file.exists()) {
                        // initialize buffer with empty contents
                        buffer.setContents(CharOperation.NO_CHAR);
                    } else {
                        buffer.setContents(Util.getResourceContentsAsCharArray(file));
                    }
                }
            } else {
                File file = resource();
                if (file == null || !file.exists())
                    throw newNotPresentException();
                buffer.setContents(Util.getResourceContentsAsCharArray(file));
            }
        }

        // add buffer to buffer cache
        // note this may cause existing buffers to be removed from the buffer cache, but only primary compilation unit's buffer
        // can be closed, thus no call to a client's IBuffer#close() can be done in this synchronized block.
        bufManager.addBuffer(buffer);

        // listen to buffer changes
        buffer.addBufferChangedListener(this);
    }
    return buffer;
}

From source file:org.caesarj.ui.javamodel.JavaCompatibleBuffer.java

License:Open Source License

public JavaCompatibleBuffer(IBuffer real, IBuffer fake) {
    realBuffer = real;
    fakeBuffer = fake;
    real.addBufferChangedListener(this);

}

From source file:org.codehaus.jdt.groovy.model.GroovyClassFileWorkingCopy.java

License:Open Source License

/**
 * @see Openable#openBuffer(IProgressMonitor, Object)
 *///from  ww w.  ja  v a  2 s .c o  m
protected IBuffer openBuffer(IProgressMonitor pm, Object info) throws JavaModelException {

    // create buffer
    IBuffer buffer = this.owner.createBuffer(this);
    if (buffer == null)
        return null;

    // set the buffer source
    if (buffer.getCharacters() == null) {
        IBuffer classFileBuffer = this.classFile.getBuffer();
        if (classFileBuffer != null) {
            buffer.setContents(classFileBuffer.getCharacters());
        } else {
            // Disassemble
            IClassFileReader reader = ToolFactory.createDefaultClassFileReader(this.classFile,
                    IClassFileReader.ALL);
            Disassembler disassembler = new Disassembler();
            String contents = disassembler.disassemble(reader, Util.getLineSeparator("", getJavaProject()), //$NON-NLS-1$
                    ClassFileBytesDisassembler.WORKING_COPY);
            buffer.setContents(contents);
        }
    }

    // add buffer to buffer cache
    BufferManager bufManager = getBufferManager();

    // GROOVY Change access to private member
    // old
    // bufManager.addBuffer(buffer);
    // new
    if (buffer.getContents() != null) {
        ReflectionUtils.executePrivateMethod(BufferManager.class, "addBuffer", new Class<?>[] { IBuffer.class }, //$NON-NLS-1$
                bufManager, new Object[] { buffer });
    }
    // GROOVY End

    // listen to buffer changes
    buffer.addBufferChangedListener(this);

    return buffer;
}

From source file:org.eclipse.jdt.internal.core.CompilationUnit.java

License:Open Source License

/**
 * @see Openable#openBuffer(IProgressMonitor, Object)
 *///from w w  w .j av  a 2 s .c o  m
protected IBuffer openBuffer(IProgressMonitor pm, Object info) throws JavaModelException {

    // create buffer
    BufferManager bufManager = getBufferManager();
    boolean isWorkingCopy = isWorkingCopy();
    IBuffer buffer = isWorkingCopy ? this.owner.createBuffer(this) : BufferManager.createBuffer(this);
    if (buffer == null)
        return null;

    ICompilationUnit original = null;
    boolean mustSetToOriginalContent = false;
    if (isWorkingCopy) {
        // ensure that isOpen() is called outside the bufManager synchronized block
        // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=237772
        // GROOVY start
        /* old {
        mustSetToOriginalContent = !isPrimary() && (original = new CompilationUnit((PackageFragment)getParent(), getElementName(), DefaultWorkingCopyOwner.PRIMARY)).isOpen() ;
        } new */
        mustSetToOriginalContent = !isPrimary()
                && (original = LanguageSupportFactory.newCompilationUnit((PackageFragment) getParent(),
                        getElementName(), DefaultWorkingCopyOwner.PRIMARY)).isOpen();
        // GROOVY end
    }

    // synchronize to ensure that 2 threads are not putting 2 different buffers at the same time
    // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=146331
    synchronized (bufManager) {
        IBuffer existingBuffer = bufManager.getBuffer(this);
        if (existingBuffer != null)
            return existingBuffer;

        // set the buffer source
        if (buffer.getCharacters() == null) {
            if (isWorkingCopy) {
                if (mustSetToOriginalContent) {
                    buffer.setContents(original.getSource());
                } else {
                    IFile file = (IFile) getResource();
                    if (file == null || !file.exists()) {
                        // initialize buffer with empty contents
                        buffer.setContents(CharOperation.NO_CHAR);
                    } else {
                        buffer.setContents(Util.getResourceContentsAsCharArray(file));
                    }
                }
            } else {
                IFile file = (IFile) getResource();
                if (file == null || !file.exists())
                    throw newNotPresentException();
                buffer.setContents(Util.getResourceContentsAsCharArray(file));
            }
        }

        // add buffer to buffer cache
        // note this may cause existing buffers to be removed from the buffer cache, but only primary compilation unit's buffer
        // can be closed, thus no call to a client's IBuffer#close() can be done in this synchronized block.
        bufManager.addBuffer(buffer);

        // listen to buffer changes
        buffer.addBufferChangedListener(this);
    }
    return buffer;
}