| /* |
| * Copyright 2008 Google Inc. |
| * |
| * 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 com.google.gwt.dev.javac.impl; |
| |
| import com.google.gwt.dev.resource.Resource; |
| import com.google.gwt.dev.util.Util; |
| |
| import java.io.ByteArrayInputStream; |
| import java.io.InputStream; |
| import java.util.concurrent.atomic.AtomicLong; |
| |
| /** |
| * An in-memory {@link Resource}. |
| */ |
| public abstract class MockResource extends Resource { |
| private static final AtomicLong lastTimeStamp = new AtomicLong(); |
| |
| private static long getNextCreationTime() { |
| long currentTime = System.currentTimeMillis(); |
| long lastTime; |
| // Go into the future until we succeed. |
| do { |
| lastTime = lastTimeStamp.get(); |
| if (currentTime <= lastTime) { |
| currentTime = lastTime + 1; |
| } |
| } while (!lastTimeStamp.compareAndSet(lastTime, currentTime)); |
| return currentTime; |
| } |
| |
| private long creationTime = getNextCreationTime(); |
| private final String path; |
| |
| public MockResource(String path) { |
| this.path = path; |
| } |
| |
| @Override |
| public long getLastModified() { |
| return creationTime; |
| } |
| |
| @Override |
| public String getLocation() { |
| return "/mock/" + path; |
| } |
| |
| @Override |
| public String getPath() { |
| return path; |
| } |
| |
| public String getString() { |
| return getContent().toString(); |
| } |
| |
| @Override |
| public InputStream openContents() { |
| return new ByteArrayInputStream(Util.getBytes(getContent().toString())); |
| } |
| |
| @Override |
| public boolean wasRerooted() { |
| return false; |
| } |
| |
| protected abstract CharSequence getContent(); |
| |
| protected void touch() { |
| creationTime = getNextCreationTime(); |
| } |
| } |