blob: 835c4fe2d66299dc1faba10aabcfd07bc1c1b5cb [file] [log] [blame]
/*
* Copyright 2000-2009 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.compiler.impl.javaCompiler.javac;
import com.intellij.compiler.OutputParser;
import com.intellij.openapi.compiler.CompilerBundle;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.FileTypeManager;
import com.intellij.openapi.fileTypes.StdFileTypes;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author Eugene Zhuravlev
* Date: Sep 14, 2005
*/
public class FilePathActionJavac extends JavacParserAction {
private static final Logger LOG = Logger.getInstance("#com.intellij.compiler.impl.javaCompiler.javac.FilePathActionJavac");
private final Matcher myJdk7FormatMatcher;
public FilePathActionJavac(final Matcher matcher) {
super(matcher);
myJdk7FormatMatcher = Pattern.compile("^\\w+\\[(.+)\\]$", Pattern.CASE_INSENSITIVE).matcher("");
}
protected void doExecute(final String line, String filePath, final OutputParser.Callback callback) {
if (LOG.isDebugEnabled()) {
LOG.debug("Process parsing message: " + filePath);
}
// for jdk7: cut off characters wrapping the path. e.g. "RegularFileObject[C:/tmp/bugs/src/a/Demo1.java]"
if (myJdk7FormatMatcher.reset(filePath).matches()) {
filePath = myJdk7FormatMatcher.group(1);
}
int index = filePath.lastIndexOf('/');
final String name = index >= 0 ? filePath.substring(index + 1) : filePath;
final FileType fileType = FileTypeManager.getInstance().getFileTypeByFileName(name);
if (StdFileTypes.JAVA.equals(fileType)) {
callback.fileProcessed(filePath);
callback.setProgressText(CompilerBundle.message("progress.parsing.file", name));
}
else if (StdFileTypes.CLASS.equals(fileType)) {
callback.fileGenerated(filePath);
}
}
}