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

List:       kde-commits
Subject:    branches/kdevelop/3.4/languages/cpp
From:       Jens Dagerbo <jens.dagerbo () swipnet ! se>
Date:       2007-02-14 23:10:27
Message-ID: 1171494627.019588.23930.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 633711 by dagerbo:

Further improvement of "jump to declaration", now it includes types as well.

Again, patch by Kris Wong. 

 M  +39 -2     cppcodecompletion.cpp  


--- branches/kdevelop/3.4/languages/cpp/cppcodecompletion.cpp #633710:633711
@@ -4207,7 +4207,7 @@
 {
 	if ( !m_activeCursor ) return;
 	
-	SimpleTypeConfiguration conf( m_activeFileName );	
+	SimpleTypeConfiguration conf( m_activeFileName );
 	
 	unsigned int line;
 	unsigned int column;
@@ -4221,11 +4221,48 @@
 		LocateResult type = result.resultType;
 		if ( type && type->resolved() )
 		{
-			if ( type->resolved()->asFunction() )
+			if ( type->resolved()->isNamespace() )
 			{
+				SimpleTypeCachedNamespace * ns = dynamic_cast<SimpleTypeCachedNamespace*>( \
type->resolved().data() ); +				if ( ns )
+				{
+					SimpleTypeNamespace::SlaveList slaves = ns->getSlaves( getIncludeFiles() );
+					if ( slaves.begin() != slaves.end() )
+					{
+						SimpleTypeCodeModel* cm = dynamic_cast<SimpleTypeCodeModel*>( ( \
*slaves.begin() ).first.first.resolved().data() ); +						if ( cm && cm->item() )
+						{
+							SimpleTypeCachedCodeModel* t = new SimpleTypeCachedCodeModel( cm->item() );
+							d = t->desc().resolved()->getDeclarationInfo();
+						}
+						else
+						{
+							SimpleTypeNamespace* cn = dynamic_cast<SimpleTypeNamespace*>( ( \
*slaves.begin() ).first.first.resolved().data() ); +							if ( cn )
+							{
+								TypePointer t = new SimpleTypeNamespace( cn ); //To avoid endless recursion, \
this needs to be done(the dynamic-cast above fails) +								d = \
t->desc().resolved()->getDeclarationInfo(); +							}
+						}
+					}
+				}
+			}
+			else
+			{
 				d = type->resolved()->getDeclarationInfo();
 			}
 		}
+		else if ( type && type.trace() )
+		{
+			QValueList< QPair<SimpleTypeImpl::MemberInfo, TypeDesc> > trace = \
type.trace()->trace(); +			if ( !trace.isEmpty() )
+			{
+				if ( trace.begin() != trace.end() )
+				{
+					d = (*trace.begin()).first.decl;
+				}
+			}
+		}
 	}
 	if ( d )
 	{


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

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