core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/api/sdk/SymbianBuildContextDataCache.java
author stechong
Fri, 11 Jun 2010 12:09:52 -0500
branchC3_BUILDER_WORK
changeset 1462 b38491fd06da
parent 1434 79471fd1fd69
child 1471 62024a5fa81d
permissions -rw-r--r--
More ISymbianSDK refactoring.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
743
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
     1
/*
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
     3
* All rights reserved.
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
     4
* This component and the accompanying materials are made available
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
     5
* under the terms of the License "Eclipse Public License v1.0"
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
     6
* which accompanies this distribution, and is available
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
     8
*
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
     9
* Initial Contributors:
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    11
*
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    12
*/
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    13
package com.nokia.carbide.cpp.internal.api.sdk;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    14
788
e6e4e53ddc17 Add buffering to cache files to fix bug #10318 and bug #10533
Ed Swartz <ed.swartz@nokia.com>
parents: 743
diff changeset
    15
import java.io.BufferedInputStream;
e6e4e53ddc17 Add buffering to cache files to fix bug #10318 and bug #10533
Ed Swartz <ed.swartz@nokia.com>
parents: 743
diff changeset
    16
import java.io.BufferedOutputStream;
743
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    17
import java.io.File;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    18
import java.io.FileInputStream;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    19
import java.io.FileOutputStream;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    20
import java.io.IOException;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    21
import java.io.ObjectInputStream;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    22
import java.io.ObjectOutputStream;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    23
import java.io.ObjectStreamClass;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    24
import java.io.ObjectStreamException;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    25
import java.util.*;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    26
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    27
import org.eclipse.core.runtime.IPath;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    28
import org.eclipse.core.runtime.IStatus;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    29
import org.eclipse.core.runtime.Path;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    30
import org.eclipse.core.runtime.Platform;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    31
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    32
import com.nokia.carbide.cpp.epoc.engine.EpocEnginePlugin;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    33
import com.nokia.carbide.cpp.epoc.engine.model.sbv.ISBVView;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    34
import com.nokia.carbide.cpp.epoc.engine.preprocessor.*;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    35
import com.nokia.carbide.cpp.internal.sdk.core.model.SymbianSDK;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    36
import com.nokia.carbide.cpp.sdk.core.*;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    37
import com.nokia.carbide.internal.api.cpp.epoc.engine.preprocessor.BasicIncludeFileLocator;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    38
import com.nokia.carbide.internal.api.cpp.epoc.engine.preprocessor.MacroScanner;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    39
import com.nokia.cpp.internal.api.utils.core.ExternalFileInfoCollection;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    40
import com.nokia.cpp.internal.api.utils.core.FileUtils;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    41
import com.nokia.cpp.internal.api.utils.core.Logging;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    42
import com.nokia.cpp.internal.api.utils.core.ObjectUtils;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    43
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    44
/**
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    45
 * This class holds the externally gathered data for a build context,
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    46
 * such as the #include paths and macros defined in the SDK.
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    47
 * <p> 
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    48
 * Unlike CarbideBuildConfiguration (which, unfortunately extends 
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    49
 * SymbianBuildContext), this will not be created multiple times for
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    50
 * multiple projects, but only once for a different build context
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    51
 * in an SDK or devkit.
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    52
 */
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    53
public class SymbianBuildContextDataCache {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    54
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    55
	public static boolean DEBUG = false;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    56
	
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    57
	// by default, only check HRH-included files if changed in last second (for ordinary operations)
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    58
	// or the last minute (when doing a long project operation).  see #startThrottle() and #stopThrottle()
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    59
	private static final long DEFAULT_HRH_INFO_CHECK_QUANTUM = 1000; // 1 sec
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    60
	private static final long THROTTLED_HRH_INFO_CHECK_QUANTUM = 60000; // 60 sec
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    61
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    62
	// compiler prefixes are very unlikely to change, but we need to check
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    63
	// occasionally in case a user installs a new one...
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    64
	private static final long DEFAULT_COMPILER_PREFIX_INFO_CHECK_QUANTUM = 15 * 60 * 1000;	// 15 minutes
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    65
	
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    66
	// This is a count of times #startProjectOperation() was called without
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    67
	// balancing #endProjectOperation().  
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    68
	private static int inProjectOperationCount;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    69
	
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    70
	private static Map<String, SymbianBuildContextDataCache> cacheMap = new HashMap<String, SymbianBuildContextDataCache>();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    71
	
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    72
	public static synchronized SymbianBuildContextDataCache getCache(ISymbianBuildContext context) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    73
		// don't hash on ISymbianBuildContext itself since it is sometimes a ICarbideBuildConfiguration
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    74
		String key = getBuildContextKey(context);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    75
		
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    76
		SymbianBuildContextDataCache cache = cacheMap.get(key);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    77
		if (cache == null) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    78
			cache = new SymbianBuildContextDataCache(context);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    79
			cache.loadCacheFile();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    80
			cacheMap.put(key, cache);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    81
		}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    82
		return cache;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    83
	}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    84
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    85
	/**
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    86
	 * @param context
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    87
	 * @return
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    88
	 */
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    89
	private static String getBuildContextKey(ISymbianBuildContext context) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    90
		String key = context.getPlatformString() + "/" + context.getTargetString() + "/";
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    91
		ISymbianSDK sdk = context.getSDK();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    92
		if (sdk != null)
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    93
			key += sdk.getEPOCROOT();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    94
		return key;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    95
	}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    96
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    97
	//private File prefixFileParsed;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    98
	private List<File> hrhFilesParsed = new ArrayList<File>();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
    99
	private ExternalFileInfoCollection hrhFileInfo = null; 
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   100
	private List<IDefine> variantHRHMacros = new ArrayList<IDefine>();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   101
	private List<IDefine> compilerPrefixMacros = new ArrayList<IDefine>();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   102
	private ExternalFileInfoCollection compilerPrefixFileInfo = null; 
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   103
	private List<File> systemIncludes;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   104
	private ISymbianSDK sdk;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   105
	private IPath compilerPrefixFile;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   106
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   107
	private String platformString;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   108
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   109
	private String displayString;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   110
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   111
	private String contextKey;
1462
b38491fd06da More ISymbianSDK refactoring.
stechong
parents: 1434
diff changeset
   112
b38491fd06da More ISymbianSDK refactoring.
stechong
parents: 1434
diff changeset
   113
	private String builderId;
b38491fd06da More ISymbianSDK refactoring.
stechong
parents: 1434
diff changeset
   114
743
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   115
	private boolean changed;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   116
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   117
	private File cacheFile;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   118
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   119
	private SymbianBuildContextDataCache(ISymbianBuildContext context) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   120
		if (DEBUG) System.out.println("Creating cache for " + context.getDisplayString());
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   121
		this.platformString = context.getPlatformString();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   122
		this.displayString = context.getDisplayString();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   123
		this.sdk = context.getSDK();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   124
		this.contextKey = getBuildContextKey(context);
1462
b38491fd06da More ISymbianSDK refactoring.
stechong
parents: 1434
diff changeset
   125
		if (context instanceof ISBSv1BuildContext) {
b38491fd06da More ISymbianSDK refactoring.
stechong
parents: 1434
diff changeset
   126
			builderId = ISymbianBuilderID.SBSV1_BUILDER;
b38491fd06da More ISymbianSDK refactoring.
stechong
parents: 1434
diff changeset
   127
		} else {
b38491fd06da More ISymbianSDK refactoring.
stechong
parents: 1434
diff changeset
   128
			builderId = ISymbianBuilderID.SBSV2_BUILDER;
b38491fd06da More ISymbianSDK refactoring.
stechong
parents: 1434
diff changeset
   129
		}
743
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   130
	}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   131
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   132
	/* (non-Javadoc)
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   133
	 * @see java.lang.Object#toString()
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   134
	 */
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   135
	@Override
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   136
	public String toString() {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   137
		return "Cache for " + displayString;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   138
	}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   139
	
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   140
	public List<IDefine> getVariantHRHDefines() {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   141
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   142
		// we parse the variant hrh file to gather macros.  this can be time consuming so do it
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   143
		// once and cache the values.  only reset the cache when the hrh or any of its includes
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   144
		// has changed.
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   145
		
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   146
		boolean buildCache = false;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   147
		
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   148
		if (hrhFileInfo == null) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   149
			// hasn't been built yet, or was flushed
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   150
			buildCache = true;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   151
		} else {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   152
			// Cache exists.  See if any of the files have changed
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   153
			if (sdk != null && hrhFileInfo.anyChanged()) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   154
				buildCache = true;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   155
			}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   156
		}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   157
		
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   158
		if (buildCache) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   159
			gatherVariantHRHDefines();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   160
		}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   161
			
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   162
		return variantHRHMacros;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   163
	}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   164
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   165
	/**
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   166
	 * Re-gather the #defines from the variant HRH file 
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   167
	 */
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   168
	private void gatherVariantHRHDefines() {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   169
		changed = true;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   170
		variantHRHMacros.clear();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   171
		
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   172
		synchronized (this) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   173
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   174
			List<IDefine> macros = new ArrayList<IDefine>();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   175
			Map<String, IDefine> namedMacros = new HashMap<String, IDefine>();
1462
b38491fd06da More ISymbianSDK refactoring.
stechong
parents: 1434
diff changeset
   176
			File prefixFile = sdk.getPrefixFile(builderId);
743
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   177
			
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   178
			if (prefixFile == null){
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   179
				// Check that the prefix file may have become available since the SDK was scanned last.
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   180
				// This can happen, for e.g., if the user opens the IDE _then_ does a subst on a drive that already has an SDK entry.
1462
b38491fd06da More ISymbianSDK refactoring.
stechong
parents: 1434
diff changeset
   181
				ISDKBuildInfo buildInfo = sdk.getBuildInfo(builderId);
b38491fd06da More ISymbianSDK refactoring.
stechong
parents: 1434
diff changeset
   182
				IPath prefixCheck = buildInfo.getPrefixFromVariantCfg();
743
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   183
				if (prefixCheck != null){
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   184
					prefixFile = prefixCheck.toFile();
1462
b38491fd06da More ISymbianSDK refactoring.
stechong
parents: 1434
diff changeset
   185
					((SymbianSDK)sdk).setPrefixFile(prefixCheck, builderId);
743
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   186
				}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   187
			}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   188
			
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   189
			File[] includedFiles = null;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   190
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   191
			if (prefixFile != null) {
840
c92830672f75 Fix 10622. Always add epco32\include to search paths when preprocessing varint HRH
timkelly
parents: 788
diff changeset
   192
				
c92830672f75 Fix 10622. Always add epco32\include to search paths when preprocessing varint HRH
timkelly
parents: 788
diff changeset
   193
				List<File> systemPaths = new ArrayList<File>();
c92830672f75 Fix 10622. Always add epco32\include to search paths when preprocessing varint HRH
timkelly
parents: 788
diff changeset
   194
				// Always add epoc32/include to the search path as this is implicit for includes in the HRH
c92830672f75 Fix 10622. Always add epco32\include to search paths when preprocessing varint HRH
timkelly
parents: 788
diff changeset
   195
				systemPaths.add(new File(sdk.getEPOCROOT() + "epoc32/include"));
c92830672f75 Fix 10622. Always add epco32\include to search paths when preprocessing varint HRH
timkelly
parents: 788
diff changeset
   196
				
743
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   197
				// add any BSF/SBV includes so the headers are picked up from the correct location
1434
79471fd1fd69 First pass refactoring ISymbianSDK.
stechong
parents: 840
diff changeset
   198
				IBSFPlatform bsfPlat = null;
79471fd1fd69 First pass refactoring ISymbianSDK.
stechong
parents: 840
diff changeset
   199
				ISBVPlatform sbvPlat = null;
1462
b38491fd06da More ISymbianSDK refactoring.
stechong
parents: 1434
diff changeset
   200
				ISDKBuildInfo buildInfo = sdk.getBuildInfo(builderId);
b38491fd06da More ISymbianSDK refactoring.
stechong
parents: 1434
diff changeset
   201
				if (buildInfo instanceof ISBSv1BuildInfo) {
b38491fd06da More ISymbianSDK refactoring.
stechong
parents: 1434
diff changeset
   202
					ISBSv1BuildInfo sbsv1BuildInfo = (ISBSv1BuildInfo)buildInfo;
b38491fd06da More ISymbianSDK refactoring.
stechong
parents: 1434
diff changeset
   203
					bsfPlat = sbsv1BuildInfo.getBSFCatalog().findPlatform(platformString);
b38491fd06da More ISymbianSDK refactoring.
stechong
parents: 1434
diff changeset
   204
					sbvPlat = sbsv1BuildInfo.getSBVCatalog().findPlatform(platformString);
b38491fd06da More ISymbianSDK refactoring.
stechong
parents: 1434
diff changeset
   205
				} else {
b38491fd06da More ISymbianSDK refactoring.
stechong
parents: 1434
diff changeset
   206
					ISBSv2BuildInfo sbsv2BuildInfo = (ISBSv2BuildInfo)buildInfo;
b38491fd06da More ISymbianSDK refactoring.
stechong
parents: 1434
diff changeset
   207
					bsfPlat = sbsv2BuildInfo.getBSFCatalog().findPlatform(platformString);
b38491fd06da More ISymbianSDK refactoring.
stechong
parents: 1434
diff changeset
   208
					sbvPlat = sbsv2BuildInfo.getSBVCatalog().findPlatform(platformString);
1434
79471fd1fd69 First pass refactoring ISymbianSDK.
stechong
parents: 840
diff changeset
   209
				}
743
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   210
				if (bsfPlat != null) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   211
					for (IPath path : bsfPlat.getSystemIncludePaths()) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   212
						systemPaths.add(path.toFile());
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   213
					}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   214
				} else if (sbvPlat != null) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   215
					LinkedHashMap<IPath, String> platPaths = sbvPlat.getBuildIncludePaths();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   216
					Set<IPath> set = platPaths.keySet();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   217
					for (IPath path : set) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   218
						String pathType = platPaths.get(path);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   219
						if (pathType.equalsIgnoreCase(ISBVView.INCLUDE_FLAG_PREPEND) || pathType.equalsIgnoreCase(ISBVView.INCLUDE_FLAG_SET)){
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   220
							systemPaths.add(path.toFile());
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   221
						}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   222
					}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   223
				}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   224
				
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   225
				MacroScanner scanner = new MacroScanner(
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   226
						new BasicIncludeFileLocator(null, systemPaths.toArray(new File[systemPaths.size()])),
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   227
						DefaultModelDocumentProvider.getInstance(),
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   228
						DefaultTranslationUnitProvider.getInstance());
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   229
				scanner.scanFile(prefixFile);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   230
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   231
				List<IDefine> scannedMacros = (List<IDefine>)scanner.getMacroDefinitions();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   232
				for (IDefine scannedMacro : scannedMacros){
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   233
					// we don't want duplicate macros, so check to see if it's already there.
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   234
					// if it is, remove it and then add the newer one.  this is consistent with
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   235
					// how it would be from a compiler standpoint.
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   236
					IDefine macro = namedMacros.get(scannedMacro.getName());
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   237
					if (macro != null) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   238
						macros.remove(macro);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   239
					}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   240
					
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   241
					macros.add(scannedMacro);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   242
					namedMacros.put(scannedMacro.getName(), scannedMacro);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   243
				}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   244
				
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   245
				hrhFilesParsed.clear();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   246
				includedFiles = scanner.getIncludedFiles();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   247
				for (File inc : includedFiles) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   248
					hrhFilesParsed.add(inc);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   249
				}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   250
				
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   251
				List<String> variantCFGMacros = new ArrayList<String>();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   252
				variantCFGMacros = sdk.getVariantCFGMacros();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   253
				for (String cfgMacros : variantCFGMacros){
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   254
					// we don't want duplicate macros, so check to see if it's already there.
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   255
					IDefine existingMacro = namedMacros.get(cfgMacros);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   256
					if (existingMacro != null) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   257
						macros.remove(existingMacro);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   258
					}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   259
					
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   260
					IDefine macro = DefineFactory.createSimpleFreeformDefine(cfgMacros);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   261
					macros.add(macro);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   262
					namedMacros.put(macro.getName(), macro);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   263
				}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   264
			} 
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   265
			
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   266
			// cache the info about when we created the cache
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   267
			if (hrhFileInfo == null) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   268
				hrhFileInfo = new ExternalFileInfoCollection(
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   269
						EpocEnginePlugin.getExternalFileInfoCache(),
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   270
						includedFiles,
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   271
						DEFAULT_HRH_INFO_CHECK_QUANTUM);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   272
			} else {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   273
				hrhFileInfo.setFiles(includedFiles);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   274
			}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   275
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   276
			variantHRHMacros = macros;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   277
			saveCacheFile();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   278
		}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   279
	}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   280
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   281
	public List<File> getPrefixFileIncludes() {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   282
		return hrhFilesParsed;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   283
	}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   284
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   285
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   286
	public synchronized List<IDefine> getCompilerMacros(IPath prefixFile) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   287
		
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   288
		// we assume that the prefix file will not change often,
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   289
		// (if at all) for a build context, so dump the cache if the prefix file changes.
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   290
		
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   291
		if (compilerPrefixFile != null && !compilerPrefixFile.equals(prefixFile)) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   292
			compilerPrefixFileInfo = null;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   293
		}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   294
		
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   295
		compilerPrefixFile = prefixFile;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   296
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   297
		if (compilerPrefixFileInfo == null ||
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   298
				compilerPrefixFileInfo.anyChanged()) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   299
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   300
			changed = true;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   301
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   302
			compilerPrefixMacros.clear();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   303
			
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   304
			synchronized (this) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   305
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   306
				List<IDefine> macros = new ArrayList<IDefine>();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   307
				if (prefixFile != null) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   308
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   309
					List<File> userPaths = new ArrayList<File>();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   310
					List<File> systemPaths = new ArrayList<File>();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   311
					
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   312
					userPaths.add(prefixFile.removeLastSegments(1).toFile());
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   313
					systemPaths.add(prefixFile.removeLastSegments(1).toFile());
1462
b38491fd06da More ISymbianSDK refactoring.
stechong
parents: 1434
diff changeset
   314
					IPath includePath = sdk.getIncludePath();
743
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   315
					if (includePath != null) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   316
						File includeDir = includePath.toFile().getAbsoluteFile();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   317
						userPaths.add(includeDir);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   318
						systemPaths.add(includeDir);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   319
					}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   320
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   321
					
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   322
					// get macros from the compiler prefix file: note, this is a stupid
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   323
					// scan that will get the last version #defined, even if inside an #if.
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   324
					MacroScanner scanner = new MacroScanner(
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   325
							new BasicIncludeFileLocator(userPaths.toArray(new File[userPaths.size()]), systemPaths.toArray(new File[systemPaths.size()])),
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   326
							DefaultModelDocumentProvider.getInstance(), 
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   327
							DefaultTranslationUnitProvider.getInstance());
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   328
					scanner.scanFile(prefixFile.toFile());
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   329
					for (IDefine define : scanner.getMacroDefinitions()) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   330
						macros.add(define);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   331
					}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   332
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   333
					// store off the info about what we read for this cache
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   334
					File[] files = scanner.getIncludedFiles();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   335
					
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   336
					if (compilerPrefixFileInfo == null)
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   337
						compilerPrefixFileInfo = new ExternalFileInfoCollection(
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   338
								EpocEnginePlugin.getExternalFileInfoCache(),
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   339
								files,
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   340
								DEFAULT_COMPILER_PREFIX_INFO_CHECK_QUANTUM);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   341
					else
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   342
						compilerPrefixFileInfo.setFiles(files);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   343
				}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   344
				
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   345
				compilerPrefixMacros = macros;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   346
				
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   347
				saveCacheFile();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   348
			}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   349
		}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   350
			
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   351
		return compilerPrefixMacros;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   352
	}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   353
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   354
	/**
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   355
	 * Get the list of #include paths detected for this context.
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   356
	 * @return List or <code>null</code>
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   357
	 */
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   358
	public synchronized List<File> getSystemIncludePaths() {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   359
		if (systemIncludes == null) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   360
			gatherBuildContextSystemIncludePaths();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   361
		}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   362
		return systemIncludes;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   363
	}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   364
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   365
	/**
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   366
	 * Fetch the list of include paths for the build context
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   367
	 */
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   368
	private void gatherBuildContextSystemIncludePaths() {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   369
		changed = true;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   370
		
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   371
		systemIncludes = new ArrayList<File>();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   372
		
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   373
		if (DEBUG) System.out.println("Scanning include paths for " + displayString);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   374
		
1434
79471fd1fd69 First pass refactoring ISymbianSDK.
stechong
parents: 840
diff changeset
   375
		IBSFPlatform bsfplatform = null;
79471fd1fd69 First pass refactoring ISymbianSDK.
stechong
parents: 840
diff changeset
   376
		ISBVPlatform sbvPlatform = null;
1462
b38491fd06da More ISymbianSDK refactoring.
stechong
parents: 1434
diff changeset
   377
		ISDKBuildInfo buildInfo = sdk.getBuildInfo(builderId);
b38491fd06da More ISymbianSDK refactoring.
stechong
parents: 1434
diff changeset
   378
		if (buildInfo instanceof ISBSv1BuildInfo) {
b38491fd06da More ISymbianSDK refactoring.
stechong
parents: 1434
diff changeset
   379
			ISBSv1BuildInfo sbsv1BuildInfo = (ISBSv1BuildInfo)buildInfo;
b38491fd06da More ISymbianSDK refactoring.
stechong
parents: 1434
diff changeset
   380
			bsfplatform = sbsv1BuildInfo.getBSFCatalog().findPlatform(platformString);
b38491fd06da More ISymbianSDK refactoring.
stechong
parents: 1434
diff changeset
   381
			sbvPlatform = sbsv1BuildInfo.getSBVCatalog().findPlatform(platformString);
b38491fd06da More ISymbianSDK refactoring.
stechong
parents: 1434
diff changeset
   382
		} else {
b38491fd06da More ISymbianSDK refactoring.
stechong
parents: 1434
diff changeset
   383
			ISBSv2BuildInfo sbsv2BuildInfo = (ISBSv2BuildInfo)buildInfo;
b38491fd06da More ISymbianSDK refactoring.
stechong
parents: 1434
diff changeset
   384
			bsfplatform = sbsv2BuildInfo.getBSFCatalog().findPlatform(platformString);
b38491fd06da More ISymbianSDK refactoring.
stechong
parents: 1434
diff changeset
   385
			sbvPlatform = sbsv2BuildInfo.getSBVCatalog().findPlatform(platformString);
1434
79471fd1fd69 First pass refactoring ISymbianSDK.
stechong
parents: 840
diff changeset
   386
		}
743
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   387
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   388
		// look in the epoc32 directory of the SDK
1462
b38491fd06da More ISymbianSDK refactoring.
stechong
parents: 1434
diff changeset
   389
		IPath includePath = sdk.getIncludePath();
743
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   390
		if (includePath != null) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   391
			File includeDir = includePath.toFile().getAbsoluteFile();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   392
			File dir;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   393
			
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   394
			// get additional include directories from BSF platform, if defined
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   395
			if (bsfplatform != null) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   396
				IPath[] systemIncludePaths = bsfplatform.getSystemIncludePaths();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   397
				for (IPath path : systemIncludePaths) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   398
					dir = path.toFile();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   399
					if (dir.exists() && dir.isDirectory()) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   400
						systemIncludes.add(dir);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   401
					}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   402
				}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   403
			} else if (sbvPlatform != null){
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   404
				
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   405
				LinkedHashMap<IPath, String> platPaths = sbvPlatform.getBuildIncludePaths();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   406
				Set<IPath> set = platPaths.keySet();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   407
				for (IPath path : set) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   408
					String pathType = platPaths.get(path);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   409
					if (pathType.equalsIgnoreCase(ISBVView.INCLUDE_FLAG_PREPEND) || pathType.equalsIgnoreCase(ISBVView.INCLUDE_FLAG_SET)){
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   410
						dir = path.toFile();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   411
						systemIncludes.add(dir);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   412
					}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   413
				}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   414
			}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   415
			else {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   416
				// legacy behavior 
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   417
				if (platformString.equals(ISymbianBuildContext.EMULATOR_PLATFORM)) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   418
					dir = new File(includeDir, "wins"); //$NON-NLS-1$
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   419
					if (dir.exists() && dir.isDirectory()) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   420
						systemIncludes.add(dir);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   421
					}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   422
				}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   423
			}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   424
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   425
			// add OEM dir
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   426
			dir = new File(includeDir, "oem"); //$NON-NLS-1$
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   427
			if (dir.exists() && dir.isDirectory()) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   428
				systemIncludes.add(dir);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   429
			}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   430
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   431
			// and finally the normal include dir
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   432
			systemIncludes.add(includeDir);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   433
			
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   434
			// and finally, finally, if this is an SBV add any paths with the append flag
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   435
			if (sbvPlatform != null){
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   436
				
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   437
				Map<IPath, String> platPaths = sbvPlatform.getBuildIncludePaths();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   438
				Set<IPath> set = platPaths.keySet();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   439
				for (IPath path : set) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   440
					String pathType = platPaths.get(path);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   441
					if (pathType.equalsIgnoreCase(ISBVView.INCLUDE_FLAG_APPEND)){
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   442
						dir = path.toFile();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   443
						systemIncludes.add(dir);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   444
					}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   445
				}	
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   446
			}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   447
		}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   448
		
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   449
		// also search files in same folder as variant.hrh
1462
b38491fd06da More ISymbianSDK refactoring.
stechong
parents: 1434
diff changeset
   450
		File prefix = sdk.getPrefixFile(builderId);
743
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   451
		if (sbvPlatform != null){
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   452
			// might be an alternate HRH file to use
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   453
			IPath varVarHRH = sbvPlatform.getBuildVariantHRHFile();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   454
			if (!varVarHRH.toFile().equals(prefix) && varVarHRH.toFile().exists()){
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   455
				prefix = varVarHRH.toFile();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   456
			} 
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   457
		}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   458
		if (prefix != null) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   459
			systemIncludes.add(prefix.getParentFile());
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   460
		}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   461
		
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   462
		saveCacheFile();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   463
	}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   464
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   465
	/**
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   466
	 * Let cache know that the client is beginning an operation that
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   467
	 * will iterate all the build contexts.  We use this information
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   468
	 * to optimize file info checks.
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   469
	 * <p>
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   470
	 * Each call must be balanced by an {@link #endProjectOperation()} call.
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   471
	 * Use a try ... finally block to make sure.
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   472
	 */
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   473
	public static synchronized void startProjectOperation() {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   474
		inProjectOperationCount++;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   475
		if (inProjectOperationCount == 1) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   476
			for (SymbianBuildContextDataCache cache : cacheMap.values()) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   477
				cache.startThrottle();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   478
			}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   479
		}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   480
	}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   481
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   482
	/**
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   483
	 * Let cache know that a project-wide operation is done, so
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   484
	 * we can resume normal info checking behavior.
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   485
	 */
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   486
	public static synchronized void endProjectOperation() {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   487
		inProjectOperationCount--;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   488
		if (inProjectOperationCount < 0) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   489
			Logging.log(SDKCorePlugin.getDefault(), 
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   490
					Logging.newStatus(SDKCorePlugin.getDefault(), 
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   491
							new IllegalStateException("project operation count not balanced")));
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   492
			inProjectOperationCount = 0;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   493
		}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   494
		if (inProjectOperationCount == 0) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   495
			for (SymbianBuildContextDataCache cache : cacheMap.values()) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   496
				cache.stopThrottle();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   497
				cache.saveCacheFile();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   498
			}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   499
		}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   500
	}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   501
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   502
	/**
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   503
	 * Throttle file info checks on this cache if we suspect the same
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   504
	 * files will be checked over and over again in a short time (e.g. through
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   505
	 * multiple contexts on the same SDK).
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   506
	 */
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   507
	private void startThrottle() {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   508
		if (hrhFileInfo != null) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   509
			hrhFileInfo.setRecheckQuantum(THROTTLED_HRH_INFO_CHECK_QUANTUM);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   510
		}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   511
		// note: compiler prefix infos already have a long delay, but
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   512
		// this is a good place to refresh
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   513
		if (compilerPrefixFileInfo != null) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   514
			compilerPrefixFileInfo.refresh();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   515
		}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   516
	}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   517
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   518
	/**
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   519
	 * End file info throttling.
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   520
	 */
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   521
	private void stopThrottle() {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   522
		if (hrhFileInfo != null)
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   523
			hrhFileInfo.setRecheckQuantum(DEFAULT_HRH_INFO_CHECK_QUANTUM);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   524
		// note: compiler prefix infos already have a long delay
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   525
	}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   526
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   527
	/**
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   528
	 * Refresh the cached data when there are substantial changes in the given SDKs.
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   529
	 * 
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   530
	 * @param sdks SDKs for whose contexts the caches should be removed, or <code>null</code> for all of them
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   531
	 */
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   532
	public static synchronized void refreshForSDKs(ISymbianSDK[] sdks) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   533
		// refresh each context cache, meaning, delete its memory and disk values
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   534
		Collection<String> values = cacheMap.keySet();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   535
		String[] keyArray = (String[]) values.toArray(new String[values.size()]);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   536
		for (String key : keyArray) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   537
			SymbianBuildContextDataCache cache = cacheMap.get(key);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   538
			boolean forSDK = sdkInArray(sdks, cache.sdk);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   539
			if (forSDK) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   540
				cache.reset();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   541
				cacheMap.remove(key);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   542
			}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   543
		}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   544
	}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   545
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   546
	private static boolean sdkInArray(ISymbianSDK[] sdks, ISymbianSDK anSDK) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   547
		if (sdks == null)
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   548
			return true;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   549
		if (anSDK == null)
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   550
			return false;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   551
		// object identity is not appropriate; user may have renamed or moved an SDK
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   552
		for (ISymbianSDK sdk : sdks) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   553
			if (ObjectUtils.equals(sdk.getEPOCROOT(), anSDK.getEPOCROOT())
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   554
					|| ObjectUtils.equals(sdk.getUniqueId(), anSDK.getUniqueId()))
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   555
				return true;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   556
		}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   557
		return false;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   558
	}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   559
	
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   560
	/**
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   561
	 * Reset the cached data for this context, ensuring it will be
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   562
	 * freshly gathered.  This deletes anything stored on disk.
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   563
	 */
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   564
	public synchronized void reset() {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   565
		hrhFileInfo = null;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   566
		compilerPrefixFileInfo = null;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   567
		systemIncludes = null;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   568
		getCacheFile().delete();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   569
	}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   570
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   571
	/**
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   572
	 * Get the file where we store cached data
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   573
	 * @return File in workspace plugin state storage
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   574
	 */
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   575
	protected File getCacheFile() {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   576
		if (cacheFile == null) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   577
			IPath statePath;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   578
			if (Platform.isRunning())
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   579
				statePath = Platform.getStateLocation(SDKCorePlugin.getDefault().getBundle());
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   580
			else
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   581
				statePath = new Path(FileUtils.getTemporaryDirectory().getAbsolutePath());
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   582
			cacheFile = statePath.append(contextKey.replaceAll("[^A-Za-z0-9_]", "_") + ".dat").toFile(); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   583
		}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   584
		return cacheFile;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   585
	}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   586
	
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   587
	/**
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   588
	 * Save cache to disk if changed.
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   589
	 */
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   590
	protected void saveCacheFile() {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   591
		if (!changed)
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   592
			return;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   593
			
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   594
		ObjectOutputStream os = null;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   595
		try {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   596
			File cacheFile = getCacheFile();
788
e6e4e53ddc17 Add buffering to cache files to fix bug #10318 and bug #10533
Ed Swartz <ed.swartz@nokia.com>
parents: 743
diff changeset
   597
			if (DEBUG) System.out.print("Saving to " + cacheFile + "... "); //$NON-NLS-1$ //$NON-NLS-2$
e6e4e53ddc17 Add buffering to cache files to fix bug #10318 and bug #10533
Ed Swartz <ed.swartz@nokia.com>
parents: 743
diff changeset
   598
			os = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(cacheFile)));
743
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   599
			doSaveCache(os);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   600
			changed = false;
788
e6e4e53ddc17 Add buffering to cache files to fix bug #10318 and bug #10533
Ed Swartz <ed.swartz@nokia.com>
parents: 743
diff changeset
   601
			if (DEBUG) System.out.println("done."); //$NON-NLS-1$
743
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   602
		} catch (ObjectStreamException e) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   603
			Logging.log(SDKCorePlugin.getDefault(), 
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   604
					Logging.newStatus(SDKCorePlugin.getDefault(), 
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   605
							IStatus.WARNING,
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   606
							"Tried to save uncacheable data for " + displayString, //$NON-NLS-1$
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   607
							e));
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   608
		} catch (IOException e) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   609
			// oh well
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   610
			Logging.log(SDKCorePlugin.getDefault(), 
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   611
					Logging.newStatus(SDKCorePlugin.getDefault(), 
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   612
							IStatus.WARNING,
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   613
							"Failed to save cache state for " + displayString, //$NON-NLS-1$
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   614
							e));
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   615
		} finally {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   616
			if (os != null) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   617
				try {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   618
					os.close();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   619
				} catch (IOException e) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   620
				}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   621
			}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   622
		}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   623
	}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   624
	
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   625
	protected void loadCacheFile() {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   626
		ObjectInputStream is = null;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   627
		// Use the class loader that knows how to span plugins
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   628
		final ClassLoader classLoader = SDKCorePlugin.getDefault().getClass().getClassLoader();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   629
		File cacheFile = getCacheFile();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   630
		try {
788
e6e4e53ddc17 Add buffering to cache files to fix bug #10318 and bug #10533
Ed Swartz <ed.swartz@nokia.com>
parents: 743
diff changeset
   631
			is = new ObjectInputStream(new BufferedInputStream(new FileInputStream(cacheFile))) {
743
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   632
				/* (non-Javadoc)
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   633
				 * @see java.io.ObjectInputStream#resolveClass(java.io.ObjectStreamClass)
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   634
				 */
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   635
				@Override
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   636
				protected Class<?> resolveClass(ObjectStreamClass desc)
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   637
						throws IOException, ClassNotFoundException {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   638
					String name = desc.getName();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   639
					try {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   640
						return classLoader.loadClass(name);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   641
					} catch (ClassNotFoundException e) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   642
						return super.resolveClass(desc);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   643
					}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   644
				}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   645
			};
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   646
			doLoadCache(is);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   647
			if (DEBUG) System.out.println("Loaded cache from " + cacheFile); //$NON-NLS-1$
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   648
		} catch (ClassNotFoundException e) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   649
			// this is probably a bug
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   650
			e.printStackTrace();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   651
		} catch (ObjectStreamException e) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   652
			// assume it's just out of sync (e.g. object signatures changed), so nothing in Error Log
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   653
			e.printStackTrace();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   654
			cacheFile.delete();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   655
		} catch (IOException e) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   656
			// oh well, not made yet
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   657
		} finally {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   658
			if (is != null) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   659
				try {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   660
					is.close();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   661
				} catch (IOException e) {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   662
				}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   663
			}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   664
			changed = false;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   665
		}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   666
	}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   667
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   668
	/**
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   669
	 * @param os
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   670
	 */
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   671
	private void doSaveCache(ObjectOutputStream os) throws IOException {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   672
		os.writeObject(systemIncludes);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   673
		savePath(os, compilerPrefixFile);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   674
		os.writeObject(compilerPrefixFileInfo);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   675
		os.writeObject(compilerPrefixMacros);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   676
		os.writeObject(hrhFileInfo);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   677
		os.writeObject(hrhFilesParsed);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   678
		os.writeObject(variantHRHMacros);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   679
	}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   680
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   681
	
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   682
	/**
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   683
	 * Load entries from the cache.  This must match the ordering in
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   684
	 * {@link #doSaveCache(ObjectOutputStream)}.
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   685
	 * @param is
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   686
	 */
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   687
	private void doLoadCache(ObjectInputStream is) throws IOException, ClassCastException, ClassNotFoundException {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   688
		systemIncludes = loadList(is, File.class);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   689
		compilerPrefixFile = loadPath(is);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   690
		compilerPrefixFileInfo = (ExternalFileInfoCollection) is.readObject();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   691
		compilerPrefixMacros = loadList(is, IDefine.class);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   692
		hrhFileInfo = (ExternalFileInfoCollection) is.readObject();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   693
		hrhFilesParsed = loadList(is, File.class);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   694
		variantHRHMacros = loadList(is, IDefine.class);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   695
	}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   696
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   697
	/**
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   698
	 * Read an IPath from a portable string
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   699
	 * @param is
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   700
	 * @return an IPath constructed from a String
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   701
	 */
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   702
	private IPath loadPath(ObjectInputStream is) throws IOException, ClassCastException, ClassNotFoundException {	
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   703
		String path;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   704
		path = (String) is.readObject();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   705
		if (path != null)
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   706
			return Path.fromPortableString(path);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   707
		return null;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   708
	}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   709
	
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   710
	/**
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   711
	 * Save an IPath as a portable string
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   712
	 * @param os
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   713
	 * @param path
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   714
	 * @throws IOException
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   715
	 */
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   716
	private void savePath(ObjectOutputStream os, IPath path) throws IOException {
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   717
		os.writeObject(path != null ? path.toPortableString() : null);
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   718
	}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   719
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   720
	/**
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   721
	 * Load a list from the object stream, throwing if it appears to contain
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   722
	 * the wrong kind of data.
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   723
	 * @param is
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   724
	 * @param klass
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   725
	 * @return a List or <code>null</code>
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   726
	 */
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   727
	@SuppressWarnings("unchecked")
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   728
	private <T> List<T> loadList(ObjectInputStream is, Class<T> klass) throws IOException, ClassCastException, ClassNotFoundException { 
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   729
		List<T> list = (List) is.readObject();
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   730
		if (list == null || klass == null || list.size() == 0)
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   731
			return list;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   732
		if (!klass.isInstance(list.get(0)))
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   733
			throw new IOException("Class contains " + list.get(0).getClass() + ", not " + klass); //$NON-NLS-1$ //$NON-NLS-2$
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   734
		return list;
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   735
	}
78fd666a897a Fix filesystem caching performance as in bug #10318
Ed Swartz <ed.swartz@nokia.com>
parents:
diff changeset
   736
}