IntelliJ IDEA 12 not finding CodeIgniter classes, throwing errors

codeigniter, ide, intellij-idea, php

Solution

I solved this by following this guide. It was meant for PHPStorm but works for IntelliJ IDEA as well (probably WebStorm too!). It was very simple, actually. A basic recap:

- Saved the following PHP code in my project root. It's basically just a PHPDoc comment:

    <?php  die('This file is not really here!');

    /**
     * ------------- DO NOT UPLOAD THIS FILE TO LIVE SERVER ---------------------
     *
     * Implements code completion for CodeIgniter in phpStorm
     * phpStorm indexes all class constructs, so if this file is in the project it will be loaded.
     * -------------------------------------------------------------------
     * Drop the following file into a CI project in phpStorm
     * You can put it in the project root and phpStorm will load it.
     * (If phpStorm doesn't load it, try closing the project and re-opening it)
     * 
     * Under system/core/
     * Right click on Controller.php and set Mark as Plain Text
     * Do the same for Model.php
     * -------------------------------------------------------------------
     * This way there is no editing of CI core files for this simple layer of code completion.
     *
     * PHP version 5
     *
     * LICENSE: GPL http://www.gnu.org/copyleft/gpl.html
     *
     * Created 1/28/12, 11:06 PM
     *
     * @category
     * @package    CodeIgniter CI_phpStorm.php
     * @author     Jeff Behnke
     * @copyright  2009-11 Valid-Webs.com
     * @license    GPL http://www.gnu.org/copyleft/gpl.html
     * @version    2012.01.28
     */

    /**
     * @property CI_DB_active_record $db              This is the platform-independent base Active Record implementation class.
     * @property CI_DB_forge $dbforge                 Database Utility Class
     * @property CI_Benchmark $benchmark              This class enables you to mark points and calculate the time difference between them.  Memory consumption can also be displayed.
     * @property CI_Calendar $calendar                This class enables the creation of calendars
     * @property CI_Cart $cart                        Shopping Cart Class
     * @property CI_Config $config                    This class contains functions that enable config files to be managed
     * @property CI_Controller $controller            This class object is the super class that every library in.CodeIgniter will be assigned to.
     * @property CI_Email $email                      Permits email to be sent using Mail, Sendmail, or SMTP.
     * @property CI_Encrypt $encrypt                  Provides two-way keyed encoding using XOR Hashing and Mcrypt
     * @property CI_Exceptions $exceptions            Exceptions Class
     * @property CI_Form_validation $form_validation  Form Validation Class
     * @property CI_Ftp $ftp                          FTP Class
     * @property CI_Hooks $hooks                      Provides a mechanism to extend the base system without hacking.
     * @property CI_Image_lib $image_lib              Image Manipulation class
     * @property CI_Input $input                      Pre-processes global input data for security
     * @property CI_Lang $lang                        Language Class
     * @property CI_Loader $load                      Loads views and files
     * @property CI_Log $log                          Logging Class
     * @property CI_Model $model                      CodeIgniter Model Class
     * @property CI_Output $output                    Responsible for sending final output to browser
     * @property CI_Pagination $pagination            Pagination Class
     * @property CI_Parser $parser                    Parses pseudo-variables contained in the specified template view,replacing them with the data in the second param
     * @property CI_Profiler $profiler                This class enables you to display benchmark, query, and other datain order to help with debugging and optimization.
     * @property CI_Router $router                    Parses URIs and determines routing
     * @property CI_Session $session                  Session Class
     * @property CI_Sha1 $sha1                        Provides 160 bit hashing using The Secure Hash Algorithm
     * @property CI_Table $table                      HTML table generationLets you create tables manually or from database result objects, or arrays.
     * @property CI_Trackback $trackback              Trackback Sending/Receiving Class
     * @property CI_Typography $typography            Typography Class
     * @property CI_Unit_test $unit_test              Simple testing class
     * @property CI_Upload $upload                    File Uploading Class
     * @property CI_URI $uri                          Parses URIs and determines routing
     * @property CI_User_agent $user_agent            Identifies the platform, browser, robot, or mobile devise of the browsing agent
     * @property CI_Validation $validation            //dead
     * @property CI_Xmlrpc $xmlrpc                    XML-RPC request handler class
     * @property CI_Xmlrpcs $xmlrpcs                  XML-RPC server class
     * @property CI_Zip $zip                          Zip Compression Class
     * @property CI_Javascript $javascript            Javascript Class
     * @property CI_Jquery $jquery                    Jquery Class
     * @property CI_Utf8 $utf8                        Provides support for UTF-8 environments
     * @property CI_Security $security                Security Class, xss, csrf, etc...
     */
    class CI_Controller{}

    /**
     * @property CI_DB_active_record $db              This is the platform-independent base Active Record implementation class.
     * @property CI_DB_forge $dbforge                 Database Utility Class
     * @property CI_Benchmark $benchmark              This class enables you to mark points and calculate the time difference between them.  Memory consumption can also be displayed.
     * @property CI_Calendar $calendar                This class enables the creation of calendars
     * @property CI_Cart $cart                        Shopping Cart Class
     * @property CI_Config $config                    This class contains functions that enable config files to be managed
     * @property CI_Controller $controller            This class object is the super class that every library in.CodeIgniter will be assigned to.
     * @property CI_Email $email                      Permits email to be sent using Mail, Sendmail, or SMTP.
     * @property CI_Encrypt $encrypt                  Provides two-way keyed encoding using XOR Hashing and Mcrypt
     * @property CI_Exceptions $exceptions            Exceptions Class
     * @property CI_Form_validation $form_validation  Form Validation Class
     * @property CI_Ftp $ftp                          FTP Class
     * @property CI_Hooks $hooks                      Provides a mechanism to extend the base system without hacking.
     * @property CI_Image_lib $image_lib              Image Manipulation class
     * @property CI_Input $input                      Pre-processes global input data for security
     * @property CI_Lang $lang                        Language Class
     * @property CI_Loader $load                      Loads views and files
     * @property CI_Log $log                          Logging Class
     * @property CI_Model $model                      CodeIgniter Model Class
     * @property CI_Output $output                    Responsible for sending final output to browser
     * @property CI_Pagination $pagination            Pagination Class
     * @property CI_Parser $parser                    Parses pseudo-variables contained in the specified template view,replacing them with the data in the second param
     * @property CI_Profiler $profiler                This class enables you to display benchmark, query, and other datain order to help with debugging and optimization.
     * @property CI_Router $router                    Parses URIs and determines routing
     * @property CI_Session $session                  Session Class
     * @property CI_Sha1 $sha1                        Provides 160 bit hashing using The Secure Hash Algorithm
     * @property CI_Table $table                      HTML table generationLets you create tables manually or from database result objects, or arrays.
     * @property CI_Trackback $trackback              Trackback Sending/Receiving Class
     * @property CI_Typography $typography            Typography Class
     * @property CI_Unit_test $unit_test              Simple testing class
     * @property CI_Upload $upload                    File Uploading Class
     * @property CI_URI $uri                          Parses URIs and determines routing
     * @property CI_User_agent $user_agent            Identifies the platform, browser, robot, or mobile devise of the browsing agent
     * @property CI_Validation $validation            //dead
     * @property CI_Xmlrpc $xmlrpc                    XML-RPC request handler class
     * @property CI_Xmlrpcs $xmlrpcs                  XML-RPC server class
     * @property CI_Zip $zip                          Zip Compression Class
     * @property CI_Javascript $javascript            Javascript Class
     * @property CI_Jquery $jquery                    Jquery Class
     * @property CI_Utf8 $utf8                        Provides support for UTF-8 environments
     * @property CI_Security $security                Security Class, xss, csrf, etc...
     */
    class CI_Model{}

2. Found `/system/core/controller.php` and `/system/core/model.php` inside of IntelliJ IDEA and right clicked->Mark as Plain Text.

3. Done! It works great, no more false errors, and code completion!

Problem

I'm using IntelliJ IDEA 12 to develop a PHP web application using the CodeIgniter framework. Due to the way CI instantiates objects and methods, IDEA thinks they don't exist when they're called: As you can see, I get those annoying orange squigglies under every single CodeIgniter class/method I try to use. Here's the code for the `CI_Controller` class, giving some insight into how they're creating the objects: ``` class CI_Controller { private static $instance; /** * Constructor */ public function __construct() { self::$instance =& $this; // Assign all the class objects that were instantiated by the // bootstrap file (CodeIgniter.php) to local class variables // so that CI can run as one big super object. foreach (is_loaded() as $var => $class) { $this->$var =& load_class($class); } $this->load =& load_class('Loader', 'core'); $this->load->initialize(); log_message('debug', "Controller Class Initialized"); } public static function &get_instance() { return self::$instance; } } ``` Is there any way I can get IntelliJ IDEA to either ignore these errors (but not other errors), or get it to find the objects on its own? Note: I used to use PHPStorm, a PHP IDE build on the IntelliJ IDEA platform, and it did the same thing when it came to CodeIgniter.

Original source