/* * Copyright 2003-2016 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 jetbrains.mps.text.impl; import jetbrains.mps.make.java.ModelDependencies; import jetbrains.mps.make.java.RootDependencies; import jetbrains.mps.text.CompatibilityTextUnit; import jetbrains.mps.text.TextGenResult; import jetbrains.mps.text.TextUnit; import org.jetbrains.annotations.NotNull; /** * Produce collection of BaseLanguage dependencies (aka {@link ModelDependencies}) from information * associated with text unit. In fact, is specific to BL textgen and shall live there, however * there's no generic mechanism now in TextGen facet to pick all relevant data to serialize it along with * generated files, hence ModelDependencies in [kernel] and this builder in [textgen] * * See {@link CompatibilityTextUnit} for ideas how to get rid of explicit BL dependency. * Now, it seems better approach is to move this builder next to TextGen_Facet (which knows about [kernel] and [textgen]). It's still * not best solution (we need a mechanism to contribute these builders, along with cache generators, based on actual languages involved). * Shall get back to this question once RTU.findContextObject goes API/public (into TU) and I can use it without need to cast to RTU implementation * * @see jetbrains.mps.text.impl.DebugInfoBuilder * @author Artem Tikhomirov * @since 3.4 */ public class BLDependenciesBuilder { @NotNull public ModelDependencies build(@NotNull TextGenResult textResult) { ModelDependencies modelDependencies = new ModelDependencies(); for (TextUnit tu : textResult.getUnits()) { if (tu.getState() == TextUnit.Status.Empty) { continue; } if (tu instanceof RegularTextUnit) { RootDependencies.Source co = ((RegularTextUnit) tu).findContextObject(RootDependencies.Source.class); if (co != null) { RootDependencies deps = co.getDependencies(); if (deps != null) { modelDependencies.addDependencies(deps); } } } } return modelDependencies; } }