/*
* 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.smodel.runtime;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.mps.openapi.language.SAbstractConcept;
/**
* LanguageRuntime is allowed to return null descriptor in case there are no constraints for language's concept defined right in the language.
* Access to constraints from concept's hierarchy is done by ConceptRegistry at the moment.
* We might change the contract and generate descriptor class always, delegating to superclass as appropriate, however, need to address two issues first:
* (a) we don't want to go further than immediate superclasses (i.e. don't want to fix complete concept structure at generation time), and even for immediate
* superclasses we'd like to grab newly added constraints, if any, without re-generation.
* (b) if we could reference generated descriptors class directly (doesn't look feasible at the moment, due to (a), don't want to fix exact superclass to go to),
* we might simply use delegation. Alternative is to generate a class that does a callback, so RT could pick proper superclass to go to. We don't have such
* API yet, nor are ready to introduce it. Besides, it would be pretty much the same as present approach, with a burden of extra generated class.
* <p/>
*
* @see jetbrains.mps.smodel.runtime.BehaviorAspectDescriptor
*/
public interface ConstraintsAspectDescriptor extends ILanguageAspect {
@Nullable
ConstraintsDescriptor getConstraints(@NotNull SAbstractConcept concept);
}