diff options
author | Eike Stepper | 2012-07-26 05:51:47 +0000 |
---|---|---|
committer | Eike Stepper | 2012-07-26 05:51:47 +0000 |
commit | 1734aeaae08c9204fbbae064afc075aec07a8a6c (patch) | |
tree | 05262d3bf5988d6df7363939f51120c4e09b9177 | |
parent | e224e60cc286e109e06a375c550f9a94406d88e0 (diff) | |
download | cdo-1734aeaae08c9204fbbae064afc075aec07a8a6c.tar.gz cdo-1734aeaae08c9204fbbae064afc075aec07a8a6c.tar.xz cdo-1734aeaae08c9204fbbae064afc075aec07a8a6c.zip |
Fix encoding
-rw-r--r-- | plugins/org.eclipse.emf.cdo.releng.version.ui/plugin.xml | 2 | ||||
-rw-r--r-- | plugins/org.eclipse.emf.cdo.releng.version.ui/src/org/eclipse/emf/cdo/releng/version/ui/QuickFixer.java (renamed from plugins/org.eclipse.emf.cdo.releng.version.ui/src/org/eclipse/emf/cdo/releng/version/ui/Quickfixer.java) | 105 | ||||
-rw-r--r-- | plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/Markers.java | 17 | ||||
-rw-r--r-- | plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/InvalidationTest.java | 81 |
4 files changed, 162 insertions, 43 deletions
diff --git a/plugins/org.eclipse.emf.cdo.releng.version.ui/plugin.xml b/plugins/org.eclipse.emf.cdo.releng.version.ui/plugin.xml index dbd3bf1d93..7c3d49483a 100644 --- a/plugins/org.eclipse.emf.cdo.releng.version.ui/plugin.xml +++ b/plugins/org.eclipse.emf.cdo.releng.version.ui/plugin.xml @@ -85,7 +85,7 @@ <extension point="org.eclipse.ui.ide.markerResolution"> <markerResolutionGenerator - class="org.eclipse.emf.cdo.releng.version.ui.Quickfixer" + class="org.eclipse.emf.cdo.releng.version.ui.QuickFixer" markerType="org.eclipse.emf.cdo.releng.version.VersionProblem"> </markerResolutionGenerator> </extension> diff --git a/plugins/org.eclipse.emf.cdo.releng.version.ui/src/org/eclipse/emf/cdo/releng/version/ui/Quickfixer.java b/plugins/org.eclipse.emf.cdo.releng.version.ui/src/org/eclipse/emf/cdo/releng/version/ui/QuickFixer.java index 0a24cdd715..184f2ae839 100644 --- a/plugins/org.eclipse.emf.cdo.releng.version.ui/src/org/eclipse/emf/cdo/releng/version/ui/Quickfixer.java +++ b/plugins/org.eclipse.emf.cdo.releng.version.ui/src/org/eclipse/emf/cdo/releng/version/ui/QuickFixer.java @@ -14,27 +14,75 @@ import org.eclipse.emf.cdo.releng.version.Markers; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IMarker; -import org.eclipse.core.runtime.CoreException; import org.eclipse.swt.graphics.Image; import org.eclipse.ui.IMarkerResolution; -import org.eclipse.ui.IMarkerResolution2; import org.eclipse.ui.IMarkerResolutionGenerator2; +import org.eclipse.ui.views.markers.WorkbenchMarkerResolution; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.CharArrayWriter; import java.io.InputStream; import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @author Eike Stepper */ -public class Quickfixer /* extends WorkbenchMarkerResolution */implements IMarkerResolutionGenerator2 +public class QuickFixer implements IMarkerResolutionGenerator2 { - private static final IMarkerResolution MARKER_RESOLUTION = new IMarkerResolution2() + private static final IMarkerResolution[] NO_MARKER_RESOLUTIONS = {}; + + public QuickFixer() + { + } + + public IMarkerResolution[] getResolutions(IMarker marker) + { + if (hasResolutions(marker)) + { + IMarkerResolution[] markers = { new VersionMarkerResolution(marker) }; + return markers; + } + + return NO_MARKER_RESOLUTIONS; + } + + public boolean hasResolutions(IMarker marker) { + return Markers.hasQuickFixes(marker); + } + + /** + * @author Eike Stepper + */ + private static final class VersionMarkerResolution extends WorkbenchMarkerResolution + { + private IMarker marker; + + public VersionMarkerResolution(IMarker marker) + { + this.marker = marker; + } + + public String getLabel() + { + return "Foo"; + } + + public String getDescription() + { + return "Foo Foo Foo"; + } + + public Image getImage() + { + return null; + } + public void run(IMarker marker) { try @@ -45,8 +93,7 @@ public class Quickfixer /* extends WorkbenchMarkerResolution */implements IMarke { IFile file = (IFile)marker.getResource(); InputStream contents = file.getContents(); - String charset = file.getCharset(); - BufferedReader reader = new BufferedReader(new InputStreamReader(contents, charset)); + BufferedReader reader = new BufferedReader(new InputStreamReader(contents, file.getCharset())); CharArrayWriter caw = new CharArrayWriter(); int c; @@ -74,7 +121,7 @@ public class Quickfixer /* extends WorkbenchMarkerResolution */implements IMarke replacement = ""; } - file.setContents(new ByteArrayInputStream((before + replacement + after).getBytes(charset)), true, true, + file.setContents(new ByteArrayInputStream((before + replacement + after).getBytes(file.getCharset())), true, true, null); } } @@ -85,41 +132,19 @@ public class Quickfixer /* extends WorkbenchMarkerResolution */implements IMarke } } - public String getLabel() - { - return "Foo"; - } - - public Image getImage() - { - return null; - } - - public String getDescription() + @Override + public IMarker[] findOtherMarkers(IMarker[] markers) { - return "Foo Foo Foo"; - } - }; - - private static final IMarkerResolution[] MARKER_RESOLUTIONS = new IMarkerResolution[] { MARKER_RESOLUTION }; - - private static final IMarkerResolution[] NO_MARKER_RESOLUTIONS = new IMarkerResolution[0]; - - public IMarkerResolution[] getResolutions(IMarker marker) - { - return hasResolutions(marker) ? MARKER_RESOLUTIONS : NO_MARKER_RESOLUTIONS; - } + List<IMarker> result = new ArrayList<IMarker>(); + for (IMarker marker : markers) + { + if (marker != this.marker && Markers.hasQuickFixes(marker)) + { + result.add(marker); + } + } - public boolean hasResolutions(IMarker marker) - { - try - { - return marker.getAttribute(Markers.QUICK_FIX_PATTERN) != null; - } - catch (CoreException ex) - { - Activator.log(ex); - return false; + return result.toArray(new IMarker[result.size()]); } } } diff --git a/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/Markers.java b/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/Markers.java index 0e76c650df..dadc1d4f3b 100644 --- a/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/Markers.java +++ b/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/Markers.java @@ -32,7 +32,7 @@ public final class Markers public static final String QUICK_FIX_PATTERN = "quickFixPattern"; - public static final String QUICK_FIX_REPLACEMENT = "quickReplacement"; + public static final String QUICK_FIX_REPLACEMENT = "quickReplacement"; private static final Pattern NL_PATTERN = Pattern.compile("([\\n][\\r]?|[\\r][\\n]?)", Pattern.MULTILINE); @@ -40,6 +40,19 @@ public final class Markers { } + public static boolean hasQuickFixes(IMarker marker) + { + try + { + return marker.getAttribute(QUICK_FIX_PATTERN) != null; + } + catch (CoreException ex) + { + Activator.log(ex); + return false; + } + } + public static IMarker addMarker(IResource resource, String message) throws CoreException { return addMarker(resource, message, IMarker.SEVERITY_ERROR); @@ -93,7 +106,7 @@ public final class Markers try { contents = file.getContents(); - BufferedReader reader = new BufferedReader(new InputStreamReader(contents)); + BufferedReader reader = new BufferedReader(new InputStreamReader(contents, file.getCharset())); CharArrayWriter caw = new CharArrayWriter(); int c; diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/InvalidationTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/InvalidationTest.java index 05987c36bc..e3c136122f 100644 --- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/InvalidationTest.java +++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/InvalidationTest.java @@ -26,9 +26,11 @@ import org.eclipse.emf.cdo.util.CDOUtil; import org.eclipse.emf.cdo.util.InvalidObjectException; import org.eclipse.emf.cdo.view.CDOView; +import org.eclipse.emf.internal.cdo.session.CDOSessionImpl; import org.eclipse.emf.internal.cdo.view.CDOViewImpl; import org.eclipse.net4j.util.ObjectUtil; +import org.eclipse.net4j.util.ReflectUtil; import org.eclipse.net4j.util.event.IEvent; import org.eclipse.net4j.util.event.IListener; @@ -40,6 +42,10 @@ import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.emf.spi.cdo.FSMUtil; import java.io.IOException; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; @@ -48,6 +54,81 @@ import java.util.concurrent.TimeUnit; */ public class InvalidationTest extends AbstractCDOTest { + public void testIvalidationMemoryLeak() throws Exception + { + final CDOSession session = openSession(); + + /** + * @author Eike Stepper + */ + class MyTransTest implements Runnable + { + private int nr; + + public MyTransTest(int nr) + { + this.nr = nr; + } + + public void run() + { + for (int i = 0; i < 10; i++) + { + Category category = getModel1Factory().createCategory(); + category.setName("Category " + System.currentTimeMillis()); + + CDOTransaction transaction = session.openTransaction(); + + try + { + CDOResource resource = transaction.getOrCreateResource(getResourcePath("/test1_" + nr)); + resource.getContents().add(category); + transaction.commit(); + } + catch (Exception ex) + { + ex.printStackTrace(); + } + finally + { + transaction.close(); + } + } + } + } + + List<Thread> threads = new ArrayList<Thread>(); + for (int i = 0; i < 20; i++) + { + threads.add(new Thread(new MyTransTest(i + 1))); + } + + for (Thread thread : threads) + { + thread.start(); + } + + for (Thread thread : threads) + { + thread.join(); + } + + // session.refresh(); + // sleep(2000); + + new MyTransTest(0).run(); + + sleep(60000); + + // session.refresh(); + + Field field = ReflectUtil.getField(CDOSessionImpl.class, "outOfSequenceInvalidations"); + Map<?, ?> outOfSequenceInvalidations = (Map<?, ?>)ReflectUtil.getValue(field, session); + + int size = outOfSequenceInvalidations.size(); + assertEquals(0, size); + } + public void testSeparateView() throws Exception { final CDOSession session = openSession(); |