GenerationStrategy is now a strategy

This commit is contained in:
Andrey Breslav
2012-12-24 14:48:22 +04:00
parent 758bebafa4
commit a91b113cc3
10 changed files with 140 additions and 73 deletions
@@ -35,10 +35,7 @@ import com.intellij.psi.util.*;
import com.intellij.util.containers.Stack;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.codegen.ClassBuilder;
import org.jetbrains.jet.codegen.ClassBuilderFactory;
import org.jetbrains.jet.codegen.ClassBuilderMode;
import org.jetbrains.jet.codegen.CompilationErrorHandler;
import org.jetbrains.jet.codegen.*;
import org.jetbrains.jet.codegen.binding.PsiCodegenPredictor;
import org.jetbrains.jet.codegen.state.GenerationState;
import org.jetbrains.jet.codegen.state.GenerationStrategy;
@@ -213,9 +210,10 @@ public class JetLightClass extends AbstractLightClass implements JetJavaMirrorMa
GenerationState state = new GenerationState(project, builderFactory, context.getBindingContext(), Collections.singletonList(file));
VirtualFile virtualFile = file.getVirtualFile();
assert virtualFile != null;
GenerationStrategy strategy = new LightClassGenerationStrategy(virtualFile, stubStack, answer);
strategy.compileCorrectFiles(state, CompilationErrorHandler.THROW_EXCEPTION);
GenerationStrategy strategy = new LightClassGenerationStrategy(virtualFile, stubStack, answer);
KotlinCodegenFacade.compileCorrectFiles(state, strategy, CompilationErrorHandler.THROW_EXCEPTION);
state.getFactory().files();
}
catch (ProcessCanceledException e) {
@@ -30,12 +30,13 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.codegen.CompilationErrorHandler;
import org.jetbrains.jet.codegen.state.GenerationState;
import org.jetbrains.jet.codegen.state.GenerationStrategy;
import org.jetbrains.jet.codegen.state.StandardGenerationStrategy;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.resolve.name.FqName;
import java.util.Collection;
class LightClassGenerationStrategy extends GenerationStrategy {
class LightClassGenerationStrategy implements GenerationStrategy {
private static final Logger LOG = Logger.getInstance("#org.jetbrains.jet.asJava.LightClassGenerationStrategy");
private final Stack<StubElement> stubStack;
@@ -50,10 +51,10 @@ class LightClassGenerationStrategy extends GenerationStrategy {
@Override
public void generateNamespace(
GenerationState state,
FqName fqName,
Collection<JetFile> namespaceFiles,
CompilationErrorHandler errorHandler
@NotNull GenerationState state,
@NotNull FqName fqName,
@NotNull Collection<JetFile> namespaceFiles,
@NotNull CompilationErrorHandler errorHandler
) {
PsiManager manager = PsiManager.getInstance(state.getProject());
stubStack.push(answer);
@@ -71,7 +72,7 @@ class LightClassGenerationStrategy extends GenerationStrategy {
fakeFile.setPhysical(false);
answer.setPsi(fakeFile);
super.generateNamespace(state, fqName, namespaceFiles, errorHandler);
StandardGenerationStrategy.INSTANCE.generateNamespace(state, fqName, namespaceFiles, errorHandler);
final StubElement pop = stubStack.pop();
if (pop != answer) {
LOG.error("Unbalanced stack operations: " + pop);