[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kdevelop-devel
Subject:    branches/kdevelop/3.4/languages/cpp
From:       Jens Dagerbo <jens.dagerbo () swipnet ! se>
Date:       2007-01-28 2:59:02
Message-ID: 1169953142.797445.27336.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 627774 by dagerbo:

New stuff: A useful basic type info display system in approx 60 lines of code - why \
don't we have this already?

CCMAIL: kdevelop-devel@kdevelop.org

 M  +56 -7     cppcodecompletion.cpp  
 M  +2 -0      cppcodecompletion.h  
 M  +10 -0     cppsupportpart.cpp  


--- branches/kdevelop/3.4/languages/cpp/cppcodecompletion.cpp #627773:627774
@@ -899,7 +899,7 @@
 void CppCodeCompletion::slotStatusTextTimeout() {
   if ( m_statusTextList.isEmpty() || !m_pSupport )
     return ;
-  m_pSupport->mainWindow() ->statusBar() ->message( m_statusTextList.front().second, \
m_statusTextList.front().first ); +//   m_pSupport->mainWindow() ->statusBar() \
->message( m_statusTextList.front().second, m_statusTextList.front().first );  \
m_showStatusTextTimer->start( m_statusTextList.front().first , true );  \
m_statusTextList.pop_front();  }
@@ -1951,14 +1951,14 @@
     if ( !ast ) {
       kdDebug( 9007 ) << "background-parser is missing the translation-unit. The \
file needs to be reparsed." << endl;  m_pSupport->parseFileAndDependencies( \
                m_activeFileName, true );
-	    m_pSupport->mainWindow() ->statusBar() ->message( i18n( "Background-parser is \
missing the necessary translation-unit. It will be computed, but this completion will \
fail." ).arg( m_activeFileName ), 2000 ); +// 	    m_pSupport->mainWindow() \
->statusBar() ->message( i18n( "Background-parser is missing the necessary \
translation-unit. It will be computed, but this completion will fail." ).arg( \
m_activeFileName ), 2000 );  return;
     } else {
       computeRecoveryPointsLocked();
     }
 	  if ( this->d->recoveryPoints.isEmpty() ) {
 		  kdDebug( 9007 ) << "Failed to compute recovery-points for " << m_activeFileName \
                << endl;
-		  m_pSupport->mainWindow() ->statusBar() ->message( i18n( "Failed to compute \
recovery-points for %1" ).arg( m_activeFileName ), 1000 ); +// 		  \
m_pSupport->mainWindow() ->statusBar() ->message( i18n( "Failed to compute \
recovery-points for %1" ).arg( m_activeFileName ), 1000 );  } else {
 		  kdDebug( 9007 ) << "successfully computed recovery-points for " << \
m_activeFileName << endl;  }
@@ -1972,7 +1972,7 @@
   FileDom file = m_pSupport->codeModel() ->fileByName( m_activeFileName );
 
   if ( !file ) {
-    m_pSupport->mainWindow() ->statusBar() ->message( i18n( "File %1 does not exist \
in the code-model" ).arg( m_activeFileName ), 1000 ); +//     \
m_pSupport->mainWindow() ->statusBar() ->message( i18n( "File %1 does not exist in \
                the code-model" ).arg( m_activeFileName ), 1000 );
     kdDebug( 9007 ) << "Error: file " << m_activeFileName << " could not be located \
in the code-model, code-completion stopped\n";  return SimpleType();
   }
@@ -2215,7 +2215,7 @@
   FileDom file = m_pSupport->codeModel() ->fileByName( m_activeFileName );
 
   if ( !file ) {
-    m_pSupport->mainWindow() ->statusBar() ->message( i18n( "File %1 does not exist \
in the code-model" ).arg( m_activeFileName ), 1000 ); +//     \
m_pSupport->mainWindow() ->statusBar() ->message( i18n( "File %1 does not exist in \
                the code-model" ).arg( m_activeFileName ), 1000 );
     kdDebug( 9007 ) << "Error: file " << m_activeFileName << " could not be located \
in the code-model, code-completion stopped\n";  return ;
   }
@@ -2864,7 +2864,7 @@
   if ( fileName != m_activeFileName || !m_pSupport || !m_activeEditor )
     return ;
 
-	m_pSupport->mainWindow() ->statusBar() ->message( i18n( "Current file updated %1" \
).arg( m_activeFileName ), 1000 ); +// 	m_pSupport->mainWindow() ->statusBar() \
->message( i18n( "Current file updated %1" ).arg( m_activeFileName ), 1000 );  
   computeRecoveryPointsLocked();
 }
@@ -2873,7 +2873,7 @@
   if ( fileName != m_activeFileName || !m_pSupport || !m_activeEditor )
     return ;
 
-	m_pSupport->mainWindow() ->statusBar() ->message( i18n( "Current file parsed %1 \
(cache emptied)" ).arg( m_activeFileName ), 1000 ); +// 	m_pSupport->mainWindow() \
->statusBar() ->message( i18n( "Current file parsed %1 (cache emptied)" ).arg( \
m_activeFileName ), 1000 );  
   emptyCache(); ///The cache has to be emptied, because the code-model changed. \
@todo Better: Only refresh the code-model(tell all code-model-types to refresh \
themselves on demand)  
@@ -4233,7 +4233,56 @@
 	}
 }
 
+QString CppCodeCompletion::createTypeInfoString( int line, int column ) 
+{
+	QString typeInfoString;
+	
+	SimpleTypeConfiguration conf( m_activeFileName );
+	EvaluationResult type = evaluateExpressionAt( line, column, conf );
+	
+	if ( type.expr.expr().stripWhiteSpace().isEmpty() )
+		return typeInfoString;
+	
+	typeInfoString += type.expr.expr() + QString(" : " );
+	
+	if ( type->resolved() ) 
+	{ 
+		QString scope = type->resolved()->scope().join("::");
+		int pos = scope.findRev("::");
+		if ( scope.isEmpty() || pos == -1 )
+		{
+			scope = "::";
+		}
+		else
+		{
+			scope.truncate( pos + 2 );
+		}
+		
+		typeInfoString += scope + type->fullNameChain()  + QString( i18n(" (resolved) ") \
); +	}
+	else
+	{
+		if ( type ) 
+		{
+			if( !BuiltinTypes::isBuiltin( type.resultType ) ) 
+			{
+				typeInfoString += type->fullNameChain() + QString( i18n(" (unresolved) ") );
+			} 
+			else 
+			{
+				typeInfoString += type->fullNameChain() + ", " + BuiltinTypes::comment( \
type.resultType ) + QString( i18n(" (builtin type) ") ); +			}
+		}
+		else
+		{
+			typeInfoString += QString( i18n(" (unresolved) ") );
+		}
+	}
+	return typeInfoString;
+}
 
+
+
 #include "cppcodecompletion.moc"
 //kate: indent-mode csands; tab-width 2; space-indent off;
 
--- branches/kdevelop/3.4/languages/cpp/cppcodecompletion.h #627773:627774
@@ -124,6 +124,8 @@
 		return m_completionMode;
 	}
 
+	QString createTypeInfoString( int line, int column );
+	
     QString replaceCppComments( const QString& contents );
     int expressionAt( const QString& text, int index );
 	QStringList splitExpression( const QString& text );
--- branches/kdevelop/3.4/languages/cpp/cppsupportpart.cpp #627773:627774
@@ -40,6 +40,7 @@
 #include "kdevsourceformatter.h"
 #include "kdevcreatefile.h"
 #include "qtbuildconfig.h"
+#include "kdeveditorutil.h"
 #include <ktexteditor/viewcursorinterface.h>
 #include <kpopupmenu.h>
 // wizards
@@ -2582,6 +2583,15 @@
 
 void CppSupportPart::slotCursorPositionChanged()
 {
+	if ( codeCompletion() )
+	{
+		unsigned int line;
+		unsigned int column;
+		KDevEditorUtil::currentPositionReal( &line, &column, \
dynamic_cast<KTextEditor::Document*>( partController()->activePart() ) ); +		QString \
typeInfoString = codeCompletion()->createTypeInfoString( line, column ); \
+		mainWindow()->statusBar()->message( typeInfoString ); +	}
+	
 	//    m_functionHintTimer->changeInterval( 1000 );
 	if ( splitHeaderSourceConfig()->splitEnabled()
 	     && splitHeaderSourceConfig()->autoSync() )

_______________________________________________
KDevelop-devel mailing list
KDevelop-devel@kdevelop.org
https://barney.cs.uni-potsdam.de/mailman/listinfo/kdevelop-devel


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic