@ -109,9 +109,11 @@ namespace Hornung.ResourceToolkit.Refactoring
TextLocation docPos = doc . OffsetToPosition ( pos ) ;
TextLocation docPos = doc . OffsetToPosition ( pos ) ;
ResourceResolveResult rrr = ResourceResolverService . Resolve ( fileName , doc , docPos . Y , docPos . X , null ) ;
ResourceResolveResult rrr = ResourceResolverService . Resolve ( fileName , doc , docPos . Y , docPos . X , null ) ;
if ( rrr ! = null & & rrr . ResourceFileContent ! = null & & rrr . Key ! = null ) {
if ( rrr ! = null & & rrr . ResourceFileContent ! = null ) {
if ( finder . IsReferenceToResource ( rrr ) ) {
if ( finder . IsReferenceToResource ( rrr ) ) {
if ( rrr . Key ! = null ) {
// The actual location of the key string may be after 'pos' because
// The actual location of the key string may be after 'pos' because
// the resolvers may find an expression just before it.
// the resolvers may find an expression just before it.
string keyString = rrr . Key ;
string keyString = rrr . Key ;
@ -131,6 +133,10 @@ namespace Hornung.ResourceToolkit.Refactoring
references . Add ( new Reference ( fileName , keyPos , keyString . Length , keyString , rrr ) ) ;
references . Add ( new Reference ( fileName , keyPos , keyString . Length , keyString , rrr ) ) ;
}
}
} else {
references . Add ( new Reference ( fileName , pos , 0 , null , rrr ) ) ;
}
}
}
}
}
@ -216,15 +222,22 @@ namespace Hornung.ResourceToolkit.Refactoring
// Generate a dictonary of resource file names and the
// Generate a dictonary of resource file names and the
// corresponding referenced keys.
// corresponding referenced keys.
Dictionary < string , List < string > > referencedKeys = new Dictionary < string , List < string > > ( ) ;
Dictionary < string , List < string > > referencedKeys = new Dictionary < string , List < string > > ( ) ;
Dictionary < string , List < string > > referencedPrefixes = new Dictionary < string , List < string > > ( ) ;
foreach ( Reference reference in references ) {
foreach ( Reference reference in references ) {
ResourceResolveResult rrr = ( ResourceResolveResult ) reference . ResolveResult ;
ResourceResolveResult rrr = ( ResourceResolveResult ) reference . ResolveResult ;
if ( rrr . ResourceFileContent ! = null ) {
if ( rrr . ResourceFileContent ! = null ) {
string fileName = rrr . FileName ;
string fileName = rrr . FileName ;
if ( ! referencedKeys . ContainsKey ( fileName ) ) {
if ( ! referencedKeys . ContainsKey ( fileName ) ) {
referencedKeys . Add ( fileName , new List < string > ( ) ) ;
referencedKeys . Add ( fileName , new List < string > ( ) ) ;
referencedPrefixes . Add ( fileName , new List < string > ( ) ) ;
}
}
if ( rrr . Key ! = null & & ! referencedKeys [ fileName ] . Contains ( rrr . Key ) ) {
if ( rrr . Key ! = null & & ! referencedKeys [ fileName ] . Contains ( rrr . Key ) ) {
referencedKeys [ fileName ] . Add ( rrr . Key ) ;
referencedKeys [ fileName ] . Add ( rrr . Key ) ;
} else {
ResourcePrefixResolveResult rprr = rrr as ResourcePrefixResolveResult ;
if ( rprr ! = null & & rprr . Prefix ! = null & & ! referencedPrefixes [ fileName ] . Contains ( rprr . Prefix ) ) {
referencedPrefixes [ fileName ] . Add ( rprr . Prefix ) ;
}
}
}
} else {
} else {
if ( monitor ! = null ) monitor . ShowingDialog = true ;
if ( monitor ! = null ) monitor . ShowingDialog = true ;
@ -239,7 +252,8 @@ namespace Hornung.ResourceToolkit.Refactoring
LoggingService . Debug ( "ResourceToolkit: FindUnusedKeys: Referenced resource file '" + fileName + "'" ) ;
LoggingService . Debug ( "ResourceToolkit: FindUnusedKeys: Referenced resource file '" + fileName + "'" ) ;
#endif
#endif
foreach ( KeyValuePair < string , object > entry in ResourceFileContentRegistry . GetResourceFileContent ( fileName ) . Data ) {
foreach ( KeyValuePair < string , object > entry in ResourceFileContentRegistry . GetResourceFileContent ( fileName ) . Data ) {
if ( ! referencedKeys [ fileName ] . Contains ( entry . Key ) ) {
if ( ! referencedKeys [ fileName ] . Contains ( entry . Key ) & &
! referencedPrefixes [ fileName ] . Any ( prefix = > entry . Key . StartsWith ( prefix , StringComparison . InvariantCultureIgnoreCase ) ) ) {
unused . Add ( new ResourceItem ( fileName , entry . Key ) ) ;
unused . Add ( new ResourceItem ( fileName , entry . Key ) ) ;
}
}
}
}