Package com.dci.intellij.dbn.language.common

Source Code of com.dci.intellij.dbn.language.common.DBLanguage

package com.dci.intellij.dbn.language.common;

import com.dci.intellij.dbn.code.common.style.options.CodeStyleCustomSettings;
import com.dci.intellij.dbn.connection.ConnectionHandler;
import com.dci.intellij.dbn.connection.mapping.FileConnectionMappingManager;
import com.intellij.lang.Language;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.tree.IFileElementType;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;

public abstract class DBLanguage<D extends DBLanguageDialect> extends Language implements DBFileElementTypeProvider {

    private D[] languageDialects;
    private SharedTokenTypeBundle sharedTokenTypes;
    private IFileElementType fileElementType;

    protected DBLanguage(final @NonNls String id, final @NonNls String... mimeTypes){
        super(id, mimeTypes);
        sharedTokenTypes = new SharedTokenTypeBundle(this);
    }

    public synchronized final IFileElementType getFileElementType() {
        if (fileElementType == null) {
            fileElementType = createFileElementType(this);
        }
        return fileElementType;
    }

    protected abstract IFileElementType createFileElementType(DBLanguage<D> language);


    public SharedTokenTypeBundle getSharedTokenTypes() {
        return sharedTokenTypes;
    }

    protected abstract D[] createLanguageDialects();
    public abstract D getMainLanguageDialect();

    public D getLanguageDialect(Project project, VirtualFile virtualFile) {
        ConnectionHandler connectionHandler = FileConnectionMappingManager.getInstance(project).getActiveConnection(virtualFile);
        if (connectionHandler != null) {
            return (D) connectionHandler.getLanguageDialect(this);
        }
        return getMainLanguageDialect();
    }

    @NotNull
    public D[] getAvailableLanguageDialects() {
        synchronized (this) {
            if (languageDialects == null) {
                languageDialects = createLanguageDialects();
            }
            return languageDialects;
        }
    }

    public D getLanguageDialect(DBLanguageDialectIdentifier id) {
        for (D languageDialect: getAvailableLanguageDialects()) {
            if (languageDialect.getID().equals(id.getValue())) {
                return languageDialect;
            }
        }
        return null;
    }

    public abstract CodeStyleCustomSettings getCodeStyleSettings(Project project);

    public DBLanguageParserDefinition getParserDefinition(ConnectionHandler connectionHandler) {
        return connectionHandler.getLanguageDialect(this).getParserDefinition();
    }
}
TOP

Related Classes of com.dci.intellij.dbn.language.common.DBLanguage

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.