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

List:       kde-commits
Subject:    KDE/kdevplatform/language/duchain
From:       David Nolden <david.nolden.kde () art-master ! de>
Date:       2008-05-31 22:53:19
Message-ID: 1212274399.586039.20889.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 815016 by zwabel:

Performance improvement: Remove unneeded and unused matching code, which also called \
qualifiedIdentifier() which is slow



 M  +7 -95     ducontext.cpp  
 M  +2 -2      ducontext.h  


--- trunk/KDE/kdevplatform/language/duchain/ducontext.cpp #815015:815016
@@ -422,26 +422,21 @@
   return d_func()->m_propagateDeclarations;
 }
 
-QList<Declaration*> DUContext::findLocalDeclarations( const QualifiedIdentifier& \
identifier, const SimpleCursor & position, const TopDUContext* topContext, const \
AbstractType::Ptr& dataType, bool allowUnqualifiedMatch, SearchFlags flags ) const \
+QList<Declaration*> DUContext::findLocalDeclarations( const QualifiedIdentifier& \
identifier, const SimpleCursor & position, const TopDUContext* topContext, const \
AbstractType::Ptr& dataType, SearchFlags flags ) const  {
   ENSURE_CAN_READ
 
   QList<Declaration*> ret;
-  findLocalDeclarationsInternal(identifier, position.isValid() ? position : \
range().end, dataType, allowUnqualifiedMatch, ret, topContext ? \
topContext->importTrace(this->topContext()) : ImportTrace(), flags); +  \
findLocalDeclarationsInternal(identifier, position.isValid() ? position : \
range().end, dataType, ret, topContext ? topContext->importTrace(this->topContext()) \
: ImportTrace(), flags);  return ret;
 }
 
-void DUContext::findLocalDeclarationsInternal( const QualifiedIdentifier& \
identifier, const SimpleCursor & position, const AbstractType::Ptr& dataType, bool \
allowUnqualifiedMatch, QList<Declaration*>& ret, const ImportTrace& trace, \
SearchFlags flags ) const +void DUContext::findLocalDeclarationsInternal( const \
QualifiedIdentifier& identifier, const SimpleCursor & position, const \
AbstractType::Ptr& dataType, QList<Declaration*>& ret, const ImportTrace& trace, \
SearchFlags flags ) const  {
   Q_D(const DUContext);
   if( identifier.explicitlyGlobal() && parentContext() )
     return;
 
-  ///@todo use flags
-  QLinkedList<Declaration*> tryToResolve;
-  QLinkedList<Declaration*> ensureResolution;
-  QList<Declaration*> resolved;
-
   {
      QMutexLocker lock(&DUContextPrivate::m_localDeclarationsMutex);
     Identifier lastIdentifier = identifier.last();
@@ -463,94 +458,11 @@
       if((flags & OnlyFunctions) && \
!dynamic_cast<AbstractFunctionDeclaration*>(declaration))  continue;
       
-      QualifiedIdentifier::MatchTypes m = \
                identifier.match(declaration->identifier());
-      switch (m) {
-        case QualifiedIdentifier::NoMatch:
-          continue;
-
-        case QualifiedIdentifier::EndsWith:
-          // identifier is a more complete specification...
-          // Try again with a qualified definition identifier
-          ensureResolution.append(declaration);
-          continue;
-
-      case QualifiedIdentifier::TargetEndsWith : ///NOTE: This cannot happen, \
                because declaration() identifier is of type Identifier
-          // definition is a more complete specification...
-          if (!allowUnqualifiedMatch)
-            tryToResolve.append(declaration);
-          else
-            resolved.append(declaration);
-          continue;
-
-        case QualifiedIdentifier::ExactMatch:
-          if (!allowUnqualifiedMatch)
-            ensureResolution.append(declaration);
-          else
-            resolved.append(declaration);
-          continue;
-      }
+      if (!dataType || dataType == declaration->abstractType())
+        if (type() == Class || type() == Template || position > \
declaration->range().start || !position.isValid()) ///@todo This is C++-specific +    \
ret.append(declaration);  }
   }
-
-  foreach (Declaration* declaration, resolved)
-    if (!dataType || dataType == declaration->abstractType())
-      if (type() == Class || type() == Template || position > \
                declaration->range().start || !position.isValid()) ///@todo This is \
                C++-specific
-        ret.append(declaration);
-
-  if (tryToResolve.isEmpty() && ensureResolution.isEmpty())
-    return;
-
-  QMutableLinkedListIterator<Declaration*> it = ensureResolution;
-  while (it.hasNext()) {
-    QualifiedIdentifier::MatchTypes m = \
                identifier.match(it.next()->qualifiedIdentifier());
-    switch (m) {
-      case QualifiedIdentifier::NoMatch:
-      case QualifiedIdentifier::EndsWith:
-        break;
-
-      case QualifiedIdentifier::TargetEndsWith:
-      case QualifiedIdentifier::ExactMatch:
-        resolved.append(it.value());
-        break;
-    }
-  }
-
-  foreach (Declaration* declaration, resolved)
-    if (!dataType || dataType == declaration->abstractType())
-      if (type() == Class || position >= declaration->range().start || \
                !position.isValid()) ///@todo This is C++-specific
-        ret.append(declaration);
-
-  if (!ret.isEmpty())
-    // Match(es)
-    return;
-
-  it = tryToResolve;
-  while (it.hasNext()) {
-    QualifiedIdentifier::MatchTypes m = \
                identifier.match(it.next()->qualifiedIdentifier());
-    switch (m) {
-      case QualifiedIdentifier::NoMatch:
-      case QualifiedIdentifier::EndsWith:
-        break;
-
-      case QualifiedIdentifier::TargetEndsWith:
-      case QualifiedIdentifier::ExactMatch:
-        resolved.append(it.value());
-        break;
-    }
-  }
-
-  foreach (Declaration* declaration, resolved)
-    if (!dataType || dataType == declaration->abstractType())
-      if (type() == Class || position >= declaration->range().start || \
                !position.isValid()) ///@todo This is C++-specific
-        ret.append(declaration);
-
-  //if (!ret.isEmpty())
-    // Match(es)... don't need to check, returning anyway
-
-
-  // TODO: namespace abbreviations
-
-  return;
 }
 
 bool DUContext::foundEnough( const QList<Declaration*>& ret ) const {
@@ -565,7 +477,7 @@
   Q_D(const DUContext);
   if( type() != Namespace ) { //If we're in a namespace, delay all the searching \
into the top-context, because only that has the overview to pick the correct \
declarations.  foreach( const QualifiedIdentifier& identifier, baseIdentifiers )
-        findLocalDeclarationsInternal(identifier, position, dataType, flags & \
InImportedParentContext, ret, trace, flags); +        \
findLocalDeclarationsInternal(identifier, position, dataType, ret, trace, flags);  
     if( foundEnough(ret) )
       return true;
--- trunk/KDE/kdevplatform/language/duchain/ducontext.h #815015:815016
@@ -295,7 +295,7 @@
    *
    * Does not search imported parent-contexts(like base-classes).
    */
-  QList<Declaration*> findLocalDeclarations(const QualifiedIdentifier& identifier, \
const SimpleCursor& position = SimpleCursor::invalid(), const TopDUContext* \
topContext = 0, const AbstractType::Ptr& dataType = AbstractType::Ptr(), bool \
allowUnqualifiedMatch = false, SearchFlags flags = NoSearchFlags) const; +  \
QList<Declaration*> findLocalDeclarations(const QualifiedIdentifier& identifier, \
const SimpleCursor& position = SimpleCursor::invalid(), const TopDUContext* \
topContext = 0, const AbstractType::Ptr& dataType = AbstractType::Ptr(), SearchFlags \
flags = NoSearchFlags) const;  
   /**
    * Clears all local declarations. Does not delete the declaration; the caller
@@ -494,7 +494,7 @@
   /// Logic for calculating the fully qualified scope name
   QualifiedIdentifier scopeIdentifierInternal(DUContext* context) const;
 
-  virtual void findLocalDeclarationsInternal( const QualifiedIdentifier& identifier, \
const SimpleCursor & position, const AbstractType::Ptr& dataType, bool \
allowUnqualifiedMatch, QList<Declaration*>& ret, const ImportTrace& trace, \
SearchFlags flags ) const; +  virtual void findLocalDeclarationsInternal( const \
QualifiedIdentifier& identifier, const SimpleCursor & position, const \
AbstractType::Ptr& dataType, QList<Declaration*>& ret, const ImportTrace& trace, \
SearchFlags flags ) const;  
   /// Context search implementation
   virtual void findContextsInternal(ContextType contextType, const \
QList<QualifiedIdentifier>& identifier, const SimpleCursor& position, \
QList<DUContext*>& ret, SearchFlags flags = NoSearchFlags) const;


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

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