lang-api
[idea/community.git] / platform / lang-api / src / com / intellij / lang / injection / InjectedLanguageManager.java
1 /*
2  * Copyright 2000-2007 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 /*
18  * Created by IntelliJ IDEA.
19  * User: cdr
20  * Date: Jun 8, 2007
21  * Time: 8:41:25 PM
22  */
23 package com.intellij.lang.injection;
24
25 import com.intellij.openapi.components.ProjectComponent;
26 import com.intellij.openapi.extensions.ExtensionPointName;
27 import com.intellij.openapi.project.Project;
28 import com.intellij.openapi.util.TextRange;
29 import com.intellij.psi.PsiElement;
30 import com.intellij.psi.PsiFile;
31 import com.intellij.psi.PsiLanguageInjectionHost;
32 import org.jetbrains.annotations.NotNull;
33 import org.jetbrains.annotations.Nullable;
34
35 import java.util.List;
36
37 public abstract class InjectedLanguageManager implements ProjectComponent {
38
39   /** @see com.intellij.lang.injection.MultiHostInjector#MULTIHOST_INJECTOR_EP_NAME */
40   @Deprecated
41   public static final ExtensionPointName<MultiHostInjector> MULTIHOST_INJECTOR_EP_NAME = MultiHostInjector.MULTIHOST_INJECTOR_EP_NAME;
42
43   public static InjectedLanguageManager getInstance(Project project) {
44     return project.getComponent(InjectedLanguageManager.class);
45   }
46
47   @Nullable
48   public abstract PsiLanguageInjectionHost getInjectionHost(@NotNull PsiElement element);
49
50   @NotNull
51   public abstract TextRange injectedToHost(@NotNull PsiElement element, @NotNull TextRange textRange);
52   public abstract int injectedToHost(@NotNull PsiElement element, int offset);
53
54   /** @see com.intellij.lang.injection.MultiHostInjector#MULTIHOST_INJECTOR_EP_NAME */
55   @Deprecated
56   public abstract void registerMultiHostInjector(@NotNull MultiHostInjector injector);
57   /** @see com.intellij.lang.injection.MultiHostInjector#MULTIHOST_INJECTOR_EP_NAME */
58   @Deprecated
59   public abstract boolean unregisterMultiHostInjector(@NotNull MultiHostInjector injector);
60
61   public abstract String getUnescapedText(@NotNull PsiElement injectedNode);
62
63   @NotNull
64   public abstract List<TextRange> intersectWithAllEditableFragments(@NotNull PsiFile injectedPsi, @NotNull TextRange rangeToEdit);
65
66   public abstract boolean isInjectedFragment(PsiFile file);
67
68   @Nullable
69   public abstract PsiElement findInjectedElementAt(@NotNull PsiFile hostFile, int hostDocumentOffset);
70 }