Child pages
  • IntelliJ IDEA Architectural Overview
Skip to end of metadata
Go to start of metadata

Redirection Notice





  1. Anonymous

    Oh yeah, this ROCKS! Woo Hoo! High quality documentation of the Plug-in architecture.... get your fork, because you're going to eat it, Eclipse.

  2. Anonymous

    "Also, document instances not linked to any virtual files can be created temporarily, for example, to represent the contents of a text editor field in a dialog."

     What's the recommended method to do this (both 5.1 and 6.0 API)?

    1. EditorFactory.createDocument(). That hasn't changed between 5.1 and 6.0.

  3. Any changes done to the content of PSI files are reflected in documents,

    I think I've seen a change between the behavior in 5.x and 6.0: In 5.0, inside a WriteAction, PSI changes have been directly commited to the document, whereas in 6.0 the changes (and their formatting) seem to be deferred until the WriteAction completes. Which means, that e.g. if doing some PSI manipulation, the offsets returned from PSI elements will not be correct Document offsets until after the WriteAction, and after it, the PSI elements may not be valid any more (due to formatting). Did I get this right?

    1. This is correct, and this will be documented in detail in the section covering PSI elements (currently unwritten).

      1. If you need to commit a change to the document prior to the write action being complete (like if you need to make multiple edits and need to recalculate the offsets of subsequent elements) use this code after each edit (like a call to insertString())

  4. Jay

    I only want to say that this really important and awaited documentation was last updated more than 4 months ago.

    Dear Dmitry, please continue!

  5. Please write how do we create new PSI elements, and how do we move them. When I try to remove XmlTag elements from parent tag, sort them and add them again I get assertion error, because they are not valid anymore.

  6. Is it worth mentioning in the threading section that the performAction method of AnAction runs on the EVT?

    Also, is there a way to detect if the current thread is the EVT? Something like SwingUtilities.isEventDispatchThread or SWT's display.getThread()?

      1. Sorry, let me rephrase...

        I think it would benifit the documentation if you added performAction method of AnAction runs on the EVT in the threading section and how to check if your running on the EVT.

  7. Am I right that if 2 PSIFile's represent one file in one project, then it'll the same object? If not will they equal?

    1. If both are valid, then it should be the same object. If one of them is obsolete (has become invalid), then it will be different from the currently valid PsiFile.