blob: 87569aad73edf8dc6b9f94d205275b505801b694 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2017 xored software, Inc.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* xored software, Inc. - initial API and Implementation (Alex Panchenko)
*******************************************************************************/
package org.eclipse.dltk.internal.core.builder;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.core.resources.IFile;
import org.eclipse.dltk.compiler.CharOperation;
import org.eclipse.dltk.core.DLTKCore;
import org.eclipse.dltk.core.IModelElement;
import org.eclipse.dltk.core.ISourceModule;
import org.eclipse.dltk.core.ModelException;
import org.eclipse.dltk.core.builder.IBuildContext;
import org.eclipse.dltk.core.builder.IBuildContextExtension;
import org.eclipse.dltk.core.builder.ISourceLineTracker;
import org.eclipse.dltk.utils.TextUtils;
import org.eclipse.osgi.util.NLS;
public abstract class AbstractBuildContext
implements IBuildContext, IBuildContextExtension {
private final Map<String, Object> attributes = new HashMap<>();
@Override
public Object get(String attribute) {
return attributes.get(attribute);
}
@Override
public void set(String attribute, Object value) {
if (value == null) {
attributes.remove(attribute);
} else {
attributes.put(attribute, value);
}
}
private final int buildType;
protected final ISourceModule module;
/**
* @param module
*/
protected AbstractBuildContext(ISourceModule module, int buildType) {
this.module = module;
this.buildType = buildType;
}
@Override
public int getBuildType() {
return buildType;
}
private char[] contents;
@Override
public final char[] getContents() {
if (contents == null) {
try {
contents = module.getSourceAsCharArray();
} catch (ModelException e) {
DLTKCore.error(NLS.bind(
Messages.AbstractBuildContext_errorRetrievingContentsOf,
module.getElementName()), e);
contents = CharOperation.NO_CHAR;
}
}
return contents;
}
private ISourceLineTracker lineTracker = null;
@Override
public ISourceLineTracker getLineTracker() {
if (lineTracker == null) {
lineTracker = TextUtils.createLineTracker(getContents());
}
return lineTracker;
}
@Override
public void setLineTracker(ISourceLineTracker tracker) {
this.lineTracker = tracker;
}
@Override
public boolean isLineTrackerCreated() {
return lineTracker != null;
}
@Override
public final ISourceModule getSourceModule() {
return module;
}
@Override
public final IFile getFile() {
return (IFile) module.getResource();
}
private String sourceContents;
@Override
public String getSourceContents() {
if (sourceContents == null) {
sourceContents = new String(getContents());
}
return sourceContents;
}
@Override
public char[] getContentsAsCharArray() {
return getContents();
}
@Override
public IModelElement getModelElement() {
return getSourceModule();
}
@Override
public String getFileName() {
return getSourceModule().getElementName();
}
}