# HG changeset patch # User Alexander Simon # Date 1478107605 -10800 # Wed Nov 02 20:26:45 2016 +0300 # Branch release82 # Node ID 426e6987529f08363c6f0d45c3a9bd87f025101b # Parent 9b53a786a8095adb35900f2f32c394579bc4d7c3 fixing Bug #268773 Building pkg-config on enum takes very long time diff --git a/cnd.toolchain/src/org/netbeans/modules/cnd/toolchain/execution/ErrorParser.java b/cnd.toolchain/src/org/netbeans/modules/cnd/toolchain/execution/ErrorParser.java --- a/cnd.toolchain/src/org/netbeans/modules/cnd/toolchain/execution/ErrorParser.java +++ b/cnd.toolchain/src/org/netbeans/modules/cnd/toolchain/execution/ErrorParser.java @@ -53,6 +53,7 @@ import org.netbeans.modules.cnd.api.toolchain.CompilerSet; import org.netbeans.modules.cnd.api.toolchain.PredefinedToolKind; import org.netbeans.modules.cnd.api.remote.PathMap; +import org.netbeans.modules.cnd.api.remote.RemoteFileUtil; import org.netbeans.modules.cnd.api.remote.RemoteSyncSupport; import org.netbeans.modules.cnd.api.toolchain.CompilerSetManager; import org.netbeans.modules.cnd.api.toolchain.Tool; @@ -72,6 +73,7 @@ protected FileObject relativeTo; protected final ExecutionEnvironment execEnv; + protected final ExecutionEnvironment soucreEnv; private final PathMap pathMap; private NativeProject nativeProject; private NativeFileSearch nativeFileSearch; @@ -81,6 +83,7 @@ this.relativeTo = relativeTo; this.execEnv = execEnv; pathMap = RemoteSyncSupport.getPathMap(execEnv, project); + soucreEnv = RemoteFileUtil.getProjectSourceExecutionEnvironment(project); init(project); } @@ -122,7 +125,11 @@ return FileSystemProvider.getFileObject(ExecutionEnvironmentFactory.getLocal(), FileSystemProvider.normalizeAbsolutePath(localFileName, ExecutionEnvironmentFactory.getLocal())); } - return FileSystemProvider.getFileObject(execEnv, FileSystemProvider.normalizeAbsolutePath(fileName, execEnv)); + FileObject res = FileSystemProvider.getFileObject(soucreEnv, FileSystemProvider.normalizeAbsolutePath(fileName, soucreEnv)); + if (res == null && !execEnv.equals(soucreEnv)) { + res = FileSystemProvider.getFileObject(execEnv, FileSystemProvider.normalizeAbsolutePath(fileName, execEnv)); + } + return res; } protected FileObject resolveRelativePath(FileObject relativeDir, String relativePath) { diff --git a/cnd.toolchain/src/org/netbeans/modules/cnd/toolchain/execution/GCCErrorParser.java b/cnd.toolchain/src/org/netbeans/modules/cnd/toolchain/execution/GCCErrorParser.java --- a/cnd.toolchain/src/org/netbeans/modules/cnd/toolchain/execution/GCCErrorParser.java +++ b/cnd.toolchain/src/org/netbeans/modules/cnd/toolchain/execution/GCCErrorParser.java @@ -76,15 +76,13 @@ private Stack relativesTo = new Stack(); private Stack relativesLevel = new Stack(); private ArrayList errorInludes = new ArrayList(); - private boolean isEntered; private OutputListenerRegistry listenerRegistry; public GCCErrorParser(Project project, CompilerFlavor flavor, ExecutionEnvironment execEnv, FileObject relativeTo) { super(project, execEnv, relativeTo); this.relativesTo.push(relativeTo); this.relativesLevel.push(0); - this.isEntered = false; - init(flavor); + init(flavor); } private void init(CompilerFlavor flavor) { @@ -201,6 +199,7 @@ private Result handleLine(String line, Matcher m) { if (m.pattern() == GCC_DIRECTORY_ENTER || m.pattern() == GCC_DIRECTORY_LEAVE) { + boolean isEntered = m.pattern() == GCC_DIRECTORY_ENTER; String levelString = m.group(1); int level = levelString == null ? 0 : Integer.parseInt(levelString); int baseLavel = relativesLevel.peek(); @@ -210,10 +209,9 @@ relativesLevel.push(level); isEntered = true; } else if (level == baseLavel) { - isEntered = !this.isEntered; + // } else { isEntered = false; - popLevel(); } if (isEntered) { if (!CndPathUtilities.isAbsolute(directory)) { @@ -225,11 +223,17 @@ } FileObject relativeDir = resolveFile(directory); if (relativeDir != null && relativeDir.isValid()) { - relativesTo.push(relativeDir); + if (relativesTo.size() == relativesLevel.size()) { + popPath(); + relativesTo.push(relativeDir); + } else { + relativesTo.push(relativeDir); + } } return ErrorParserProvider.NO_RESULT; } else { popPath(); + popLevel(); return ErrorParserProvider.NO_RESULT; } }